aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/ac3enc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2010-12-14 14:53:43 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2010-12-14 14:53:43 +0000
commit793bbf954430c7a5e3275a9f23ea83168067e463 (patch)
tree5b36962f6b18edd1277483ae9b18794803595ced /libavcodec/ac3enc.c
parent8999944ecbfeccd79510026992d6abef89c6efd4 (diff)
downloadffmpeg-793bbf954430c7a5e3275a9f23ea83168067e463.tar.gz
Split out setting of bit allocation parameters to a separate function.
Th new function only needs to be called at initialization because bit allocation parameters currently do not change during encoding. Originally committed as revision 26003 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r--libavcodec/ac3enc.c50
1 files changed, 32 insertions, 18 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 8ece91d764..98c0816aee 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -745,6 +745,37 @@ static int process_exponents(AC3EncodeContext *s,
/**
+ * Initialize bit allocation.
+ * Set default parameter codes and calculate parameter values.
+ */
+static void bit_alloc_init(AC3EncodeContext *s)
+{
+ int ch;
+
+ /* init default parameters */
+ s->slow_decay_code = 2;
+ s->fast_decay_code = 1;
+ s->slow_gain_code = 1;
+ s->db_per_bit_code = 2;
+ s->floor_code = 4;
+ for (ch = 0; ch < s->channels; ch++)
+ s->fast_gain_code[ch] = 4;
+
+ /* initial snr offset */
+ s->coarse_snr_offset = 40;
+
+ /* compute real values */
+ /* currently none of these values change during encoding, so we can just
+ set them once at initialization */
+ s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->bit_alloc.sr_shift;
+ s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->bit_alloc.sr_shift;
+ s->bit_alloc.slow_gain = ff_ac3_slow_gain_tab[s->slow_gain_code];
+ s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
+ s->bit_alloc.floor = ff_ac3_floor_tab[s->floor_code];
+}
+
+
+/**
* Count the bits used to encode the frame, minus exponents and mantissas.
* @return bit count
*/
@@ -936,22 +967,6 @@ static int compute_bit_allocation(AC3EncodeContext *s,
int16_t psd[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_MAX_COEFS];
int16_t mask[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS][AC3_CRITICAL_BANDS];
- /* init default parameters */
- s->slow_decay_code = 2;
- s->fast_decay_code = 1;
- s->slow_gain_code = 1;
- s->db_per_bit_code = 2;
- s->floor_code = 4;
- for (ch = 0; ch < s->channels; ch++)
- s->fast_gain_code[ch] = 4;
-
- /* compute real values */
- s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->bit_alloc.sr_shift;
- s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->bit_alloc.sr_shift;
- s->bit_alloc.slow_gain = ff_ac3_slow_gain_tab[s->slow_gain_code];
- s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
- s->bit_alloc.floor = ff_ac3_floor_tab[s->floor_code];
-
/* count frame bits other than exponents and mantissas */
frame_bits += count_frame_bits(s, exp_strategy);
@@ -1615,8 +1630,7 @@ static av_cold int ac3_encode_init(AVCodecContext *avctx)
set_bandwidth(s, avctx->cutoff);
- /* initial snr offset */
- s->coarse_snr_offset = 40;
+ bit_alloc_init(s);
mdct_init(9);