---
 libavformat/mux.c |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/libavformat/mux.c b/libavformat/mux.c
index dd88225..7f67c4d 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -407,6 +407,9 @@ static int compute_pkt_fields2(AVFormatContext *s, AVStream 
*st, AVPacket *pkt)
 
 static int write_packet(AVFormatContext *s, AVPacket *pkt)
 {
+    AVStream *st = s->streams[pkt->stream_index];
+    uint8_t *new_extradata;
+    int extradata_size;
     int ret;
     if (!(s->oformat->flags & (AVFMT_TS_NEGATIVE | AVFMT_NOTIMESTAMPS))) {
         AVRational time_base = s->streams[pkt->stream_index]->time_base;
@@ -424,6 +427,21 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
         if (pkt->pts != AV_NOPTS_VALUE)
             pkt->pts += offset;
     }
+
+    new_extradata = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
+                                            &extradata_size);
+    if (new_extradata) {
+        av_freep(&st->codec->extradata);
+        st->codec->extradata_size = 0;
+
+        st->codec->extradata = av_mallocz(extradata_size + 
FF_INPUT_BUFFER_PADDING_SIZE);
+        if (!st->codec->extradata)
+            return AVERROR(ENOMEM);
+
+        memcpy(st->codec->extradata, new_extradata, extradata_size);
+        st->codec->extradata_size = extradata_size;
+    }
+
     ret = s->oformat->write_packet(s, pkt);
 
     if (s->pb && ret >= 0 && s->flags & AVFMT_FLAG_FLUSH_PACKETS)
-- 
1.7.10.4

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

Reply via email to