Commit 0cc06b9e authored by Anton Khirnov's avatar Anton Khirnov

snow: add 'memc_only' private option.

Deprecate CODEC_FLAG2_MEMC_ONLY
parent 0dc5e12f
...@@ -619,7 +619,9 @@ typedef struct RcOverride{ ...@@ -619,7 +619,9 @@ typedef struct RcOverride{
#if FF_API_MPEGVIDEO_GLOBAL_OPTS #if FF_API_MPEGVIDEO_GLOBAL_OPTS
#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table. #define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table.
#endif #endif
#if FF_API_SNOW_GLOBAL_OPTS
#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC). #define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
#endif
#if FF_API_MPEGVIDEO_GLOBAL_OPTS #if FF_API_MPEGVIDEO_GLOBAL_OPTS
#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. #define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format.
#endif #endif
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
*/ */
#include "libavutil/intmath.h" #include "libavutil/intmath.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "avcodec.h" #include "avcodec.h"
#include "dsputil.h" #include "dsputil.h"
#include "dwt.h" #include "dwt.h"
...@@ -199,7 +201,7 @@ typedef struct Plane{ ...@@ -199,7 +201,7 @@ typedef struct Plane{
}Plane; }Plane;
typedef struct SnowContext{ typedef struct SnowContext{
AVClass *class;
AVCodecContext *avctx; AVCodecContext *avctx;
RangeCoder c; RangeCoder c;
DSPContext dsp; DSPContext dsp;
...@@ -252,6 +254,7 @@ typedef struct SnowContext{ ...@@ -252,6 +254,7 @@ typedef struct SnowContext{
int me_cache[ME_CACHE_SIZE]; int me_cache[ME_CACHE_SIZE];
int me_cache_generation; int me_cache_generation;
slice_buffer sb; slice_buffer sb;
int memc_only;
MpegEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX) MpegEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX)
...@@ -3518,7 +3521,7 @@ redo_frame: ...@@ -3518,7 +3521,7 @@ redo_frame:
int x, y; int x, y;
// int bits= put_bits_count(&s->c.pb); // int bits= put_bits_count(&s->c.pb);
if(!(avctx->flags2 & CODEC_FLAG2_MEMC_ONLY)){ if (!s->memc_only) {
//FIXME optimize //FIXME optimize
if(pict->data[plane_index]) //FIXME gray hack if(pict->data[plane_index]) //FIXME gray hack
for(y=0; y<h; y++){ for(y=0; y<h; y++){
...@@ -3676,6 +3679,20 @@ static av_cold int encode_end(AVCodecContext *avctx) ...@@ -3676,6 +3679,20 @@ static av_cold int encode_end(AVCodecContext *avctx)
return 0; return 0;
} }
#define OFFSET(x) offsetof(SnowContext, x)
#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
static const AVOption options[] = {
{ "memc_only", "Only do ME/MC (I frames -> ref, P frame -> ME+MC).", OFFSET(memc_only), FF_OPT_TYPE_INT, { 0 }, 0, 1, VE },
{ NULL },
};
static const AVClass snowenc_class = {
.class_name = "snow encoder",
.item_name = av_default_item_name,
.option = options,
.version = LIBAVUTIL_VERSION_INT,
};
AVCodec ff_snow_encoder = { AVCodec ff_snow_encoder = {
.name = "snow", .name = "snow",
.type = AVMEDIA_TYPE_VIDEO, .type = AVMEDIA_TYPE_VIDEO,
...@@ -3685,5 +3702,6 @@ AVCodec ff_snow_encoder = { ...@@ -3685,5 +3702,6 @@ AVCodec ff_snow_encoder = {
.encode = encode_frame, .encode = encode_frame,
.close = encode_end, .close = encode_end,
.long_name = NULL_IF_CONFIG_SMALL("Snow"), .long_name = NULL_IF_CONFIG_SMALL("Snow"),
.priv_class = &snowenc_class,
}; };
#endif #endif
...@@ -92,5 +92,8 @@ ...@@ -92,5 +92,8 @@
#ifndef FF_API_LAME_GLOBAL_OPTS #ifndef FF_API_LAME_GLOBAL_OPTS
#define FF_API_LAME_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54) #define FF_API_LAME_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54)
#endif #endif
#ifndef FF_API_SNOW_GLOBAL_OPTS
#define FF_API_SNOW_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 54)
#endif
#endif /* AVCODEC_VERSION_H */ #endif /* AVCODEC_VERSION_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment