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 c52f292..f6bcb02 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 546fb90..f063050 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 f8926bd..fd96b9d 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,
-- 
2.5.0

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to