[FFmpeg-cvslog] avcodec/avpacket: allow only one element per type in packet side data

James Almer git at videolan.org
Sun May 14 04:16:15 EEST 2017


ffmpeg | branch: release/3.3 | James Almer <jamrial at gmail.com> | Fri May 12 13:45:44 2017 -0300| [8c33e2e11bc9e8a46f07ad86500d5271484f6000] | committer: James Almer

avcodec/avpacket: allow only one element per type in packet side data

It was never meant to do otherwise, as av_packet_get_side_data() returns the first
entry it finds of a given type.

Based on code from libavformat's av_stream_add_side_data().

Reviewed-by: Michael Niedermayer <michael at niedermayer.cc>
Signed-off-by: James Almer <jamrial at gmail.com>
(cherry picked from commit 28f60eeabbdc3d0550f45da813ba91a0354524c4)

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8c33e2e11bc9e8a46f07ad86500d5271484f6000
---

 libavcodec/avpacket.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 7cb9fdf822..8de9558854 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -296,7 +296,18 @@ int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                             uint8_t *data, size_t size)
 {
     AVPacketSideData *tmp;
-    int elems = pkt->side_data_elems;
+    int i, elems = pkt->side_data_elems;
+
+    for (i = 0; i < elems; i++) {
+        AVPacketSideData *sd = &pkt->side_data[i];
+
+        if (sd->type == type) {
+            av_free(sd->data);
+            sd->data = data;
+            sd->size = size;
+            return 0;
+        }
+    }
 
     if ((unsigned)elems + 1 > AV_PKT_DATA_NB)
         return AVERROR(ERANGE);



More information about the ffmpeg-cvslog mailing list