diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-01-19 23:59:28 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-01-23 17:49:50 +0400 |
commit | 8456bd2c0f3b08756f353646fe3b40a6772e665e (patch) | |
tree | ccf9ef63b294fdfd4c868fa4fae27515a69f0990 /libavformat/matroskaenc.c | |
parent | da25a6573f9c2faa557a86a6f9cd6f73ca233b54 (diff) |
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@gmx.at>
Diffstat (limited to 'libavformat/matroskaenc.c')
-rw-r--r-- | libavformat/matroskaenc.c | 12 |
1 files changed, 11 insertions, 1 deletions
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", |