diff options
author | James Almer <jamrial@gmail.com> | 2017-05-12 13:45:44 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2017-05-12 18:30:31 -0300 |
commit | 28f60eeabbdc3d0550f45da813ba91a0354524c4 (patch) | |
tree | 04b7698d81dbf5231734768ca4f6d8e8db103112 | |
parent | 3d55e4883c2ad813641dedcdd4fff30d455cbbd7 (diff) | |
download | ffmpeg-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.c | 13 |
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); |