comparison ac3dec.c @ 5471:37c1944ca4ee libavcodec

make exponent decoding consistent (prepare for merging coupling and lfe code with normal channel code).
author jbr
date Sat, 04 Aug 2007 13:26:46 +0000
parents c427d8950769
children 11585a021898
comparison
equal deleted inserted replaced
5470:fea6732bc199 5471:37c1944ca4ee
695 */ 695 */
696 static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk) 696 static int ac3_parse_audio_block(AC3DecodeContext *ctx, int blk)
697 { 697 {
698 int nfchans = ctx->nfchans; 698 int nfchans = ctx->nfchans;
699 int acmod = ctx->acmod; 699 int acmod = ctx->acmod;
700 int i, bnd, seg, grpsize, ch; 700 int i, bnd, seg, ch;
701 GetBitContext *gb = &ctx->gb; 701 GetBitContext *gb = &ctx->gb;
702 int bit_alloc_flags = 0; 702 int bit_alloc_flags = 0;
703 int8_t *dexps;
704 int mstrcplco, cplcoexp, cplcomant; 703 int mstrcplco, cplcoexp, cplcomant;
705 int chbwcod, ngrps, cplabsexp, skipl; 704 int chbwcod, skipl;
706 705
707 for (i = 0; i < nfchans; i++) /*block switch flag */ 706 for (i = 0; i < nfchans; i++) /*block switch flag */
708 ctx->blksw[i] = get_bits1(gb); 707 ctx->blksw[i] = get_bits1(gb);
709 708
710 ctx->dither_all = 1; 709 ctx->dither_all = 1;
825 } 824 }
826 } 825 }
827 } 826 }
828 827
829 if (ctx->cplexpstr != EXP_REUSE) {/* coupling exponents */ 828 if (ctx->cplexpstr != EXP_REUSE) {/* coupling exponents */
829 int grpsize, ngrps, absexp;
830 bit_alloc_flags = 64; 830 bit_alloc_flags = 64;
831 cplabsexp = get_bits(gb, 4) << 1; 831 grpsize = 3 << (ctx->cplexpstr - 1);
832 ngrps = (ctx->cplendmant - ctx->cplstrtmant) / (3 << (ctx->cplexpstr - 1)); 832 ngrps = (ctx->cplendmant - ctx->cplstrtmant) / grpsize;
833 decode_exponents(gb, ctx->cplexpstr, ngrps, cplabsexp, ctx->dcplexps + ctx->cplstrtmant); 833 absexp = get_bits(gb, 4) << 1;
834 decode_exponents(gb, ctx->cplexpstr, ngrps, absexp, &ctx->dcplexps[ctx->cplstrtmant]);
834 } 835 }
835 836
836 for (i = 0; i < nfchans; i++) { /* fbw channel exponents */ 837 for (i = 0; i < nfchans; i++) { /* fbw channel exponents */
837 if (ctx->chexpstr[i] != EXP_REUSE) { 838 if (ctx->chexpstr[i] != EXP_REUSE) {
839 int grpsize, ngrps, absexp;
838 bit_alloc_flags |= 1 << i; 840 bit_alloc_flags |= 1 << i;
839 grpsize = 3 << (ctx->chexpstr[i] - 1); 841 grpsize = 3 << (ctx->chexpstr[i] - 1);
840 ngrps = (ctx->endmant[i] + grpsize - 4) / grpsize; 842 ngrps = (ctx->endmant[i] + grpsize - 4) / grpsize;
841 dexps = ctx->dexps[i]; 843 absexp = ctx->dexps[i][0] = get_bits(gb, 4);
842 dexps[0] = get_bits(gb, 4); 844 decode_exponents(gb, ctx->chexpstr[i], ngrps, absexp, &ctx->dexps[i][1]);
843 decode_exponents(gb, ctx->chexpstr[i], ngrps, dexps[0], dexps + 1);
844 skip_bits(gb, 2); /* skip gainrng */ 845 skip_bits(gb, 2); /* skip gainrng */
845 } 846 }
846 } 847 }
847 848
848 if (ctx->lfeexpstr != EXP_REUSE) { /* lfe exponents */ 849 if (ctx->lfeexpstr != EXP_REUSE) { /* lfe exponents */
850 int ngrps, absexp;
849 bit_alloc_flags |= 32; 851 bit_alloc_flags |= 32;
850 ctx->dlfeexps[0] = get_bits(gb, 4); 852 ngrps = 2;
851 decode_exponents(gb, ctx->lfeexpstr, 2, ctx->dlfeexps[0], ctx->dlfeexps + 1); 853 absexp = ctx->dlfeexps[0] = get_bits(gb, 4);
854 decode_exponents(gb, ctx->lfeexpstr, ngrps, absexp, &ctx->dlfeexps[1]);
852 } 855 }
853 856
854 if (get_bits1(gb)) { /* bit allocation information */ 857 if (get_bits1(gb)) { /* bit allocation information */
855 bit_alloc_flags = 127; 858 bit_alloc_flags = 127;
856 ctx->bit_alloc_params.sdecay = ff_sdecaytab[get_bits(gb, 2)]; 859 ctx->bit_alloc_params.sdecay = ff_sdecaytab[get_bits(gb, 2)];