diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2011-05-26 12:31:31 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2011-05-28 12:39:28 -0400 |
commit | 1323828a0fbfa428d2e39a9f094039637b7fef5b (patch) | |
tree | 7f84f10032e7f4a7d667fa1d80e3d64fd398da7d /libavcodec/ac3enc.c | |
parent | 7743865ffcb921a78a913b3de5a6d80248954d71 (diff) | |
download | ffmpeg-1323828a0fbfa428d2e39a9f094039637b7fef5b.tar.gz |
ac3enc: split mantissa bit counting into a separate function.
No speed difference. This is to allow for more flexible bit counting.
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r-- | libavcodec/ac3enc.c | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 1faafb61d6..6b9bd87853 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -1491,22 +1491,12 @@ static void reset_block_bap(AC3EncodeContext *s) } -/** - * Run the bit allocation with a given SNR offset. - * This calculates the bit allocation pointers that will be used to determine - * the quantization of each mantissa. - * @return the number of bits needed for mantissas if the given SNR offset is - * is used. - */ -static int bit_alloc(AC3EncodeContext *s, int snr_offset) +static int count_mantissa_bits(AC3EncodeContext *s) { int blk, ch; int mantissa_bits; int mant_cnt[5]; - snr_offset = (snr_offset - 240) << 2; - - reset_block_bap(s); mantissa_bits = 0; for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) { AC3Block *block = &s->blocks[blk]; @@ -1524,7 +1514,36 @@ static int bit_alloc(AC3EncodeContext *s, int snr_offset) ch = CPL_CH; got_cpl = 1; } + mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt, + s->ref_bap[ch][blk]+s->start_freq[ch], + block->end_freq[ch]-s->start_freq[ch]); + if (ch == CPL_CH) + ch = ch0; + } + mantissa_bits += compute_mantissa_size_final(mant_cnt); + } + return mantissa_bits; +} + +/** + * Run the bit allocation with a given SNR offset. + * This calculates the bit allocation pointers that will be used to determine + * the quantization of each mantissa. + * @return the number of bits needed for mantissas if the given SNR offset is + * is used. + */ +static int bit_alloc(AC3EncodeContext *s, int snr_offset) +{ + int blk, ch; + + snr_offset = (snr_offset - 240) << 2; + + reset_block_bap(s); + for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) { + AC3Block *block = &s->blocks[blk]; + + for (ch = !block->cpl_in_use; ch <= s->channels; ch++) { /* Currently the only bit allocation parameters which vary across blocks within a frame are the exponent values. We can take advantage of that by reusing the bit allocation pointers @@ -1535,15 +1554,9 @@ static int bit_alloc(AC3EncodeContext *s, int snr_offset) snr_offset, s->bit_alloc.floor, ff_ac3_bap_tab, s->ref_bap[ch][blk]); } - mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt, - s->ref_bap[ch][blk]+s->start_freq[ch], - block->end_freq[ch]-s->start_freq[ch]); - if (ch == CPL_CH) - ch = ch0; } - mantissa_bits += compute_mantissa_size_final(mant_cnt); } - return mantissa_bits; + return count_mantissa_bits(s); } |