diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-01-19 20:59:28 +0100 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2014-04-16 19:46:38 +0200 |
commit | 9060c10c659cc4ab397585f8dba1ab3bf9aa2a0b (patch) | |
tree | e8a52b5b29c793f8b0dc2ae5bfbef07193a4ccd0 | |
parent | 5202621ac413ff82a65ee81d145e5ee704360c22 (diff) | |
download | ffmpeg-9060c10c659cc4ab397585f8dba1ab3bf9aa2a0b.tar.gz |
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>
(cherry picked from commit 8456bd2c0f3b08756f353646fe3b40a6772e665e)
-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 05890d3577..5869af1123 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -501,8 +501,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 (!codec->codec_tag) codec->codec_tag = ff_codec_get_tag(ff_codec_bmp_tags, codec->codec_id); |