[FFmpeg-cvslog] avformat/matroskaenc: wrap V_QUICKTIME codec private in something that looks like its part of quicktime stsd

Michael Niedermayer git at videolan.org
Thu Jan 23 15:43:35 CET 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun Jan 19 20:59:28 2014 +0100| [8456bd2c0f3b08756f353646fe3b40a6772e665e] | committer: Michael Niedermayer

avformat/matroskaenc: wrap V_QUICKTIME codec private in something that looks like its part of quicktime stsd

This is needed for matroska spec compliance
Fixes playback of SVQ3 in matroska with vlc
Fixes Ticket 3256

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8456bd2c0f3b08756f353646fe3b40a6772e665e
---

 libavformat/matroskaenc.c |   12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 11174f1..16a7f18 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -548,8 +548,18 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, AVCodecCo
         if (qt_id) {
             if (!codec->codec_tag)
                 codec->codec_tag = ff_codec_get_tag(ff_codec_movvideo_tags, codec->codec_id);
-            if (codec->extradata_size)
+            if (codec->extradata_size) {
+                if (   ff_codec_get_id(ff_codec_movvideo_tags, codec->codec_tag) == codec->codec_id
+                    && ff_codec_get_id(ff_codec_movvideo_tags, AV_RL32(codec->extradata+4)) != codec->codec_id
+                ) {
+                    int i;
+                    avio_wb32(dyn_cp, 0x5a + codec->extradata_size);
+                    avio_wl32(dyn_cp, codec->codec_tag);
+                    for(i=0; i<0x5a-8; i++)
+                        avio_w8(dyn_cp, 0);
+                }
                 avio_write(dyn_cp, codec->extradata, codec->extradata_size);
+            }
         } else {
             if (!ff_codec_get_tag(ff_codec_bmp_tags, codec->codec_id))
                 av_log(s, AV_LOG_WARNING, "codec %s is not supported by this format\n",



More information about the ffmpeg-cvslog mailing list