aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/au.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2018-12-23 16:27:45 +0100
committerPaul B Mahol <onemda@gmail.com>2018-12-31 15:21:47 +0100
commit8a8cce078c18050f0905a85997d80bb5c929fa00 (patch)
treeca61ac06afb884e2e4f53caf4b8ea45b489ec787 /libavformat/au.c
parent3e461f9d4c759193e64530bac60d57c7ec9ad18b (diff)
downloadffmpeg-8a8cce078c18050f0905a85997d80bb5c929fa00.tar.gz
avformat/au: do not use invalid block_align for small bits per sample
Fixes #5481.
Diffstat (limited to 'libavformat/au.c')
-rw-r--r--libavformat/au.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libavformat/au.c b/libavformat/au.c
index 520824fc12..0b2b7eac15 100644
--- a/libavformat/au.c
+++ b/libavformat/au.c
@@ -140,7 +140,7 @@ static int au_read_header(AVFormatContext *s)
unsigned int tag;
AVIOContext *pb = s->pb;
unsigned int id, channels, rate;
- int bps;
+ int bps, ba = 0;
enum AVCodecID codec;
AVStream *st;
@@ -178,6 +178,7 @@ static int au_read_header(AVFormatContext *s)
} else {
const uint8_t bpcss[] = {4, 0, 3, 5};
av_assert0(id >= 23 && id < 23 + 4);
+ ba = bpcss[id - 23];
bps = bpcss[id - 23];
}
} else if (!bps) {
@@ -205,7 +206,7 @@ static int au_read_header(AVFormatContext *s)
st->codecpar->sample_rate = rate;
st->codecpar->bits_per_coded_sample = bps;
st->codecpar->bit_rate = channels * rate * bps;
- st->codecpar->block_align = FFMAX(bps * st->codecpar->channels / 8, 1);
+ st->codecpar->block_align = ba ? ba : FFMAX(bps * st->codecpar->channels / 8, 1);
if (data_size != AU_UNKNOWN_SIZE)
st->duration = (((int64_t)data_size)<<3) / (st->codecpar->channels * (int64_t)bps);