Incorrectly used codec_movaudio_tags instead of codec_movvideo_tags. Description follows:
In many older QuickTime files, the audio format, or "fourcc", is 0x00000000 (AV_CODEC_ID_NONE). The QuickTime File Format Specification states the following regarding this situation: "This format descriptor should not be used, but may be found in some files. Samples are assumed to be stored in either 'raw ' or 'twos' format, depending on the sample size field in the sound description." MPlayer handles this logic by itself, but FFmpeg/FFplay currently does not. Also, Michael Niedermayer, at least in this case, MPlayer seems to look at the codec tag rather than the codec ID in order to determine the codec. Therefore, your patch from 2014 for SMI -> SVQ3 needs to set the 'fourcc' variable to 'SVQ3' as well, which is later copied to st->codec->codec_tag in matroskadec.c. Mats -- Mats Peterson http://matsp888.no-ip.org/~mats/
>From 6ce829b5be54d86ebee49202c09adbd026c19845 Mon Sep 17 00:00:00 2001 From: Mats Peterson <matsp...@yahoo.com> Date: Tue, 5 Jan 2016 14:49:17 +0100 Subject: [PATCH v4] lavf/matroskadec: A_QUICKTIME/AV_CODEC_ID_NONE + SMI->SVQ3 Incorrectly used codec_movaudio_tags instead of codec_movvideo_tags. Description follows: In many older QuickTime files, the audio format, or "fourcc", is 0x00000000 (AV_CODEC_ID_NONE). The QuickTime File Format Specification states the following regarding this situation: "This format descriptor should not be used, but may be found in some files. Samples are assumed to be stored in either 'raw ' or 'twos' format, depending on the sample size field in the sound description." MPlayer handles this logic by itself, but FFmpeg/FFplay currently does not. Also, Michael Niedermayer, at least in this case, MPlayer seems to look at the codec tag rather than the codec ID in order to determine the codec. Therefore, your patch from 2014 for SMI -> SVQ3 needs to set the 'fourcc' variable to 'SVQ3' as well, which is later copied to st->codec->codec_tag in matroskadec.c. Mats --- libavformat/matroskadec.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 9de7cfb..d9d87cc 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -1869,6 +1869,15 @@ static int matroska_parse_tracks(AVFormatContext *s) fourcc = AV_RL32(track->codec_priv.data); codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); } + if (codec_id == AV_CODEC_ID_NONE) { + if (track->audio.bitdepth == 8) { + fourcc = MKTAG('r','a','w',' '); + codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); + } else if (track->audio.bitdepth == 16) { + fourcc = MKTAG('t','w','o','s'); + codec_id = ff_codec_get_id(ff_codec_movaudio_tags, fourcc); + } + } } else if (!strcmp(track->codec_id, "V_QUICKTIME") && (track->codec_priv.size >= 21) && (track->codec_priv.data)) { @@ -1878,8 +1887,10 @@ static int matroska_parse_tracks(AVFormatContext *s) fourcc = AV_RL32(track->codec_priv.data); codec_id = ff_codec_get_id(ff_codec_movvideo_tags, fourcc); } - if (codec_id == AV_CODEC_ID_NONE && AV_RL32(track->codec_priv.data+4) == AV_RL32("SMI ")) - codec_id = AV_CODEC_ID_SVQ3; + if (codec_id == AV_CODEC_ID_NONE && AV_RL32(track->codec_priv.data+4) == AV_RL32("SMI ")) { + fourcc = MKTAG('S','V','Q','3'); + codec_id = ff_codec_get_id(ff_codec_movvideo_tags, fourcc); + } if (codec_id == AV_CODEC_ID_NONE) { char buf[32]; av_get_codec_tag_string(buf, sizeof(buf), fourcc); -- 1.7.10.4
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel