[FFmpeg-devel] [PATCH 3/3] avcodec/packet: change public function and struct size parameter types to size_t

James Almer jamrial at gmail.com
Sun May 31 19:38:39 EEST 2020


Signed-off-by: James Almer <jamrial at gmail.com>
---
 doc/APIchanges        |  4 ++--
 libavcodec/avpacket.c | 49 +++++++++++++++++++++++++++++++++++++++++++
 libavcodec/packet.h   | 45 +++++++++++++++++++++++++++++++++++++++
 libavutil/frame.h     |  4 ++++
 4 files changed, 100 insertions(+), 2 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 8d353fdcef..7f15090031 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -16,8 +16,8 @@ libavutil:     2017-10-21
 API changes, most recent first:
 
 2020-06-xx - xxxxxxxxxx
-  Change AVBufferRef and relevant AVFrame function and struct size
-  parameter and fields type to size_t at next major bump.
+  Change AVBufferRef and relevant AVFrame and AVPacket function and
+  struct size parameter and fields type to size_t at next major bump.
 
 2020-xx-xx - xxxxxxxxxx - lavc 58.88.100 - avcodec.h codec.h
   Move AVCodec-related public API to new header codec.h.
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 033f2d8f26..e43c584576 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -69,7 +69,11 @@ void av_packet_free(AVPacket **pkt)
     av_freep(pkt);
 }
 
+#if FF_API_BUFFER_SIZE_T
 static int packet_alloc(AVBufferRef **buf, int size)
+#else
+static int packet_alloc(AVBufferRef **buf, size_t size)
+#endif
 {
     int ret;
     if (size < 0 || size >= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
@@ -84,7 +88,11 @@ static int packet_alloc(AVBufferRef **buf, int size)
     return 0;
 }
 
+#if FF_API_BUFFER_SIZE_T
 int av_new_packet(AVPacket *pkt, int size)
+#else
+int av_new_packet(AVPacket *pkt, size_t size)
+#endif
 {
     AVBufferRef *buf = NULL;
     int ret = packet_alloc(&buf, size);
@@ -99,7 +107,11 @@ int av_new_packet(AVPacket *pkt, int size)
     return 0;
 }
 
+#if FF_API_BUFFER_SIZE_T
 void av_shrink_packet(AVPacket *pkt, int size)
+#else
+void av_shrink_packet(AVPacket *pkt, size_t size)
+#endif
 {
     if (pkt->size <= size)
         return;
@@ -107,12 +119,21 @@ void av_shrink_packet(AVPacket *pkt, int size)
     memset(pkt->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 }
 
+#if FF_API_BUFFER_SIZE_T
 int av_grow_packet(AVPacket *pkt, int grow_by)
 {
     int new_size;
     av_assert0((unsigned)pkt->size <= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE);
     if ((unsigned)grow_by >
         INT_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE))
+#else
+int av_grow_packet(AVPacket *pkt, size_t grow_by)
+{
+    size_t new_size;
+    av_assert0(pkt->size <= SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE);
+    if (grow_by >
+        SIZE_MAX - (pkt->size + AV_INPUT_BUFFER_PADDING_SIZE))
+#endif
         return AVERROR(ENOMEM);
 
     new_size = pkt->size + grow_by + AV_INPUT_BUFFER_PADDING_SIZE;
@@ -124,7 +145,11 @@ int av_grow_packet(AVPacket *pkt, int grow_by)
             pkt->data = pkt->buf->data;
         } else {
             data_offset = pkt->data - pkt->buf->data;
+#if FF_API_BUFFER_SIZE_T
             if (data_offset > INT_MAX - new_size)
+#else
+            if (data_offset > SIZE_MAX - new_size)
+#endif
                 return AVERROR(ENOMEM);
         }
 
@@ -151,7 +176,11 @@ int av_grow_packet(AVPacket *pkt, int grow_by)
     return 0;
 }
 
+#if FF_API_BUFFER_SIZE_T
 int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size)
+#else
+int av_packet_from_data(AVPacket *pkt, uint8_t *data, size_t size)
+#endif
 {
     if (size >= INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
         return AVERROR(EINVAL);
@@ -329,7 +358,11 @@ int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
 
 
 uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
+#if FF_API_BUFFER_SIZE_T
                                  int size)
+#else
+                                 size_t size)
+#endif
 {
     int ret;
     uint8_t *data;
@@ -350,7 +383,11 @@ uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
 }
 
 uint8_t *av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
+#if FF_API_BUFFER_SIZE_T
                                  int *size)
+#else
+                                 size_t *size)
+#endif
 {
     int i;
 
@@ -490,7 +527,11 @@ int av_packet_split_side_data(AVPacket *pkt){
 }
 #endif
 
+#if FF_API_BUFFER_SIZE_T
 uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size)
+#else
+uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size)
+#endif
 {
     AVDictionaryEntry *t = NULL;
     uint8_t *data = NULL;
@@ -525,7 +566,11 @@ fail:
     return NULL;
 }
 
+#if FF_API_BUFFER_SIZE_T
 int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict)
+#else
+int av_packet_unpack_dictionary(const uint8_t *data, size_t size, AVDictionary **dict)
+#endif
 {
     const uint8_t *end;
     int ret;
@@ -552,7 +597,11 @@ int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **di
 }
 
 int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
+#if FF_API_BUFFER_SIZE_T
                                int size)
+#else
+                               size_t size)
+#endif
 {
     int i;
 
diff --git a/libavcodec/packet.h b/libavcodec/packet.h
index 41485f4527..0fd7b3486a 100644
--- a/libavcodec/packet.h
+++ b/libavcodec/packet.h
@@ -297,7 +297,11 @@ enum AVPacketSideDataType {
 
 typedef struct AVPacketSideData {
     uint8_t *data;
+#if FF_API_BUFFER_SIZE_T
     int      size;
+#else
+    size_t   size;
+#endif
     enum AVPacketSideDataType type;
 } AVPacketSideData;
 
@@ -353,7 +357,11 @@ typedef struct AVPacket {
      */
     int64_t dts;
     uint8_t *data;
+#if FF_API_BUFFER_SIZE_T
     int   size;
+#else
+    size_t size;
+#endif
     int   stream_index;
     /**
      * A combination of AV_PKT_FLAG values
@@ -465,7 +473,11 @@ void av_init_packet(AVPacket *pkt);
  * @param size wanted payload size
  * @return 0 if OK, AVERROR_xxx otherwise
  */
+#if FF_API_BUFFER_SIZE_T
 int av_new_packet(AVPacket *pkt, int size);
+#else
+int av_new_packet(AVPacket *pkt, size_t size);
+#endif
 
 /**
  * Reduce packet size, correctly zeroing padding
@@ -473,7 +485,11 @@ int av_new_packet(AVPacket *pkt, int size);
  * @param pkt packet
  * @param size new size
  */
+#if FF_API_BUFFER_SIZE_T
 void av_shrink_packet(AVPacket *pkt, int size);
+#else
+void av_shrink_packet(AVPacket *pkt, size_t size);
+#endif
 
 /**
  * Increase packet size, correctly zeroing padding
@@ -481,7 +497,11 @@ void av_shrink_packet(AVPacket *pkt, int size);
  * @param pkt packet
  * @param grow_by number of bytes by which to increase the size of the packet
  */
+#if FF_API_BUFFER_SIZE_T
 int av_grow_packet(AVPacket *pkt, int grow_by);
+#else
+int av_grow_packet(AVPacket *pkt, size_t grow_by);
+#endif
 
 /**
  * Initialize a reference-counted packet from av_malloc()ed data.
@@ -496,7 +516,11 @@ int av_grow_packet(AVPacket *pkt, int grow_by);
  *
  * @return 0 on success, a negative AVERROR on error
  */
+#if FF_API_BUFFER_SIZE_T
 int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
+#else
+int av_packet_from_data(AVPacket *pkt, uint8_t *data, size_t size);
+#endif
 
 #if FF_API_AVPACKET_OLD_API
 /**
@@ -546,7 +570,11 @@ void av_free_packet(AVPacket *pkt);
  * @return pointer to fresh allocated data or NULL otherwise
  */
 uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
+#if FF_API_BUFFER_SIZE_T
                                  int size);
+#else
+                                 size_t size);
+#endif
 
 /**
  * Wrap an existing array as a packet side data.
@@ -573,7 +601,11 @@ int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
  * @return 0 on success, < 0 on failure
  */
 int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
+#if FF_API_BUFFER_SIZE_T
                                int size);
+#else
+                               size_t size);
+#endif
 
 /**
  * Get side information from packet.
@@ -584,7 +616,11 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
  * @return pointer to data if present or NULL otherwise
  */
 uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
+#if FF_API_BUFFER_SIZE_T
                                  int *size);
+#else
+                                 size_t *size);
+#endif
 
 #if FF_API_MERGE_SD_API
 attribute_deprecated
@@ -603,7 +639,12 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type);
  * @param size pointer to store the size of the returned data
  * @return pointer to data if successful, NULL otherwise
  */
+#if FF_API_BUFFER_SIZE_T
 uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
+#else
+uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size);
+#endif
+
 /**
  * Unpack a dictionary from side_data.
  *
@@ -612,7 +653,11 @@ uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
  * @param dict the metadata storage dictionary
  * @return 0 on success, < 0 on failure
  */
+#if FF_API_BUFFER_SIZE_T
 int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
+#else
+int av_packet_unpack_dictionary(const uint8_t *data, size_t size, AVDictionary **dict);
+#endif
 
 
 /**
diff --git a/libavutil/frame.h b/libavutil/frame.h
index fa4931edb8..20b093ec9d 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -616,7 +616,11 @@ typedef struct AVFrame {
      * - encoding: unused
      * - decoding: set by libavcodec, read by user.
      */
+#if FF_API_BUFFER_SIZE_T
     int pkt_size;
+#else
+    size_t pkt_size;
+#endif
 
 #if FF_API_FRAME_QP
     /**
-- 
2.26.2



More information about the ffmpeg-devel mailing list