Commit 48de04f4 authored by Vignesh Venkatasubramanian's avatar Vignesh Venkatasubramanian Committed by Michael Niedermayer

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: 's avatarVignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 5d22ac48
...@@ -3483,6 +3483,13 @@ int av_dup_packet(AVPacket *pkt); ...@@ -3483,6 +3483,13 @@ int av_dup_packet(AVPacket *pkt);
*/ */
int av_copy_packet(AVPacket *dst, AVPacket *src); 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. * Free a packet.
* *
......
...@@ -199,13 +199,24 @@ static int copy_packet_data(AVPacket *pkt, AVPacket *src, int dup) ...@@ -199,13 +199,24 @@ static int copy_packet_data(AVPacket *pkt, AVPacket *src, int dup)
if (pkt->side_data_elems && dup) if (pkt->side_data_elems && dup)
pkt->side_data = src->side_data; pkt->side_data = src->side_data;
if (pkt->side_data_elems && !dup) { 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, 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, memset(pkt->side_data, 0,
pkt->side_data_elems * sizeof(*pkt->side_data)); src->side_data_elems * sizeof(*src->side_data));
for (i = 0; i < pkt->side_data_elems; i++) { for (i = 0; i < src->side_data_elems; i++) {
DUP_DATA(pkt->side_data[i].data, src->side_data[i].data, DUP_DATA(pkt->side_data[i].data, src->side_data[i].data,
src->side_data[i].size, 1, ALLOC_MALLOC); src->side_data[i].size, 1, ALLOC_MALLOC);
pkt->side_data[i].size = src->side_data[i].size; pkt->side_data[i].size = src->side_data[i].size;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment