summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--avconv.c1
-rw-r--r--avplay.c4
-rw-r--r--libavformat/utils.c8
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,