[FFmpeg-devel] [PATCH] ffmpeg_opts: remove lowres check

James Almer jamrial at gmail.com
Thu Jan 21 15:29:22 EET 2021


On 1/21/2021 9:59 AM, Anton Khirnov wrote:
> Quoting James Almer (2021-01-09 18:47:17)
>> The st->codec values are updated based on the lowres factor by
>> avformat_find_stream_info() when it runs an instance of the decoder internally,
>> and the same thing happens in ffmpeg.c when we open ist->dec_ctx with
>> avcodec_open2(), so these assignments are redundant.
>>
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>> This chunk here is not properly wrapped with the relevant pre-processor check
>> for AVStream->codec, and seeing it's ultimately redundant, i figured we might
>> as well delete it now.
>>
>> For that matter, the deprecation of lowres in avcodec.h is in a very strange
>> state (the field is not removed, its offset is changed instead). Once the value
>> of FF_API_LOWRES is flipped, neither the field, the AVOption, or the usage
>> within decoders will be removed, but some code in libavformat/utils.c will be
>> disabled, and that may result in unexpected behavior.
> 
> IMO it should just be made a codec-private option. And lavf has no
> business treating it specially.

Technically speaking, there's no reason for lavf to check for lowres to 
do what it's currently doing.

The code

>             int orig_w = st->codecpar->width;
>             int orig_h = st->codecpar->height;
>             ret = avcodec_parameters_from_context(st->codecpar, st->internal->avctx);
>             if (ret < 0)
>                 goto find_stream_info_err;
>             ret = add_coded_side_data(st, st->internal->avctx);
>             if (ret < 0)
>                 goto find_stream_info_err;
> #if FF_API_LOWRES
>             // The decoder might reduce the video size by the lowres factor.
>             if (st->internal->avctx->lowres && orig_w) {
>                 st->codecpar->width = orig_w;
>                 st->codecpar->height = orig_h;
>             }
> #endif

Could be simplified to unconditionally set st->codecpar dimensions to 
the backed up ones. If you agree, i can send a patch.

So based on the above, turning it into a codec specific option sounds 
good to me. We could repeat the FF_API_PRIVATE_OPT deprecation mechanism 
for it, but the global option/field needs to stay for another two years 
since neither were truly deprecated (same for AVCodec->max_lowres), just 
wrapped in a pre-processor check.

> 
> Patch fine with me.
> 

Pushed, thanks.


More information about the ffmpeg-devel mailing list