Commit 02a6b06d authored by Clément Bœsch's avatar Clément Bœsch

avpacket: do not copy data when buf ref is available.

This at least fixes issues with lavf/subtitles. The behaviour of
av_dup_packet() is unchanged, only av_copy_packet() is affected.
parent b94df21a
......@@ -184,7 +184,15 @@ static int copy_packet_data(AVPacket *pkt, AVPacket *src)
{
pkt->data = NULL;
pkt->side_data = NULL;
DUP_DATA(pkt->data, src->data, pkt->size, 1, ALLOC_BUF);
if (pkt->buf) {
AVBufferRef *ref = av_buffer_ref(src->buf);
if (!ref)
return AVERROR(ENOMEM);
pkt->buf = ref;
pkt->data = ref->data;
} else {
DUP_DATA(pkt->data, src->data, pkt->size, 1, ALLOC_BUF);
}
#if FF_API_DESTRUCT_PACKET
pkt->destruct = dummy_destruct_packet;
#endif
......@@ -228,7 +236,6 @@ int av_dup_packet(AVPacket *pkt)
int av_copy_packet(AVPacket *dst, AVPacket *src)
{
*dst = *src;
dst->buf = av_buffer_ref(src->buf);
return copy_packet_data(dst, src);
}
......
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