On Mon, Jan 4, 2016 at 2:34 PM, Vittorio Giovara
<[email protected]> wrote:
> This option is only used by mpegvideoenc, x264, and xavs.
> It is a very codec-specific option, so deprecate the global variant.
>
> Signed-off-by: Vittorio Giovara <[email protected]>
> ---
>  libavcodec/avcodec.h       | 10 ++++------
>  libavcodec/libx264.c       | 16 ++++++++++++++--
>  libavcodec/libxavs.c       | 11 ++++++++++-
>  libavcodec/mpegvideo.h     |  3 +++
>  libavcodec/mpegvideo_enc.c | 12 ++++++++++--
>  libavcodec/options_table.h |  2 ++
>  6 files changed, 43 insertions(+), 11 deletions(-)
>
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 355e6f6..b4e41aa 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -1872,13 +1872,11 @@ typedef struct AVCodecContext {
>       */
>      uint16_t *inter_matrix;
>
> -    /**
> -     * scene change detection threshold
> -     * 0 is default, larger means fewer detected scene changes.
> -     * - encoding: Set by user.
> -     * - decoding: unused
> -     */
> +#if FF_API_PRIVATE_OPT
> +    /** @deprecated use encoder private options instead */
> +    attribute_deprecated
>      int scenechange_threshold;
> +#endif
>
>      /**
>       * noise reduction strength
> diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
> index 937583e..fad03a1 100644
> --- a/libavcodec/libx264.c
> +++ b/libavcodec/libx264.c
> @@ -81,6 +81,7 @@ typedef struct X264Context {
>      int coder;
>      int b_frame_strategy;
>      int chroma_offset;
> +    int scenechange_threshold;
>
>      char *x264_params;
>  } X264Context;
> @@ -427,8 +428,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          x4->params.i_keyint_max         = avctx->gop_size;
>      if (avctx->max_b_frames >= 0)
>          x4->params.i_bframe             = avctx->max_b_frames;
> -    if (avctx->scenechange_threshold >= 0)
> -        x4->params.i_scenecut_threshold = avctx->scenechange_threshold;
> +
> +#if FF_API_PRIVATE_OPT
> +FF_DISABLE_DEPRECATION_WARNINGS
> +    if (avctx->scenechange_threshold)
> +        x4->scenechange_threshold = avctx->scenechange_threshold;
> +    if (x4->scenechange_threshold >= 0)
> +FF_ENABLE_DEPRECATION_WARNINGS
> +#endif
> +    x4->params.i_scenecut_threshold = x4->scenechange_threshold;
> +
>      if (avctx->qmin >= 0)
>          x4->params.rc.i_qp_min          = avctx->qmin;
>      if (avctx->qmax >= 0)
> @@ -749,6 +758,7 @@ static const AVOption options[] = {
>      { "cabac",            NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 },  
> INT_MIN, INT_MAX, VE, "coder" },
>      { "b-strategy",   "Strategy to choose between I/P/B-frames",          
> OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, VE },
>      { "chroma-offset", "QP difference between chroma and luma",           
> OFFSET(chroma_offset), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, VE },
> +    { "sc-threshold", "Scene change threshold",                           
> OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE 
> },

Just like the others, why is the libx264 option spelled differently
than all the other encoders?
>
>      { "x264-params",  "Override the x264 configuration using a :-separated 
> list of key=value parameters", OFFSET(x264_params), AV_OPT_TYPE_STRING, { 0 
> }, 0, 0, VE },
>      { NULL },
> @@ -765,7 +775,9 @@ static const AVCodecDefault x264_defaults[] = {
>      { "qblur",            "-1" },
>      { "qcomp",            "-1" },
>      { "refs",             "-1" },
> +#if FF_API_PRIVATE_OPT
>      { "sc_threshold",     "-1" },
> +#endif
>      { "trellis",          "-1" },
>      { "nr",               "-1" },
>      { "me_range",         "-1" },
> diff --git a/libavcodec/libxavs.c b/libavcodec/libxavs.c
> index 6dae5fe..0dbf340 100644
> --- a/libavcodec/libxavs.c
> +++ b/libavcodec/libxavs.c
> @@ -58,6 +58,7 @@ typedef struct XavsContext {
>      int mixed_refs;
>      int b_frame_strategy;
>      int chroma_offset;
> +    int scenechange_threshold;
>
>      int64_t *pts_buffer;
>      int out_frame_count;
> @@ -330,7 +331,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
>      if (x4->params.i_keyint_min > x4->params.i_keyint_max)
>          x4->params.i_keyint_min = x4->params.i_keyint_max;
>
> -    x4->params.i_scenecut_threshold        = avctx->scenechange_threshold;
> +#if FF_API_PRIVATE_OPT
> +FF_DISABLE_DEPRECATION_WARNINGS
> +    if (avctx->scenechange_threshold)
> +        x4->scenechange_threshold = avctx->scenechange_threshold;
> +FF_ENABLE_DEPRECATION_WARNINGS
> +#endif
> +
> +    x4->params.i_scenecut_threshold = x4->scenechange_threshold;
>
>     // x4->params.b_deblocking_filter       = avctx->flags & 
> AV_CODEC_FLAG_LOOP_FILTER;
>
> @@ -458,6 +466,7 @@ static const AVOption options[] = {
>      { "tesa",          NULL,      0,    AV_OPT_TYPE_CONST, { .i64 = 
> XAVS_ME_TESA },              INT_MIN, INT_MAX, VE, "motion-est" },
>      { "b_strategy",    "Strategy to choose between I/P/B-frames",         
> OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, VE},
>      { "chroma_offset", "QP difference between chroma and luma",           
> OFFSET(chroma_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, VE},
> +    { "sc_threshold", "Scene change threshold",                           
> OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE},
>
>      { NULL },
>  };
> diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
> index 99bc297..0d6a708 100644
> --- a/libavcodec/mpegvideo.h
> +++ b/libavcodec/mpegvideo.h
> @@ -534,6 +534,8 @@ typedef struct MpegEncContext {
>      int frame_skip_factor;
>      int frame_skip_exp;
>      int frame_skip_cmp;
> +
> +    int scenechange_threshold;
>  } MpegEncContext;
>
>  /* mpegvideo_enc common options */
> @@ -606,6 +608,7 @@ FF_MPV_OPT_CMP_FUNC, \
>  {"skip_factor", "Frame skip factor",                                
> FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, 
> INT_MAX, FF_MPV_OPT_FLAGS }, \
>  {"skip_exp", "Frame skip exponent",                                 
> FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, 
> INT_MAX, FF_MPV_OPT_FLAGS }, \
>  {"skip_cmp", "Frame skip compare function",                         
> FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, 
> INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \
> +{"sc_threshold", "Scene change threshold",                          
> FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, 
> INT_MAX, FF_MPV_OPT_FLAGS }, \
>
>  extern const AVOption ff_mpv_generic_options[];
>
> diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
> index 9c0f015..29358dd 100644
> --- a/libavcodec/mpegvideo_enc.c
> +++ b/libavcodec/mpegvideo_enc.c
> @@ -468,7 +468,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          return -1;
>      }
>
> -    if (s->avctx->scenechange_threshold < 1000000000 &&
> +#if FF_API_PRIVATE_OPT
> +FF_DISABLE_DEPRECATION_WARNINGS
> +    if (avctx->scenechange_threshold)
> +        s->scenechange_threshold = avctx->scenechange_threshold;
> +FF_ENABLE_DEPRECATION_WARNINGS
> +#endif
> +
> +    if (s->scenechange_threshold < 1000000000 &&
>          (s->avctx->flags & AV_CODEC_FLAG_CLOSED_GOP)) {
>          av_log(avctx, AV_LOG_ERROR,
>                 "closed gop with scene change detection are not supported 
> yet, "
> @@ -3453,7 +3460,8 @@ static int encode_picture(MpegEncContext *s, int 
> picture_number)
>      s->current_picture.   mb_var_sum= s->current_picture_ptr->   mb_var_sum= 
> s->me.   mb_var_sum_temp;
>      emms_c();
>
> -    if(s->me.scene_change_score > s->avctx->scenechange_threshold && 
> s->pict_type == AV_PICTURE_TYPE_P){
> +    if (s->me.scene_change_score > s->scenechange_threshold &&
> +        s->pict_type == AV_PICTURE_TYPE_P) {
>          s->pict_type= AV_PICTURE_TYPE_I;
>          for(i=0; i<s->mb_stride*s->mb_height; i++)
>              s->mb_type[i]= CANDIDATE_MB_TYPE_INTRA;
> diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
> index 7a5766f..9b8739c 100644
> --- a/libavcodec/options_table.h
> +++ b/libavcodec/options_table.h
> @@ -323,7 +323,9 @@ static const AVOption avcodec_options[] = {
>  #if FF_API_STREAM_CODEC_TAG
>  {"stream_codec_tag", NULL, OFFSET(stream_codec_tag), AV_OPT_TYPE_INT, {.i64 
> = DEFAULT }, INT_MIN, INT_MAX},
>  #endif
> +#if FF_API_PRIVATE_OPT
>  {"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), 
> AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
> +#endif
>  #if FF_API_MPV_OPT
>  {"lmin", "deprecated, use encoder private options instead", OFFSET(lmin), 
> AV_OPT_TYPE_INT, {.i64 =  0 }, 0, INT_MAX, V|E},
>  {"lmax", "deprecated, use encoder private options instead", OFFSET(lmax), 
> AV_OPT_TYPE_INT, {.i64 =  0 }, 0, INT_MAX, V|E},
> --
> 2.6.4
>
> _______________________________________________
> libav-devel mailing list
> [email protected]
> https://lists.libav.org/mailman/listinfo/libav-devel
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to