aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorVignesh Venkatasubramanian <vigneshv@google.com>2013-05-08 16:59:31 -0700
committerMichael Niedermayer <michaelni@gmx.at>2013-05-14 22:51:12 +0200
commit48de04f4ec08140c129c0f7ae721bb5aa0d17aca (patch)
treeeee4e18bd60bc0b78718b4342b320295dd12910c /libavcodec
parent5d22ac488b4a424fa8e71f01152b43070f3ef1be (diff)
downloadffmpeg-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.h7
-rw-r--r--libavcodec/avpacket.c19
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;