[FFmpeg-devel] [PATCH] avutil/bprint: make header work with C++, simplify
wm4
nfxjfg at googlemail.com
Mon Nov 24 15:24:34 CET 2014
This change should be ABI-compatible. Since the size of the useable
internal buffer was actually different on 32 bit and 64 bit, so the code
contains a somewhat ugly kludge to maintain ABI-compatibility. It can be
removed on the next ABI-bump.
---
Note that there are the following (and IMO sufficient) methods left
to add fields without breaking ABI:
- allocate extra fields in reserved_internal_buffer
- add the fields freely, and mess with the reserved_internal_buffer size
- add unused dummy fields
---
libavutil/bprint.c | 3 +--
libavutil/bprint.h | 12 +-----------
2 files changed, 2 insertions(+), 13 deletions(-)
diff --git a/libavutil/bprint.c b/libavutil/bprint.c
index 0a0d078..d340c1f 100644
--- a/libavutil/bprint.c
+++ b/libavutil/bprint.c
@@ -68,8 +68,7 @@ static void av_bprint_grow(AVBPrint *buf, unsigned extra_len)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
{
- unsigned size_auto = (char *)buf + sizeof(*buf) -
- buf->reserved_internal_buffer;
+ unsigned size_auto = sizeof(buf->reserved_internal_buffer);
if (size_max == 1)
size_max = size_auto;
diff --git a/libavutil/bprint.h b/libavutil/bprint.h
index d1682fc..781d711 100644
--- a/libavutil/bprint.h
+++ b/libavutil/bprint.h
@@ -27,14 +27,6 @@
#include "avstring.h"
/**
- * Define a structure with extra padding to a fixed size
- * This helps ensuring binary compatibility with future versions.
- */
-#define FF_PAD_STRUCTURE(size, ...) \
- __VA_ARGS__ \
- char reserved_padding[size - sizeof(struct { __VA_ARGS__ })];
-
-/**
* Buffer to print data progressively
*
* The string buffer grows as necessary and is always 0-terminated.
@@ -75,13 +67,11 @@
* such as the current paragraph.
*/
typedef struct AVBPrint {
- FF_PAD_STRUCTURE(1024,
char *str; /**< string so far */
unsigned len; /**< length so far */
unsigned size; /**< allocated memory */
unsigned size_max; /**< maximum allocated memory */
- char reserved_internal_buffer[1];
- )
+ char reserved_internal_buffer[1000 + (sizeof(void*) == 4 ? 8 : 0)];
} AVBPrint;
/**
--
2.1.1
More information about the ffmpeg-devel
mailing list