From 8456bd2c0f3b08756f353646fe3b40a6772e665e Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 19 Jan 2014 20:59:28 +0100 Subject: [PATCH] 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 --- libavformat/matroskaenc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 11174f1a3d..16a7f187f9 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",