diff --git a/doc/APIchanges b/doc/APIchanges index bbb1331e6f..7e3c592d75 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2012-10-22 API changes, most recent first: +2014-04-xx - xxxxxxx - lavc 55.50.3 - avcodec.h + Deprecate CODEC_FLAG_MV0. It is replaced by the flag "mv0" in the + "mpv_flags" private option of the mpegvideo encoders. + 2014-04-xx - xxxxxxx - lavc 55.50.2 - avcodec.h Deprecate CODEC_FLAG_GMC. It is replaced by the "gmc" private option of the libxvid encoder. diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 883f6cdf1c..35ecc6df9a 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -751,7 +751,13 @@ typedef struct RcOverride{ */ #define CODEC_FLAG_GMC 0x0020 ///< Use GMC. #endif -#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>. +#if FF_API_MV0 +/** + * @deprecated use the flag "mv0" in the "mpv_flags" private option of the + * mpegvideo encoders + */ +#define CODEC_FLAG_MV0 0x0040 +#endif #if FF_API_INPUT_PRESERVED /** * @deprecated passing reference-counted frames to the encoders replaces this diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index af9ceb5d0b..939dedf17d 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -991,7 +991,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, // if (varc*2 + 200*256 + 50*(s->lambda2>>FF_LAMBDA_SHIFT) > vard){ mb_type|= CANDIDATE_MB_TYPE_INTER; c->sub_motion_search(s, &mx, &my, dmin, 0, 0, 0, 16); - if(s->flags&CODEC_FLAG_MV0) + if (s->mpv_flags & FF_MPV_FLAG_MV0) if(mx || my) mb_type |= CANDIDATE_MB_TYPE_SKIPPED; //FIXME check difference }else{ @@ -1610,7 +1610,8 @@ void ff_estimate_b_frame_motion(MpegEncContext * s, } //FIXME something smarter if(dmin>256*256*16) type&= ~CANDIDATE_MB_TYPE_DIRECT; //do not try direct mode if it is invalid for this MB - if(s->codec_id == AV_CODEC_ID_MPEG4 && type&CANDIDATE_MB_TYPE_DIRECT && s->flags&CODEC_FLAG_MV0 && *(uint32_t*)s->b_direct_mv_table[xy]) + if (s->codec_id == AV_CODEC_ID_MPEG4 && type&CANDIDATE_MB_TYPE_DIRECT && + s->mpv_flags & FF_MPV_FLAG_MV0 && *(uint32_t*)s->b_direct_mv_table[xy]) type |= CANDIDATE_MB_TYPE_DIRECT0; } diff --git a/libavcodec/motion_est_template.c b/libavcodec/motion_est_template.c index 2fa97aa8e2..53a39c0cbe 100644 --- a/libavcodec/motion_est_template.c +++ b/libavcodec/motion_est_template.c @@ -894,7 +894,8 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int score_map[0]= dmin; //FIXME precalc first term below? - if((s->pict_type == AV_PICTURE_TYPE_B && !(c->flags & FLAG_DIRECT)) || s->flags&CODEC_FLAG_MV0) + if ((s->pict_type == AV_PICTURE_TYPE_B && !(c->flags & FLAG_DIRECT)) || + s->mpv_flags & FF_MPV_FLAG_MV0) dmin += (mv_penalty[pred_x] + mv_penalty[pred_y])*penalty_factor; /* first line */ diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 18173c8bf4..7a49d2ea1d 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -668,6 +668,7 @@ typedef struct MpegEncContext { #define FF_MPV_FLAG_QP_RD 0x0004 #define FF_MPV_FLAG_CBP_RD 0x0008 #define FF_MPV_FLAG_NAQ 0x0010 +#define FF_MPV_FLAG_MV0 0x0020 #define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x) #define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) @@ -678,6 +679,7 @@ typedef struct MpegEncContext { { "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ { "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ { "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ { "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\ FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ { "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\ diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index ad60e4f933..99ab885687 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -897,6 +897,13 @@ av_cold int ff_MPV_encode_init(AVCodecContext *avctx) FF_ENABLE_DEPRECATION_WARNINGS; #endif +#if FF_API_MV0 + FF_DISABLE_DEPRECATION_WARNINGS + if (avctx->flags & CODEC_FLAG_MV0) + s->mpv_flags |= FF_MPV_FLAG_MV0; + FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (avctx->b_frame_strategy == 2) { for (i = 0; i < s->max_b_frames + 2; i++) { s->tmp_frames[i] = av_frame_alloc(); diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index 8d47828114..822c065442 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -57,7 +57,9 @@ static const AVOption avcodec_options[] = { #if FF_API_GMC {"gmc", "use gmc", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_GMC }, INT_MIN, INT_MAX, V|E, "flags"}, #endif +#if FF_API_MV0 {"mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_MV0 }, INT_MIN, INT_MAX, V|E, "flags"}, +#endif #if FF_API_INPUT_PRESERVED {"input_preserved", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_INPUT_PRESERVED }, INT_MIN, INT_MAX, 0, "flags"}, #endif diff --git a/libavcodec/version.h b/libavcodec/version.h index a13d479026..cd2b0d89c3 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -30,7 +30,7 @@ #define LIBAVCODEC_VERSION_MAJOR 55 #define LIBAVCODEC_VERSION_MINOR 60 -#define LIBAVCODEC_VERSION_MICRO 102 +#define LIBAVCODEC_VERSION_MICRO 103 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ @@ -156,5 +156,8 @@ #ifndef FF_API_GMC #define FF_API_GMC (LIBAVCODEC_VERSION_MAJOR < 57) #endif +#ifndef FF_API_MV0 +#define FF_API_MV0 (LIBAVCODEC_VERSION_MAJOR < 57) +#endif #endif /* AVCODEC_VERSION_H */