diff options
author | Vignesh Venkatasubramanian <vigneshv@google.com> | 2013-05-08 16:59:31 -0700 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-05-14 22:51:12 +0200 |
commit | 48de04f4ec08140c129c0f7ae721bb5aa0d17aca (patch) | |
tree | eee4e18bd60bc0b78718b4342b320295dd12910c /libavcodec | |
parent | 5d22ac488b4a424fa8e71f01152b43070f3ef1be (diff) | |
download | ffmpeg-48de04f4ec08140c129c0f7ae721bb5aa0d17aca.tar.gz |
avcodec/avpacket: Refactoring copy_side_data into a separate function
Refactoring copy_side_data into a separate function so that it can be called
in cases where side data needs to be duplicated.
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/avcodec.h | 7 | ||||
-rw-r--r-- | libavcodec/avpacket.c | 19 |
2 files changed, 22 insertions, 4 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 21e585684f..8f6a7228bc 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3484,6 +3484,13 @@ int av_dup_packet(AVPacket *pkt); int av_copy_packet(AVPacket *dst, AVPacket *src); /** + * Copy packet side data + * + * @return 0 on success, negative AVERROR on fail + */ +int av_copy_packet_side_data(AVPacket *dst, AVPacket *src); + +/** * Free a packet. * * @param pkt packet to free diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 92f4fdfbe3..198365e3a7 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -199,13 +199,24 @@ static int copy_packet_data(AVPacket *pkt, AVPacket *src, int dup) if (pkt->side_data_elems && dup) pkt->side_data = src->side_data; if (pkt->side_data_elems && !dup) { - int i; + return av_copy_packet_side_data(pkt, src); + } + return 0; + +failed_alloc: + av_destruct_packet(pkt); + return AVERROR(ENOMEM); +} +int av_copy_packet_side_data(AVPacket *pkt, AVPacket *src) +{ + if (src->side_data_elems) { + int i; DUP_DATA(pkt->side_data, src->side_data, - pkt->side_data_elems * sizeof(*pkt->side_data), 0, ALLOC_MALLOC); + src->side_data_elems * sizeof(*src->side_data), 0, ALLOC_MALLOC); memset(pkt->side_data, 0, - pkt->side_data_elems * sizeof(*pkt->side_data)); - for (i = 0; i < pkt->side_data_elems; i++) { + src->side_data_elems * sizeof(*src->side_data)); + for (i = 0; i < src->side_data_elems; i++) { DUP_DATA(pkt->side_data[i].data, src->side_data[i].data, src->side_data[i].size, 1, ALLOC_MALLOC); pkt->side_data[i].size = src->side_data[i].size; |