X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibx264.c;h=5030d65f79ef07af6335f897df4000534a486b14;hb=35346c7b0f7cddf8581a6aac3178c3ecf7c25283;hp=ffb9142923bfce8de16e0381985183d832a3b071;hpb=4f32ccb61800ef1a0acf02010784da4f15adde44;p=ffmpeg diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index ffb9142923b..5030d65f79e 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -87,6 +87,9 @@ typedef struct X264Context { int coder; int a53_cc; int b_frame_strategy; + int chroma_offset; + int scenechange_threshold; + int noise_reduction; char *x264_params; } X264Context; @@ -530,15 +533,30 @@ static av_cold int X264_init(AVCodecContext *avctx) x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor); if (avctx->b_quant_factor > 0) x4->params.rc.f_pb_factor = avctx->b_quant_factor; - if (avctx->chromaoffset) - x4->params.analyse.i_chroma_qp_offset = avctx->chromaoffset; + +#if FF_API_PRIVATE_OPT +FF_DISABLE_DEPRECATION_WARNINGS + if (avctx->chromaoffset >= 0) + x4->chroma_offset = avctx->chromaoffset; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (x4->chroma_offset >= 0) + x4->params.analyse.i_chroma_qp_offset = x4->chroma_offset; if (avctx->gop_size >= 0) x4->params.i_keyint_max = avctx->gop_size; if (avctx->max_b_frames >= 0) x4->params.i_bframe = avctx->max_b_frames; + +#if FF_API_PRIVATE_OPT +FF_DISABLE_DEPRECATION_WARNINGS if (avctx->scenechange_threshold >= 0) - x4->params.i_scenecut_threshold = avctx->scenechange_threshold; + x4->scenechange_threshold = avctx->scenechange_threshold; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (x4->scenechange_threshold >= 0) + x4->params.i_scenecut_threshold = x4->scenechange_threshold; + if (avctx->qmin >= 0) x4->params.rc.i_qp_min = avctx->qmin; if (avctx->qmax >= 0) @@ -577,8 +595,14 @@ static av_cold int X264_init(AVCodecContext *avctx) x4->params.analyse.i_trellis = avctx->trellis; if (avctx->me_range >= 0) x4->params.analyse.i_me_range = avctx->me_range; +#if FF_API_PRIVATE_OPT + FF_DISABLE_DEPRECATION_WARNINGS if (avctx->noise_reduction >= 0) - x4->params.analyse.i_noise_reduction = avctx->noise_reduction; + x4->noise_reduction = avctx->noise_reduction; + FF_ENABLE_DEPRECATION_WARNINGS +#endif + if (x4->noise_reduction >= 0) + x4->params.analyse.i_noise_reduction = x4->noise_reduction; if (avctx->me_subpel_quality >= 0) x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality; #if FF_API_PRIVATE_OPT @@ -651,16 +675,6 @@ FF_ENABLE_DEPRECATION_WARNINGS if (x4->slice_max_size >= 0) x4->params.i_slice_max_size = x4->slice_max_size; - else { - /* - * Allow x264 to be instructed through AVCodecContext about the maximum - * size of the RTP payload. For example, this enables the production of - * payload suitable for the H.264 RTP packetization-mode 0 i.e. single - * NAL unit per RTP packet. - */ - if (avctx->rtp_payload_size) - x4->params.i_slice_max_size = avctx->rtp_payload_size; - } if (x4->fastfirstpass) x264_param_apply_fastfirstpass(&x4->params); @@ -964,6 +978,9 @@ static const AVOption options[] = { { "vlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "coder" }, { "ac", 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 }, + { "chromaoffset", "QP difference between chroma and luma", OFFSET(chroma_offset), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE }, + { "sc_threshold", "Scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE }, + { "noise_reduction", "Noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX, VE }, { "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 }, @@ -983,9 +1000,13 @@ static const AVCodecDefault x264_defaults[] = { { "qcomp", "-1" }, // { "rc_lookahead", "-1" }, { "refs", "-1" }, +#if FF_API_PRIVATE_OPT { "sc_threshold", "-1" }, +#endif { "trellis", "-1" }, +#if FF_API_PRIVATE_OPT { "nr", "-1" }, +#endif { "me_range", "-1" }, #if FF_API_MOTION_EST { "me_method", "-1" },