# HG changeset patch # User alexc # Date 1247094262 0 # Node ID 6c5a58b34997deea550aa84188f5fec380a92858 # Parent 6c1ac45b3097033940a68d41840e19aaebbcb089 Turn on AAC rate control. diff -r 6c1ac45b3097 -r 6c5a58b34997 aaccoder.c --- a/aaccoder.c Wed Jul 08 21:36:33 2009 +0000 +++ b/aaccoder.c Wed Jul 08 23:04:22 2009 +0000 @@ -457,15 +457,6 @@ } } -static void encode_window_bands_info_fixed(AACEncContext *s, - SingleChannelElement *sce, - int win, int group_len, - const float lambda) -{ - encode_window_bands_info(s, sce, win, group_len, 1.0f); -} - - typedef struct TrellisPath { float cost; int prev; @@ -700,7 +691,7 @@ sce->ics.swb_sizes[g], sce->sf_idx[w*16+g], ESC_BT, - 1.0, + lambda, INFINITY, &b); bb += b; @@ -710,7 +701,7 @@ minbits = bb; } } - dists[w*16+g] = mindist - minbits; + dists[w*16+g] = (mindist - minbits) / lambda; bits = minbits; if (prev != -1) { bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO]; @@ -870,12 +861,12 @@ sce->ics.swb_sizes[g], scf, ESC_BT, - 1.0, + lambda, INFINITY, &b); dist -= b; } - dist *= 1.0f/512.0f; + dist *= 1.0f / 512.0f / lambda; quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[200 - scf + SCALE_ONE_POS - SCALE_DIV_512]); if (quant_max >= 8191) { // too much, return to the previous quantizer sce->sf_idx[w*16+g] = prev_scf; @@ -1019,7 +1010,7 @@ AACCoefficientsEncoder ff_aac_coders[] = { { search_for_quantizers_faac, - encode_window_bands_info_fixed, + encode_window_bands_info, quantize_and_encode_band, // search_for_ms, }, diff -r 6c1ac45b3097 -r 6c5a58b34997 aacenc.c --- a/aacenc.c Wed Jul 08 21:36:33 2009 +0000 +++ b/aacenc.c Wed Jul 08 23:04:22 2009 +0000 @@ -583,6 +583,7 @@ if (!(avctx->flags & CODEC_FLAG_QSCALE)) { float ratio = avctx->bit_rate * 1024.0f / avctx->sample_rate / avctx->frame_bits; s->lambda *= ratio; + s->lambda = fminf(s->lambda, 65536.f); } if (avctx->frame_bits > 6144*avctx->channels)