diff mbox series

[FFmpeg-devel,1/9,v3] avutil/buffer: change public function and struct size parameter types to size_t

Message ID 20210306194243.14931-1-jamrial@gmail.com
State Accepted
Headers show
Series [FFmpeg-devel,1/9,v3] avutil/buffer: change public function and struct size parameter types to size_t | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

James Almer March 6, 2021, 7:42 p.m. UTC
Signed-off-by: James Almer <jamrial@gmail.com>
---
Changes since v2 is the addition of the buffer_size_t typedef to reduce the
amount of ifdeffery required to adapt our code.

 doc/APIchanges              |  4 ++++
 libavutil/buffer.c          | 14 +++++++-------
 libavutil/buffer.h          | 32 ++++++++++++++++++++++++++++++++
 libavutil/buffer_internal.h |  8 ++++----
 libavutil/internal.h        |  7 +++++++
 libavutil/version.h         |  5 ++++-
 6 files changed, 58 insertions(+), 12 deletions(-)

Comments

Michael Niedermayer March 10, 2021, 7:38 p.m. UTC | #1
On Sat, Mar 06, 2021 at 04:42:35PM -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> Changes since v2 is the addition of the buffer_size_t typedef to reduce the
> amount of ifdeffery required to adapt our code.
> 
>  doc/APIchanges              |  4 ++++
>  libavutil/buffer.c          | 14 +++++++-------
>  libavutil/buffer.h          | 32 ++++++++++++++++++++++++++++++++
>  libavutil/buffer_internal.h |  8 ++++----
>  libavutil/internal.h        |  7 +++++++
>  libavutil/version.h         |  5 ++++-
>  6 files changed, 58 insertions(+), 12 deletions(-)

The patchset prior to the bump LGTM
the patchset after the bump (thus enabled size_t) is probably ok but
i did not review this for downstream effects which could introduce bugs
when theres any code that expected the variables to be int

code prior bump tested, code post bump not tested

Thanks

[...]
James Almer March 10, 2021, 9:12 p.m. UTC | #2
On 3/10/2021 4:38 PM, Michael Niedermayer wrote:
> On Sat, Mar 06, 2021 at 04:42:35PM -0300, James Almer wrote:
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>> Changes since v2 is the addition of the buffer_size_t typedef to reduce the
>> amount of ifdeffery required to adapt our code.
>>
>>   doc/APIchanges              |  4 ++++
>>   libavutil/buffer.c          | 14 +++++++-------
>>   libavutil/buffer.h          | 32 ++++++++++++++++++++++++++++++++
>>   libavutil/buffer_internal.h |  8 ++++----
>>   libavutil/internal.h        |  7 +++++++
>>   libavutil/version.h         |  5 ++++-
>>   6 files changed, 58 insertions(+), 12 deletions(-)
> 
> The patchset prior to the bump LGTM
> the patchset after the bump (thus enabled size_t) is probably ok but
> i did not review this for downstream effects which could introduce bugs
> when theres any code that expected the variables to be int

That's what 2+ years of advanced warning are for. Same as we did with 
the Crypto modules that will be switching to size_t in the upcoming bump.

> 
> code prior bump tested, code post bump not tested
> 
> Thanks
> 
> [...]
> 
> 
> _______________________________________________
> 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".
>
Andreas Rheinhardt March 10, 2021, 9:28 p.m. UTC | #3
James Almer:
> On 3/10/2021 4:38 PM, Michael Niedermayer wrote:
>> On Sat, Mar 06, 2021 at 04:42:35PM -0300, James Almer wrote:
>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>> ---
>>> Changes since v2 is the addition of the buffer_size_t typedef to
>>> reduce the
>>> amount of ifdeffery required to adapt our code.
>>>
>>>   doc/APIchanges              |  4 ++++
>>>   libavutil/buffer.c          | 14 +++++++-------
>>>   libavutil/buffer.h          | 32 ++++++++++++++++++++++++++++++++
>>>   libavutil/buffer_internal.h |  8 ++++----
>>>   libavutil/internal.h        |  7 +++++++
>>>   libavutil/version.h         |  5 ++++-
>>>   6 files changed, 58 insertions(+), 12 deletions(-)
>>
>> The patchset prior to the bump LGTM
>> the patchset after the bump (thus enabled size_t) is probably ok but
>> i did not review this for downstream effects which could introduce bugs
>> when theres any code that expected the variables to be int
> 
> That's what 2+ years of advanced warning are for. Same as we did with
> the Crypto modules that will be switching to size_t in the upcoming bump.
> 

What 2+ years of advanced warning are you talking about? This patchset
as-is wants to switch the type at the next major bump, i.e. fairly soon.
(And fyi: Our crypto functions are not compatible with size_t right now;
see
https://github.com/mkver/FFmpeg/commit/1d830b0495399bb59a296d7bb3e2b2ab88a32fc1.)

- Andreas

>>
>> code prior bump tested, code post bump not tested
>>
>> Thanks
>>
>> [...]
>>
>>
>> _______________________________________________
>> 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".
>>
> 
> _______________________________________________
> 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".
James Almer March 10, 2021, 9:30 p.m. UTC | #4
On 3/10/2021 6:28 PM, Andreas Rheinhardt wrote:
> James Almer:
>> On 3/10/2021 4:38 PM, Michael Niedermayer wrote:
>>> On Sat, Mar 06, 2021 at 04:42:35PM -0300, James Almer wrote:
>>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>>> ---
>>>> Changes since v2 is the addition of the buffer_size_t typedef to
>>>> reduce the
>>>> amount of ifdeffery required to adapt our code.
>>>>
>>>>    doc/APIchanges              |  4 ++++
>>>>    libavutil/buffer.c          | 14 +++++++-------
>>>>    libavutil/buffer.h          | 32 ++++++++++++++++++++++++++++++++
>>>>    libavutil/buffer_internal.h |  8 ++++----
>>>>    libavutil/internal.h        |  7 +++++++
>>>>    libavutil/version.h         |  5 ++++-
>>>>    6 files changed, 58 insertions(+), 12 deletions(-)
>>>
>>> The patchset prior to the bump LGTM
>>> the patchset after the bump (thus enabled size_t) is probably ok but
>>> i did not review this for downstream effects which could introduce bugs
>>> when theres any code that expected the variables to be int
>>
>> That's what 2+ years of advanced warning are for. Same as we did with
>> the Crypto modules that will be switching to size_t in the upcoming bump.
>>
> 
> What 2+ years of advanced warning are you talking about?

My bad, was thinking about the AVPacket set.

This patchset
> as-is wants to switch the type at the next major bump, i.e. fairly soon.
> (And fyi: Our crypto functions are not compatible with size_t right now;
> see
> https://github.com/mkver/FFmpeg/commit/1d830b0495399bb59a296d7bb3e2b2ab88a32fc1.)
> 
> - Andreas
> 
>>>
>>> code prior bump tested, code post bump not tested
>>>
>>> Thanks
>>>
>>> [...]
>>>
>>>
>>> _______________________________________________
>>> 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".
>>>
>>
>> _______________________________________________
>> 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".
> 
> _______________________________________________
> 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".
>
diff mbox series

Patch

diff --git a/doc/APIchanges b/doc/APIchanges
index 4027d599e7..7abc320db2 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,10 @@  libavutil:     2017-10-21
 
 API changes, most recent first:
 
+2021-03-xx - xxxxxxxxxx - lavu 56.68.100 - buffer.h
+  Change AVBufferRef related function and struct size parameter and fields
+  type to size_t at next major bump.
+
 2021-03-04 - xxxxxxxxxx - lavc 58.128.101 - avcodec.h
   Enable err_recognition to be set for encoders.
 
diff --git a/libavutil/buffer.c b/libavutil/buffer.c
index 3204f11b68..858633e8c7 100644
--- a/libavutil/buffer.c
+++ b/libavutil/buffer.c
@@ -26,7 +26,7 @@ 
 #include "mem.h"
 #include "thread.h"
 
-AVBufferRef *av_buffer_create(uint8_t *data, int size,
+AVBufferRef *av_buffer_create(uint8_t *data, buffer_size_t size,
                               void (*free)(void *opaque, uint8_t *data),
                               void *opaque, int flags)
 {
@@ -64,7 +64,7 @@  void av_buffer_default_free(void *opaque, uint8_t *data)
     av_free(data);
 }
 
-AVBufferRef *av_buffer_alloc(int size)
+AVBufferRef *av_buffer_alloc(buffer_size_t size)
 {
     AVBufferRef *ret = NULL;
     uint8_t    *data = NULL;
@@ -80,7 +80,7 @@  AVBufferRef *av_buffer_alloc(int size)
     return ret;
 }
 
-AVBufferRef *av_buffer_allocz(int size)
+AVBufferRef *av_buffer_allocz(buffer_size_t size)
 {
     AVBufferRef *ret = av_buffer_alloc(size);
     if (!ret)
@@ -166,7 +166,7 @@  int av_buffer_make_writable(AVBufferRef **pbuf)
     return 0;
 }
 
-int av_buffer_realloc(AVBufferRef **pbuf, int size)
+int av_buffer_realloc(AVBufferRef **pbuf, buffer_size_t size)
 {
     AVBufferRef *buf = *pbuf;
     uint8_t *tmp;
@@ -242,8 +242,8 @@  int av_buffer_replace(AVBufferRef **pdst, AVBufferRef *src)
     return 0;
 }
 
-AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
-                                   AVBufferRef* (*alloc)(void *opaque, int size),
+AVBufferPool *av_buffer_pool_init2(buffer_size_t size, void *opaque,
+                                   AVBufferRef* (*alloc)(void *opaque, buffer_size_t size),
                                    void (*pool_free)(void *opaque))
 {
     AVBufferPool *pool = av_mallocz(sizeof(*pool));
@@ -263,7 +263,7 @@  AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
     return pool;
 }
 
-AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size))
+AVBufferPool *av_buffer_pool_init(buffer_size_t size, AVBufferRef* (*alloc)(buffer_size_t size))
 {
     AVBufferPool *pool = av_mallocz(sizeof(*pool));
     if (!pool)
diff --git a/libavutil/buffer.h b/libavutil/buffer.h
index fd4e381efa..241a80ed67 100644
--- a/libavutil/buffer.h
+++ b/libavutil/buffer.h
@@ -25,8 +25,11 @@ 
 #ifndef AVUTIL_BUFFER_H
 #define AVUTIL_BUFFER_H
 
+#include <stddef.h>
 #include <stdint.h>
 
+#include "version.h"
+
 /**
  * @defgroup lavu_buffer AVBuffer
  * @ingroup lavu_data
@@ -90,7 +93,11 @@  typedef struct AVBufferRef {
     /**
      * Size of data in bytes.
      */
+#if FF_API_BUFFER_SIZE_T
     int      size;
+#else
+    size_t   size;
+#endif
 } AVBufferRef;
 
 /**
@@ -98,13 +105,21 @@  typedef struct AVBufferRef {
  *
  * @return an AVBufferRef of given size or NULL when out of memory
  */
+#if FF_API_BUFFER_SIZE_T
 AVBufferRef *av_buffer_alloc(int size);
+#else
+AVBufferRef *av_buffer_alloc(size_t size);
+#endif
 
 /**
  * Same as av_buffer_alloc(), except the returned buffer will be initialized
  * to zero.
  */
+#if FF_API_BUFFER_SIZE_T
 AVBufferRef *av_buffer_allocz(int size);
+#else
+AVBufferRef *av_buffer_allocz(size_t size);
+#endif
 
 /**
  * Always treat the buffer as read-only, even when it has only one
@@ -127,7 +142,11 @@  AVBufferRef *av_buffer_allocz(int size);
  *
  * @return an AVBufferRef referring to data on success, NULL on failure.
  */
+#if FF_API_BUFFER_SIZE_T
 AVBufferRef *av_buffer_create(uint8_t *data, int size,
+#else
+AVBufferRef *av_buffer_create(uint8_t *data, size_t size,
+#endif
                               void (*free)(void *opaque, uint8_t *data),
                               void *opaque, int flags);
 
@@ -195,7 +214,11 @@  int av_buffer_make_writable(AVBufferRef **buf);
  * reference to it (i.e. the one passed to this function). In all other cases
  * a new buffer is allocated and the data is copied.
  */
+#if FF_API_BUFFER_SIZE_T
 int av_buffer_realloc(AVBufferRef **buf, int size);
+#else
+int av_buffer_realloc(AVBufferRef **buf, size_t size);
+#endif
 
 /**
  * Ensure dst refers to the same data as src.
@@ -262,7 +285,11 @@  typedef struct AVBufferPool AVBufferPool;
  * (av_buffer_alloc()).
  * @return newly created buffer pool on success, NULL on error.
  */
+#if FF_API_BUFFER_SIZE_T
 AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
+#else
+AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size));
+#endif
 
 /**
  * Allocate and initialize a buffer pool with a more complex allocator.
@@ -279,8 +306,13 @@  AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
  *                  data. May be NULL.
  * @return newly created buffer pool on success, NULL on error.
  */
+#if FF_API_BUFFER_SIZE_T
 AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
                                    AVBufferRef* (*alloc)(void *opaque, int size),
+#else
+AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque,
+                                   AVBufferRef* (*alloc)(void *opaque, size_t size),
+#endif
                                    void (*pool_free)(void *opaque));
 
 /**
diff --git a/libavutil/buffer_internal.h b/libavutil/buffer_internal.h
index 70d2615a06..0b549e3a53 100644
--- a/libavutil/buffer_internal.h
+++ b/libavutil/buffer_internal.h
@@ -32,7 +32,7 @@ 
 
 struct AVBuffer {
     uint8_t *data; /**< data described by this buffer */
-    int      size; /**< size of data in bytes */
+    buffer_size_t size; /**< size of data in bytes */
 
     /**
      *  number of existing AVBufferRef instances referring to this buffer
@@ -89,10 +89,10 @@  struct AVBufferPool {
      */
     atomic_uint refcount;
 
-    int size;
+    buffer_size_t size;
     void *opaque;
-    AVBufferRef* (*alloc)(int size);
-    AVBufferRef* (*alloc2)(void *opaque, int size);
+    AVBufferRef* (*alloc)(buffer_size_t size);
+    AVBufferRef* (*alloc2)(void *opaque, buffer_size_t size);
     void         (*pool_free)(void *opaque);
 };
 
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 93ea57c324..572daefec3 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -299,4 +299,11 @@  int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t time
 #define FF_PSEUDOPAL 0
 #endif
 
+// Temporary typedef to simplify porting all AVBufferRef users to size_t
+#if FF_API_BUFFER_SIZE_T
+typedef int buffer_size_t;
+#else
+typedef size_t buffer_size_t;
+#endif
+
 #endif /* AVUTIL_INTERNAL_H */
diff --git a/libavutil/version.h b/libavutil/version.h
index 356c54d633..9a290d57e7 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@ 
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  56
-#define LIBAVUTIL_VERSION_MINOR  67
+#define LIBAVUTIL_VERSION_MINOR  68
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
@@ -132,6 +132,9 @@ 
 #ifndef FF_API_CHILD_CLASS_NEXT
 #define FF_API_CHILD_CLASS_NEXT         (LIBAVUTIL_VERSION_MAJOR < 57)
 #endif
+#ifndef FF_API_BUFFER_SIZE_T
+#define FF_API_BUFFER_SIZE_T            (LIBAVUTIL_VERSION_MAJOR < 57)
+#endif
 #ifndef FF_API_D2STR
 #define FF_API_D2STR                    (LIBAVUTIL_VERSION_MAJOR < 58)
 #endif