Module: libav Branch: master Commit: 8b4b1c1eea9daa4e2003aa0935e73f56aab8102d
Author: Luca Barbato <lu_z...@gentoo.org> Committer: Luca Barbato <lu_z...@gentoo.org> Date: Sat Mar 12 13:46:13 2016 +0100 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-sta...@libav.org --- 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); _______________________________________________ libav-commits mailing list libav-commits@libav.org https://lists.libav.org/mailman/listinfo/libav-commits