From a5d42043093a39636a1f4021a37dd9c612479f6f Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Fri, 23 Oct 2015 11:11:30 +0200 Subject: [PATCH] avformat: Always return ref-counted AVPacket And drop the av_dup_packet from the input_thread. --- avconv.c | 1 - avplay.c | 4 ---- libavformat/utils.c | 8 ++++++++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/avconv.c b/avconv.c index c52f2923af..f6bcb02e22 100644 --- a/avconv.c +++ b/avconv.c @@ -2130,7 +2130,6 @@ static void *input_thread(void *arg) while (!av_fifo_space(f->fifo)) pthread_cond_wait(&f->fifo_cond, &f->fifo_lock); - av_dup_packet(&pkt); av_fifo_generic_write(f->fifo, &pkt, sizeof(pkt), NULL); pthread_mutex_unlock(&f->fifo_lock); diff --git a/avplay.c b/avplay.c index dd2073c482..55e018a896 100644 --- a/avplay.c +++ b/avplay.c @@ -320,10 +320,6 @@ static int packet_queue_put(PacketQueue *q, AVPacket *pkt) { AVPacketList *pkt1; - /* duplicate the packet */ - if (pkt != &flush_pkt && av_dup_packet(pkt) < 0) - return -1; - pkt1 = av_malloc(sizeof(AVPacketList)); if (!pkt1) return -1; diff --git a/libavformat/utils.c b/libavformat/utils.c index f8926bdc64..fd96b9d959 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -413,6 +413,14 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt) continue; } + if (!pkt->buf) { + AVPacket tmp = { 0 }; + ret = av_packet_ref(&tmp, pkt); + if (ret < 0) + return ret; + *pkt = tmp; + } + if ((s->flags & AVFMT_FLAG_DISCARD_CORRUPT) && (pkt->flags & AV_PKT_FLAG_CORRUPT)) { av_log(s, AV_LOG_WARNING,