aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2017-05-12 13:45:44 -0300
committerJames Almer <jamrial@gmail.com>2017-05-12 18:30:31 -0300
commit28f60eeabbdc3d0550f45da813ba91a0354524c4 (patch)
tree04b7698d81dbf5231734768ca4f6d8e8db103112
parent3d55e4883c2ad813641dedcdd4fff30d455cbbd7 (diff)
downloadffmpeg-28f60eeabbdc3d0550f45da813ba91a0354524c4.tar.gz
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@niedermayer.cc> Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r--libavcodec/avpacket.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 26d561a00a..a04cdaf530 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);