[FFmpeg-devel] [PATCH 2/4] avcodec/avpacket: use av_packet_copy_side_data() in av_packet_copy_props()

James Almer jamrial at gmail.com
Mon Sep 25 04:06:10 EEST 2017


The side data array in av_packet_copy_side_data() is not reallocated every
time a new element is added, unlike when calling av_packet_new_side_data()
in a loop.

Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavcodec/avpacket.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 33e325c9ed..01b899c79d 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -625,7 +625,7 @@ fail:
 
 int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
 {
-    int i;
+    int ret;
 
     dst->pts                  = src->pts;
     dst->dts                  = src->dts;
@@ -639,20 +639,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
     dst->flags                = src->flags;
     dst->stream_index         = src->stream_index;
 
-    for (i = 0; i < src->side_data_elems; i++) {
-         enum AVPacketSideDataType type = src->side_data[i].type;
-         int size          = src->side_data[i].size;
-         uint8_t *src_data = src->side_data[i].data;
-         uint8_t *dst_data = av_packet_new_side_data(dst, type, size);
-
-        if (!dst_data) {
-            av_packet_free_side_data(dst);
-            return AVERROR(ENOMEM);
-        }
-        memcpy(dst_data, src_data, size);
-    }
+    ret = av_packet_copy_side_data(dst, src);
+    if (ret < 0)
+        av_packet_free_side_data(dst);
 
-    return 0;
+    return ret;
 }
 
 void av_packet_unref(AVPacket *pkt)
-- 
2.14.1



More information about the ffmpeg-devel mailing list