Merge commit '9b56d5c11488656254e9aed8d964ef2b7c2ff5e6'
[ffmpeg.git] / libavformat / mux.c
index b2d843b..bf7a472 100644 (file)
@@ -740,19 +740,14 @@ int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt,
     this_pktl      = av_mallocz(sizeof(AVPacketList));
     if (!this_pktl)
         return AVERROR(ENOMEM);
-    this_pktl->pkt = *pkt;
-    pkt->buf       = NULL;
-    pkt->side_data = NULL;
-    pkt->side_data_elems = 0;
     if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) {
         av_assert0(pkt->size == UNCODED_FRAME_PACKET_SIZE);
         av_assert0(((AVFrame *)pkt->data)->buf);
-    } else {
-        // Duplicate the packet if it uses non-allocated memory
-        if ((ret = av_dup_packet(&this_pktl->pkt)) < 0) {
-            av_free(this_pktl);
-            return ret;
-        }
+    }
+
+    if ((ret = av_packet_ref(&this_pktl->pkt, pkt)) < 0) {
+        av_free(this_pktl);
+        return ret;
     }
 
     if (s->streams[pkt->stream_index]->last_in_packet_buffer) {
@@ -803,6 +798,8 @@ next_non_null:
     s->streams[pkt->stream_index]->last_in_packet_buffer =
         *next_point                                      = this_pktl;
 
+    av_packet_unref(pkt);
+
     return 0;
 }