Commit 0bff58a5 authored by Justin Ruggles's avatar Justin Ruggles

make exponent decoding consistent (prepare for merging coupling and lfe code...

make exponent decoding consistent (prepare for merging coupling and lfe code with normal channel code).

Originally committed as revision 9904 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 0221ae8c
......@@ -697,12 +697,11 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
{
int nfchans = ctx->nfchans;
int acmod = ctx->acmod;
int i, bnd, seg, grpsize, ch;
int i, bnd, seg, ch;
GetBitContext *gb = &ctx->gb;
int bit_alloc_flags = 0;
int8_t *dexps;
int mstrcplco, cplcoexp, cplcomant;
int chbwcod, ngrps, cplabsexp, skipl;
int chbwcod, skipl;
for (i = 0; i < nfchans; i++) /*block switch flag */
ctx->blksw[i] = get_bits1(gb);
......@@ -827,28 +826,32 @@ static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
}
if (ctx->cplexpstr != EXP_REUSE) {/* coupling exponents */
int grpsize, ngrps, absexp;
bit_alloc_flags = 64;
cplabsexp = get_bits(gb, 4) << 1;
ngrps = (ctx->cplendmant - ctx->cplstrtmant) / (3 << (ctx->cplexpstr - 1));
decode_exponents(gb, ctx->cplexpstr, ngrps, cplabsexp, ctx->dcplexps + ctx->cplstrtmant);
grpsize = 3 << (ctx->cplexpstr - 1);
ngrps = (ctx->cplendmant - ctx->cplstrtmant) / grpsize;
absexp = get_bits(gb, 4) << 1;
decode_exponents(gb, ctx->cplexpstr, ngrps, absexp, &ctx->dcplexps[ctx->cplstrtmant]);
}
for (i = 0; i < nfchans; i++) { /* fbw channel exponents */
if (ctx->chexpstr[i] != EXP_REUSE) {
int grpsize, ngrps, absexp;
bit_alloc_flags |= 1 << i;
grpsize = 3 << (ctx->chexpstr[i] - 1);
ngrps = (ctx->endmant[i] + grpsize - 4) / grpsize;
dexps = ctx->dexps[i];
dexps[0] = get_bits(gb, 4);
decode_exponents(gb, ctx->chexpstr[i], ngrps, dexps[0], dexps + 1);
absexp = ctx->dexps[i][0] = get_bits(gb, 4);
decode_exponents(gb, ctx->chexpstr[i], ngrps, absexp, &ctx->dexps[i][1]);
skip_bits(gb, 2); /* skip gainrng */
}
}
if (ctx->lfeexpstr != EXP_REUSE) { /* lfe exponents */
int ngrps, absexp;
bit_alloc_flags |= 32;
ctx->dlfeexps[0] = get_bits(gb, 4);
decode_exponents(gb, ctx->lfeexpstr, 2, ctx->dlfeexps[0], ctx->dlfeexps + 1);
ngrps = 2;
absexp = ctx->dlfeexps[0] = get_bits(gb, 4);
decode_exponents(gb, ctx->lfeexpstr, ngrps, absexp, &ctx->dlfeexps[1]);
}
if (get_bits1(gb)) { /* bit allocation information */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment