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

Jan Ekström jeebjp at gmail.com
Mon Mar 27 09:40:34 EEST 2023


On Sun, Mar 26, 2023 at 10:03 PM James Almer <jamrial at gmail.com> wrote:
>
>
>
> 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.

It indeed is the other side of the coded_side_data, which is something
that gets added after avctx init.

And the main reason was because the addition function being a pointer
to a struct, instead of (AVFrameSideData ***sd, int *nb_side_data).

Jan


More information about the ffmpeg-devel mailing list