diff options
-rw-r--r-- | avconv.c | 1 | ||||
-rw-r--r-- | avplay.c | 4 | ||||
-rw-r--r-- | libavformat/utils.c | 8 |
3 files changed, 8 insertions, 5 deletions
@@ -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); @@ -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, |