From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH 02/35] lavu/fifo: make the contents of AVFifoBuffer private on next major bump Date: Thu, 13 Jan 2022 15:22:09 +0100 Message-ID: <AM7PR03MB6660D92B5487D518049F8A1A8F539@AM7PR03MB6660.eurprd03.prod.outlook.com> (raw) In-Reply-To: <20220111204610.14262-2-anton@khirnov.net> Anton Khirnov: > There should be no good reason for the callers to access any of its > contents. > > Define a new type for the internal struct that currently matches > AVFifoBuffer. This will allow adding new private fields without waiting > for the major bump and will be useful in the following commits. > > Unfortunately AVFifoBuffer fields cannot be marked as deprecated because > it would trigger a warning wherever fifo.h is #included, due to > inlined av_fifo_peek2(). > --- > doc/APIchanges | 4 ++++ > libavutil/fifo.c | 23 +++++++++++++++++++---- > libavutil/fifo.h | 14 ++++++++++++-- > libavutil/tests/fifo.c | 2 +- > libavutil/version.h | 1 + > 5 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 8df0364e4c..21fa02ae9d 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -14,6 +14,10 @@ libavutil: 2021-04-27 > > API changes, most recent first: > > +2022-01-xx - xxxxxxxxxx - lavu fifo.h > + Access to all AVFifoBuffer members is deprecated. The struct will > + become an incomplete type in a future major libavutil version. > + > 2022-01-04 - 78dc21b123e - lavu 57.16.100 - frame.h > Add AV_FRAME_DATA_DOVI_METADATA. > > diff --git a/libavutil/fifo.c b/libavutil/fifo.c > index f2f046b1f3..aaade01333 100644 > --- a/libavutil/fifo.c > +++ b/libavutil/fifo.c > @@ -28,9 +28,24 @@ > > #define FIFO_SIZE_MAX FFMIN3((uint64_t)INT_MAX, (uint64_t)UINT32_MAX, (uint64_t)SIZE_MAX) > > +#if FF_API_FIFO_PUBLIC > +# define CTX_STRUCT_NAME FifoBuffer > +#else > +# define CTX_STRUCT_NAME AVFifoBuffer This is invalid in pre-C11 (and will lead to compilation failures on old GCC versions): Pre-C11, typedefs were subject to the ODR, yet you already typedef AVFifoBuffer in fifo.h. > +#endif > + > +typedef struct CTX_STRUCT_NAME { > + // These fields must match then contents of AVFifoBuffer in fifo.h the contents > + // until FF_API_FIFO_PUBLIC is removed The actual spec-compliant way for this is to add an AVFifoBuffer at the start of this struct; it will also avoid the casts from FifoBuffer to AVFifoBuffer. This will make the accesses to it a bit more cumbersome and will mean more changes when FF_API_FIFO_PUBLIC is removed. (This would not be an issue if we required support for anonymous structs (mandatory in C11, supported by GCC and others long before that).) > + uint8_t *buffer; > + uint8_t *rptr, *wptr, *end; > + uint32_t rndx, wndx; > + ///////////////////////////////////////// > +} FifoBuffer; > + > AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) > { > - AVFifoBuffer *f; > + FifoBuffer *f; > void *buffer; > > if (nmemb > FIFO_SIZE_MAX / size) > @@ -39,15 +54,15 @@ AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) > buffer = av_realloc_array(NULL, nmemb, size); > if (!buffer) > return NULL; > - f = av_mallocz(sizeof(AVFifoBuffer)); > + f = av_mallocz(sizeof(*f)); > if (!f) { > av_free(buffer); > return NULL; > } > f->buffer = buffer; > f->end = f->buffer + nmemb * size; > - av_fifo_reset(f); > - return f; > + av_fifo_reset((AVFifoBuffer*)f); > + return (AVFifoBuffer*)f; > } > > AVFifoBuffer *av_fifo_alloc(unsigned int size) > diff --git a/libavutil/fifo.h b/libavutil/fifo.h > index f4fd291e59..ca4e7fe060 100644 > --- a/libavutil/fifo.h > +++ b/libavutil/fifo.h > @@ -28,11 +28,21 @@ > #include "avutil.h" > #include "attributes.h" > > -typedef struct AVFifoBuffer { > +#if FF_API_FIFO_PUBLIC > +/** > + * The contents of the struct are private and should not be accessed by the > + * callers in any way. > + */ > +#endif > +typedef struct AVFifoBuffer > +#if FF_API_FIFO_PUBLIC > +{ > uint8_t *buffer; > uint8_t *rptr, *wptr, *end; > uint32_t rndx, wndx; > -} AVFifoBuffer; > +} > +#endif > +AVFifoBuffer; > > /** > * Initialize an AVFifoBuffer. > diff --git a/libavutil/tests/fifo.c b/libavutil/tests/fifo.c > index a17d913233..e5aa88d252 100644 > --- a/libavutil/tests/fifo.c > +++ b/libavutil/tests/fifo.c > @@ -18,7 +18,7 @@ > > #include <stdio.h> > #include <stdlib.h> > -#include "libavutil/fifo.h" > +#include "libavutil/fifo.c" > > int main(void) > { > diff --git a/libavutil/version.h b/libavutil/version.h > index 953aac9d94..7c031f547e 100644 > --- a/libavutil/version.h > +++ b/libavutil/version.h > @@ -110,6 +110,7 @@ > #define FF_API_COLORSPACE_NAME (LIBAVUTIL_VERSION_MAJOR < 58) > #define FF_API_AV_MALLOCZ_ARRAY (LIBAVUTIL_VERSION_MAJOR < 58) > #define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 58) > +#define FF_API_FIFO_PUBLIC (LIBAVUTIL_VERSION_MAJOR < 58) > > /** > * @} > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-01-13 14:22 UTC|newest] Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-01-11 20:45 [FFmpeg-devel] [PATCH 01/35] lavu/fifo: disallow overly large fifo sizes Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 02/35] lavu/fifo: make the contents of AVFifoBuffer private on next major bump Anton Khirnov 2022-01-13 14:22 ` Andreas Rheinhardt [this message] 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 03/35] lavu/fifo: introduce the notion of element size Anton Khirnov 2022-01-13 16:50 ` Andreas Rheinhardt 2022-01-13 16:59 ` James Almer 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 04/35] lavu/fifo: add new functions for determinining reading/writing size Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 05/35] lavu/fifo: add a new FIFO grow function Anton Khirnov 2022-01-13 17:04 ` James Almer 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 06/35] lavu/fifo: add a new function for draining the FIFO Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 07/35] lavu/fifo: add new FIFO writing functions Anton Khirnov 2022-01-13 17:31 ` Andreas Rheinhardt 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 08/35] lavu/fifo: add new FIFO read/peek functions Anton Khirnov 2022-01-13 17:41 ` Andreas Rheinhardt 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 09/35] lavu/fifo: add a flag for automatically growing the FIFO as needed Anton Khirnov 2022-01-13 17:53 ` Andreas Rheinhardt 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 10/35] lavu/fifo: deprecate old API Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 11/35] lavu/tests/fifo: switch to the new API Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 12/35] lavc/avcodec: switch to new FIFO API Anton Khirnov 2022-01-13 18:21 ` Andreas Rheinhardt 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 13/35] lavc/amfenc: " Anton Khirnov 2022-01-12 14:46 ` Michael Niedermayer 2022-01-12 19:29 ` Anton Khirnov 2022-01-13 14:14 ` Michael Niedermayer 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 14/35] lavc/cuviddec: do not reallocate the fifo unnecessarily Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 15/35] lavc/cuviddec: convert to the new FIFO API Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 16/35] lavc/libvorbisenc: switch to " Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 17/35] lavc/libvpxenc: switch to the " Anton Khirnov 2022-01-12 18:15 ` James Zern 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 18/35] lavc/libvpxenc: remove unneeded context variable Anton Khirnov 2022-01-12 18:15 ` James Zern 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 19/35] lavc/nvenc: switch to the new FIFO API Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 20/35] lavc/qsvdec: " Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 21/35] lavc/qsvenc: switch to " Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 22/35] lavf/dvenc: return an error on audio/video desync Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 23/35] lavf/dvenc: switch to new FIFO API Anton Khirnov 2022-01-11 20:45 ` [FFmpeg-devel] [PATCH 24/35] lavf/mpegenc: " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 25/35] lavf/swfenc: " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 26/35] lavf/udp: " Anton Khirnov 2022-01-13 18:45 ` Andreas Rheinhardt 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 27/35] lavf/async: " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 28/35] lavd/jack: switch to the " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 29/35] lavu/audio_fifo: drop an unnecessary include Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 30/35] lavu/audio_fifo: switch to new FIFO API Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 31/35] lavu/threadmessage: " Anton Khirnov 2022-01-13 19:03 ` Andreas Rheinhardt 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 32/35] lavfi/qsvvpp: " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 33/35] lavfi/vf_deshake_opencl: " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 34/35] ffplay: " Anton Khirnov 2022-01-11 20:46 ` [FFmpeg-devel] [PATCH 35/35] ffmpeg: " Anton Khirnov 2022-01-13 13:59 ` [FFmpeg-devel] [PATCH 01/35] lavu/fifo: disallow overly large fifo sizes Andreas Rheinhardt 2022-01-13 14:27 ` Anton Khirnov 2022-01-13 14:38 ` Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=AM7PR03MB6660D92B5487D518049F8A1A8F539@AM7PR03MB6660.eurprd03.prod.outlook.com \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git