diff options
author | Rodger Combs <rodger.combs@gmail.com> | 2015-06-23 12:35:35 -0500 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-06-27 14:15:12 +0200 |
commit | 68f00fb40bb3cfc354f6295e8a96b07600aa72a9 (patch) | |
tree | c6464f047ffd0b98bbe5e8b13993221b6d8a86b3 | |
parent | f4be604f1c4d5cb6480c81c671d646cc16b02017 (diff) | |
download | ffmpeg-68f00fb40bb3cfc354f6295e8a96b07600aa72a9.tar.gz |
lavf/brstm: if the file lies about the last block's size, correct it
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/brstm.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/libavformat/brstm.c b/libavformat/brstm.c index f5a4a82d4c..291a4628bc 100644 --- a/libavformat/brstm.c +++ b/libavformat/brstm.c @@ -369,6 +369,15 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) size = b->last_block_used_bytes; samples = b->last_block_samples; skip = b->last_block_size - b->last_block_used_bytes; + + if (samples < size * 14 / 8) { + uint32_t adjusted_size = samples / 14 * 8; + if (samples % 14) + adjusted_size += (samples % 14 + 1) / 2 + 1; + + skip += size - adjusted_size; + size = adjusted_size; + } } else if (b->current_block < b->block_count) { size = b->block_size; samples = b->samples_per_block; |