From 4c64c8e95a02b1d69aabb400fa73cba7ef8f41f7 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sun, 17 Apr 2011 12:26:47 -0400 Subject: ac3dec: fix processing of delta bit allocation information. The number of dba segments is the coded value + 1. The coupling dba offset starts at the first coupling band, not at zero. --- libavcodec/ac3.c | 4 ++-- libavcodec/ac3dec.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libavcodec/ac3.c b/libavcodec/ac3.c index 704c6e03a6..99e5b50acb 100644 --- a/libavcodec/ac3.c +++ b/libavcodec/ac3.c @@ -192,9 +192,9 @@ int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd, if (dba_mode == DBA_REUSE || dba_mode == DBA_NEW) { int i, seg, delta; - if (dba_nsegs >= 8) + if (dba_nsegs > 8) return -1; - band = 0; + band = band_start; for (seg = 0; seg < dba_nsegs; seg++) { band += dba_offsets[seg]; if (band >= AC3_CRITICAL_BANDS || dba_lengths[seg] > AC3_CRITICAL_BANDS-band) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 396df87fed..015ebaebec 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -1173,8 +1173,8 @@ static int decode_audio_block(AC3DecodeContext *s, int blk) /* channel delta offset, len and bit allocation */ for (ch = !cpl_in_use; ch <= fbw_channels; ch++) { if (s->dba_mode[ch] == DBA_NEW) { - s->dba_nsegs[ch] = get_bits(gbc, 3); - for (seg = 0; seg <= s->dba_nsegs[ch]; seg++) { + s->dba_nsegs[ch] = get_bits(gbc, 3) + 1; + for (seg = 0; seg < s->dba_nsegs[ch]; seg++) { s->dba_offsets[ch][seg] = get_bits(gbc, 5); s->dba_lengths[ch][seg] = get_bits(gbc, 4); s->dba_values[ch][seg] = get_bits(gbc, 3); -- cgit v1.2.3