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

Jan Ekström jeebjp at gmail.com
Fri Mar 24 19:34:28 EET 2023


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, you put it outside of the API
client's view. Or in other words, "only making something public when
it's absolutely required means that no unnecessary things are part of
the ABI structs"

Of course looking at the fun times with avci, I might just end up
doing what you note... I just wanted to give it a try to have a
private structure which was available before init() was called :) .

Jan


More information about the ffmpeg-devel mailing list