diff options
author | James Almer <jamrial@gmail.com> | 2017-05-12 13:45:44 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-05-13 22:15:40 -0300 |
commit | 8c33e2e11bc9e8a46f07ad86500d5271484f6000 (patch) | |
tree | 25702a479622f67573d3199b6d221c244c23553d | |
parent | 8fbd34750834a6c91ec4079b3ee9b0877f3a21b0 (diff) | |
download | ffmpeg-8c33e2e11bc9e8a46f07ad86500d5271484f6000.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>
(cherry picked from commit 28f60eeabbdc3d0550f45da813ba91a0354524c4)
-rw-r--r-- | libavcodec/avpacket.c | 13 |
1 files changed, 12 insertions, 1 deletions
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); |