[FFmpeg-devel] [PATCH] avcodec/dovi_rpu: make ff_dovi_configure_ext() take an AVCodecContext as input argument

James Almer jamrial at gmail.com
Thu Nov 28 15:21:02 EET 2024


On 11/28/2024 10:13 AM, Anton Khirnov wrote:
> Quoting James Almer (2024-11-28 13:58:46)
>> On 11/28/2024 9:57 AM, Anton Khirnov wrote:
>>> Quoting James Almer (2024-11-27 14:31:35)
>>>> @@ -222,10 +223,25 @@ static int dovi_rpu_init(AVBSFContext *bsf)
>>>>    
>>>>                s->enc.cfg = *cfg;
>>>>            } else {
>>>> +            AVCodecContext *avctx;
>>>>                av_log(bsf, AV_LOG_WARNING, "No Dolby Vision configuration record "
>>>>                       "found? Generating one, but results may be invalid.\n");
>>>> -            ret = ff_dovi_configure_ext(&s->enc, bsf->par_out, NULL, s->compression,
>>>> +            avctx = avcodec_alloc_context3(NULL);
>>>> +            if (!avctx)
>>>> +                return AVERROR(ENOMEM);
>>>> +            ret = avcodec_parameters_to_context(avctx, bsf->par_in);
>>>> +            if (ret < 0) {
>>>> +                avcodec_free_context(&avctx);
>>>> +                return ret;
>>>> +            }
>>>> +            ret = ff_dovi_configure_ext(&s->enc, avctx, NULL, s->compression,
>>>>                                            FF_COMPLIANCE_NORMAL);
>>>> +            if (ret < 0) {
>>>> +                avcodec_free_context(&avctx);
>>>> +                return ret;
>>>> +            }
>>>> +            ret = avcodec_parameters_from_context(bsf->par_out, avctx);
>>>
>>> This still seems a bit too scorched-earth to me. I'd prefer to give
>>> ff_dovi_configure_ext() a side data list as a parameter and have it
>>> modify that.
>>
>> It still checks a bunch of fields in codecpar/avctx (read only), not
>> just side data, so it needs one of those.
> 
> Right, but that can be made const, and you avoid nuking and overwriting
> the entire source context just because one side data instance changed.

Well, in here I'm doing par_int -> avctx -> par_out, which behaves like 
how the bsf API expects the in/out codecpar should be handled, even 
though yes, par_out side data gets nuked because it was already filled 
by the generic code.

But ok, I'll just make ff_dovi_configure_ext take a const avctx and a 
side data array.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20241128/b33de106/attachment.sig>


More information about the ffmpeg-devel mailing list