[FFmpeg-devel] [PATCH 07/13] avcodec/hevcdec: check for DOVI configuration record in AVCodecContext side data

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Sun Jul 23 15:17:25 EEST 2023


James Almer:
> On 7/23/2023 5:40 AM, Andreas Rheinhardt wrote:
>> James Almer:
>>> Signed-off-by: James Almer <jamrial at gmail.com>
>>> ---
>>>   libavcodec/hevcdec.c | 12 +++++++++++-
>>>   1 file changed, 11 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
>>> index fcf19b4eb6..0d659e4c55 100644
>>> --- a/libavcodec/hevcdec.c
>>> +++ b/libavcodec/hevcdec.c
>>> @@ -3403,8 +3403,12 @@ static int hevc_decode_frame(AVCodecContext
>>> *avctx, AVFrame *rframe,
>>>       }
>>>         sd = av_packet_get_side_data(avpkt, AV_PKT_DATA_DOVI_CONF,
>>> &sd_size);
>>> -    if (sd && sd_size > 0)
>>> +    if (sd && sd_size > 0) {
>>> +        av_log(avctx, AV_LOG_WARNING,
>>> +               "passing a DOVI configuration record through packet
>>> side data is "
>>> +               "deprecated and will stop working soon. Use
>>> AVCodecContext side data\n");
>>
>> Doesn't this remove functionality that might be useful to some users
>> (namely the functionality to send new DOVI metadata)?
> 
> Is this a valid scenario? lavf only exports this side data during
> read_header(). A change in DOVI profile would mean a brand new CVS, and
> afaik we require a new decoder to be fired up for this.
> 

Since when do we require this? I always thought that both H.264 and HEVC
decoders are supposed to allow new in-band extradata at any time.

>>
>>>           ff_dovi_update_cfg(&s->dovi_ctx,
>>> (AVDOVIDecoderConfigurationRecord *) sd);
>>> +    }
>>>         s->ref = NULL;
>>>       ret    = decode_nal_units(s, avpkt->data, avpkt->size);
>>> @@ -3707,12 +3711,18 @@ static av_cold int
>>> hevc_decode_init(AVCodecContext *avctx)
>>>       atomic_init(&s->wpp_err, 0);
>>>         if (!avctx->internal->is_copy) {
>>> +        AVPacketSideData *sd;
>>> +
>>>           if (avctx->extradata_size > 0 && avctx->extradata) {
>>>               ret = hevc_decode_extradata(s, avctx->extradata,
>>> avctx->extradata_size, 1);
>>>               if (ret < 0) {
>>>                   return ret;
>>>               }
>>>           }
>>> +
>>> +        sd = av_packet_get_side_data_from_set(&avctx->side_data_set,
>>> AV_PKT_DATA_DOVI_CONF);
>>> +        if (sd && sd->size > 0)
>>> +            ff_dovi_update_cfg(&s->dovi_ctx,
>>> (AVDOVIDecoderConfigurationRecord *) sd->data);
>>>       }
>>>         return 0;
>>



More information about the ffmpeg-devel mailing list