[FFmpeg-devel] [PATCH v0 09/14] avcodec: add private side data set to AVCodecInternal

James Almer jamrial at gmail.com
Sun Mar 26 22:03:19 EEST 2023



On 3/26/2023 4:00 PM, Anton Khirnov wrote:
> Quoting Jan Ekström (2023-03-24 18:34:28)
>> On Fri, Mar 24, 2023 at 12:51 PM Anton Khirnov <anton at khirnov.net> wrote:
>>>
>>> Quoting Jan Ekström (2023-03-21 00:34:03)
>>>> This allows configuring an encoder by using AVFrameSideData.
>>>> ---
>>>>   libavcodec/avcodec.c  | 1 +
>>>>   libavcodec/internal.h | 7 +++++++
>>>>   libavcodec/options.c  | 5 +++++
>>>>   3 files changed, 13 insertions(+)
>>>>
>>>> diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
>>>> index c110b19e08..3faabe77d1 100644
>>>> --- a/libavcodec/avcodec.c
>>>> +++ b/libavcodec/avcodec.c
>>>> @@ -403,6 +403,7 @@ void avcodec_flush_buffers(AVCodecContext *avctx)
>>>>       avci->nb_draining_errors = 0;
>>>>       av_frame_unref(avci->buffer_frame);
>>>>       av_packet_unref(avci->buffer_pkt);
>>>> +    av_side_data_set_wipe(&avci->side_data_set);
>>>>
>>>>       if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
>>>>           ff_thread_flush(avctx);
>>>> diff --git a/libavcodec/internal.h b/libavcodec/internal.h
>>>> index f21101752d..c658e97313 100644
>>>> --- a/libavcodec/internal.h
>>>> +++ b/libavcodec/internal.h
>>>> @@ -168,6 +168,13 @@ typedef struct AVCodecInternal {
>>>>        * a boolean to describe whether context is opened or not.
>>>>        */
>>>>       unsigned int ctx_opened;
>>>> +
>>>> +    /**
>>>> +     * Set holding static side data, such as HDR10 CLL / MDCV structures.
>>>> +     * - encoding: set by user
>>>> +     * - decoding: unused
>>>> +     */
>>>> +    AVFrameSideDataSet side_data_set;
>>>
>>> Why put it here and not in the public struct? It seems way more natural
>>> there.
>>>
>>
>> The general idea was that if you want to make people utilize helpers
>> and not touch entries willy-nilly,
> 
> But do we? Why?
> 
> In this case I see no advantage to having a public function over having
> two public fields. The function is strictly worse because it cannot be
> extended, and enlarges the symbol table.

Also, is this new AVFrameSideDataSet struct necessary? This looks sort 
of like the opposite of coded_side_data.


More information about the ffmpeg-devel mailing list