# HG changeset patch # User jbr # Date 1186234006 0 # Node ID 37c1944ca4eedef3c2fce46bdde094777e49510c # Parent fea6732bc1995c5e0a9c0f3ef6e56fd7e62f7ec1 make exponent decoding consistent (prepare for merging coupling and lfe code with normal channel code). diff -r fea6732bc199 -r 37c1944ca4ee ac3dec.c --- a/ac3dec.c Sat Aug 04 13:26:29 2007 +0000 +++ b/ac3dec.c Sat Aug 04 13:26:46 2007 +0000 @@ -697,12 +697,11 @@ { 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 @@ } 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 */