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

Mark Thompson sw at jkqxz.net
Tue Sep 29 21:10:29 EEST 2020


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


More information about the ffmpeg-devel mailing list