changeset 9939:6c5a58b34997 libavcodec

Turn on AAC rate control.
author alexc
date Wed, 08 Jul 2009 23:04:22 +0000
parents 6c1ac45b3097
children 580fad942ae6
files aaccoder.c aacenc.c
diffstat 2 files changed, 6 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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,
     },
--- 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)