[FFmpeg-devel] [PATCH 5/8] avcodec/av1dec: parse dimensions from the sequence header in extradata

James Almer jamrial at gmail.com
Wed Sep 30 04:28:08 EEST 2020


On 9/29/2020 3:10 PM, Mark Thompson wrote:
> On 29/09/2020 17:23, James Almer wrote:
>> On 9/29/2020 12:52 PM, Mark Thompson wrote:
>>> On 25/09/2020 15:43, James Almer wrote:
>>>> Signed-off-by: James Almer <jamrial at gmail.com>
>>>> ---
>>>>    libavcodec/av1dec.c | 10 ++++++++++
>>>>    1 file changed, 10 insertions(+)
>>>>
>>>> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
>>>> index 0bb04a3e44..f6b9fbbac3 100644
>>>> --- a/libavcodec/av1dec.c
>>>> +++ b/libavcodec/av1dec.c
>>>> @@ -405,6 +405,9 @@ static av_cold int av1_decode_free(AVCodecContext
>>>> *avctx)
>>>>    static int set_context_with_sequence(AVCodecContext *avctx,
>>>>                                         const AV1RawSequenceHeader
>>>> *seq)
>>>>    {
>>>> +    int width = seq->max_frame_width_minus_1 + 1;
>>>> +    int height = seq->max_frame_height_minus_1 + 1;
>>>> +
>>>>        avctx->profile = seq->seq_profile;
>>>>        avctx->level = seq->seq_level_idx[0];
>>>>    @@ -423,6 +426,13 @@ static int
>>>> set_context_with_sequence(AVCodecContext *avctx,
>>>>            break;
>>>>        }
>>>>    +    if (avctx->width != width || avctx->height != height) {
>>>> +        int ret = ff_set_dimensions(avctx, width, height);
>>>> +        if (ret < 0)
>>>> +            return ret;
>>>> +    }
>>>> +    avctx->sample_aspect_ratio = (AVRational) { 1, 1 };
>>>> +
>>>>        if (seq->timing_info.num_units_in_display_tick &&
>>>>            seq->timing_info.time_scale) {
>>>>            av_reduce(&avctx->framerate.den, &avctx->framerate.num,
>>>>
>>>
>>> Can you explain more about why this might be wanted?  There is no
>>> requirement that the stream actually contains any frames with the size
>>> stated in the sequence header.
>>
>> It gives you an AVCodecContext with enough parameters for most non
>> decoding scenarios immediately after avcodec_open2(). They will be
>> updated with frame dimensions afterwards if any is parsed.
>> Also, the AVCodecContext dimension fields are nonetheless documented to
>> not necessarily match the latest returned frame's dimensions.
>>
>> Applying this set without this patch, if this is the only decoder
>> available and is therefore used for probing, some of the remuxing FATE
>> tests will fail once a pix_fmt is not assigned and frames are then not
>> parsed.
> 
> Ok, that seems fair enough.  Cases where this number is actually wrong
> are hopefully rare, anyway.
> 
> - Mark

Pushed, thanks.


More information about the ffmpeg-devel mailing list