[FFmpeg-cvslog] ac3enc: split mantissa bit counting into a separate function.
Justin Ruggles
git at videolan.org
Sun May 29 03:46:46 CEST 2011
ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Thu May 26 12:31:31 2011 -0400| [1323828a0fbfa428d2e39a9f094039637b7fef5b] | committer: Justin Ruggles
ac3enc: split mantissa bit counting into a separate function.
No speed difference. This is to allow for more flexible bit counting.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1323828a0fbfa428d2e39a9f094039637b7fef5b
---
libavcodec/ac3enc.c | 49 +++++++++++++++++++++++++++++++------------------
1 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 1faafb6..6b9bd87 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);
}
More information about the ffmpeg-cvslog
mailing list