[FFmpeg-cvslog] matroska: Support V_QUICKTIME as written in the specification
Luca Barbato
git at videolan.org
Wed Apr 13 18:34:34 CEST 2016
ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Sat Mar 12 13:46:13 2016 +0100| [8b4b1c1eea9daa4e2003aa0935e73f56aab8102d] | committer: Luca Barbato
matroska: Support V_QUICKTIME as written in the specification
Check if the size is written the first 4 bytes and read the next 4
as fourcc candidate, fallback checking the initial for 4 bytes.
"The CodecPrivate contains all additional data that is stored in the
'stsd' (sample description) atom in the QuickTime file after the
mandatory video descriptor structure (starting with the size and FourCC
fields)"
CC: libav-stable at libav.org
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8b4b1c1eea9daa4e2003aa0935e73f56aab8102d
---
libavformat/matroskadec.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 0ed56af..75ac67c 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -1661,9 +1661,16 @@ static int matroska_parse_tracks(AVFormatContext *s)
} else if (!strcmp(track->codec_id, "V_QUICKTIME") &&
(track->codec_priv.size >= 86) &&
(track->codec_priv.data)) {
- track->video.fourcc = AV_RL32(track->codec_priv.data);
- codec_id = ff_codec_get_id(ff_codec_movvideo_tags,
- track->video.fourcc);
+ if (track->codec_priv.size == AV_RB32(track->codec_priv.data)) {
+ track->video.fourcc = AV_RL32(track->codec_priv.data + 4);
+ codec_id = ff_codec_get_id(ff_codec_movvideo_tags,
+ track->video.fourcc);
+ }
+ if (codec_id == AV_CODEC_ID_NONE) {
+ track->video.fourcc = AV_RL32(track->codec_priv.data);
+ codec_id = ff_codec_get_id(ff_codec_movvideo_tags,
+ track->video.fourcc);
+ }
if (codec_id == AV_CODEC_ID_NONE) {
char buf[32];
av_get_codec_tag_string(buf, sizeof(buf), track->video.fourcc);
More information about the ffmpeg-cvslog
mailing list