diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-07-15 17:13:45 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2013-07-16 11:43:21 +0200 |
commit | bc44d06c3de8b15e76a2eb6587eeec9682e48dfa (patch) | |
tree | e02aea9c2ef005ceb01de1bb61311df83eb9d45f | |
parent | 7740e36a89cdc27ef09ec3a8c0151e96017c24e3 (diff) | |
download | ffmpeg-bc44d06c3de8b15e76a2eb6587eeec9682e48dfa.tar.gz |
avformat/matroskadec: Detect conflicting sample rate/default_duration
Fixes Ticket2508
Thanks-to: Moritz Bunkus
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 6158a3bcdf52fafc1d9ae9eb358a56c614b23aa3)
-rw-r--r-- | libavformat/matroskadec.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index a1aa0ebd10..9a15a2b8e5 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2364,6 +2364,7 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, uint32_t *lace_size = NULL; int n, flags, laces = 0; uint64_t num; + int trust_default_duration = 1; if ((n = matroska_ebmlnum_uint(matroska, data, size, &num)) < 0) { av_log(matroska->ctx, AV_LOG_ERROR, "EBML block data error\n"); @@ -2418,7 +2419,15 @@ static int matroska_parse_block(MatroskaDemuxContext *matroska, uint8_t *data, if (res) goto end; - if (!block_duration) + if (track->audio.samplerate == 8000) { + // If this is needed for more codecs, then add them here + if (st->codec->codec_id == AV_CODEC_ID_AC3) { + if(track->audio.samplerate != st->codec->sample_rate || !st->codec->frame_size) + trust_default_duration = 0; + } + } + + if (!block_duration && trust_default_duration) block_duration = track->default_duration * laces / matroska->time_scale; if (cluster_time != (uint64_t)-1 && (block_time >= 0 || cluster_time >= -block_time)) |