On Mon, 04 Nov 2013 21:35:45 +0100 Anton Khirnov <an...@khirnov.net> wrote:
> > On Mon, 4 Nov 2013 21:02:02 +0100, wm4 <nfx...@googlemail.com> wrote: > > On Sun, 3 Nov 2013 23:27:48 +0100 > > Anton Khirnov <an...@khirnov.net> wrote: > > > > > We will likely want to add new fields to it in the future, so this is > > > needed to avoid breaking ABI. > > > --- > > > doc/APIchanges | 2 ++ > > > libavcodec/vdpau.c | 5 +++++ > > > libavcodec/vdpau.h | 11 +++++++++++ > > > 3 files changed, 18 insertions(+) > > > > > > diff --git a/doc/APIchanges b/doc/APIchanges > > > index 93d1608..db30bb9 100644 > > > --- a/doc/APIchanges > > > +++ b/doc/APIchanges > > > @@ -15,6 +15,8 @@ API changes, most recent first: > > > > > > 2013-11-xx - xxxxxxx - lavc 55.25.0 - vdpau.h > > > Add av_vdpau_get_profile(). > > > + Add av_vdpau_alloc_context(). This function must from now on be > > > + used for allocating AVVDPAUContext. > > > > > > 2013-08-xx - xxxxxxx - lavu 52.17.0 - avframe.h > > > Add AVFrame.flags and AV_FRAME_FLAG_CORRUPT. > > > diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c > > > index 5cabb7e..ba11195 100644 > > > --- a/libavcodec/vdpau.c > > > +++ b/libavcodec/vdpau.c > > > @@ -127,4 +127,9 @@ int av_vdpau_get_profile(AVCodecContext *avctx) > > > return AVERROR(EINVAL); > > > } > > > > > > +AVVDPAUContext *av_vdpau_alloc_context(void) > > > +{ > > > + return av_mallocz(sizeof(AVVDPAUContext)); > > > +} > > > + > > > /* @}*/ > > > diff --git a/libavcodec/vdpau.h b/libavcodec/vdpau.h > > > index 49ca6f0..16547e4 100644 > > > --- a/libavcodec/vdpau.h > > > +++ b/libavcodec/vdpau.h > > > @@ -72,6 +72,10 @@ union AVVDPAUPictureInfo { > > > * during initialization or through each AVCodecContext.get_buffer() > > > * function call. In any case, they must be valid prior to calling > > > * decoding functions. > > > + * > > > + * This size of this structure is not a part of the public ABI and must > > > not > > > + * be used outside of libavcodec. Use av_vdpau_alloc_context() to > > > allocate an > > > + * AVVDPAUContext. > > > */ > > > typedef struct AVVDPAUContext { > > > /** > > > @@ -125,6 +129,13 @@ typedef struct AVVDPAUContext { > > > } AVVDPAUContext; > > > > > > /** > > > + * Allocate an AVVDPAUContext. > > > + * > > > + * @return newly allocated AVVDPAUContext or NULL on failure. > > > + */ > > > +AVVDPAUContext *av_vdpau_alloc_context(void); > > > + > > > +/** > > > * Get a decoder profile that should be used for initializing a VDPAU > > > decoder. > > > * Should be called from the AVCodecContext.get_format() callback. > > > * > > > > As far as I'm aware, the only fields the user has to access are decoder > > and render. If you're going to change the API, maybe make this struct > > non-public, let libavcodec allocate it, and add setters for the > > decoder/render fields. > > Those are also the only fields that exist in that struct. The whole point of > it Plus a bunch of deprecated stuff. > is that it's all public. Non-public parts are hidden deeper in lavc. > > So I really don't see any advantage to making it opaque. I don't think having public fields in structs ever worked out well in libav*. It's an endless cycle of deprecations, ABI hacks, and working around bad ABI properties of structs (like adding a constructor function). _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel