[FFmpeg-cvslog] r19379 - in trunk/libavcodec: aaccoder.c aacenc.c

alexc subversion
Thu Jul 9 01:04:22 CEST 2009


Author: alexc
Date: Thu Jul  9 01:04:22 2009
New Revision: 19379

Log:
Turn on AAC rate control.

Modified:
   trunk/libavcodec/aaccoder.c
   trunk/libavcodec/aacenc.c

Modified: trunk/libavcodec/aaccoder.c
==============================================================================
--- trunk/libavcodec/aaccoder.c	Wed Jul  8 23:36:33 2009	(r19378)
+++ trunk/libavcodec/aaccoder.c	Thu Jul  9 01:04:22 2009	(r19379)
@@ -457,15 +457,6 @@ static void encode_window_bands_info(AAC
     }
 }
 
-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 @@ static void search_for_quantizers_twoloo
                                                        sce->ics.swb_sizes[g],
                                                        sce->sf_idx[w*16+g],
                                                        ESC_BT,
-                                                       1.0,
+                                                       lambda,
                                                        INFINITY,
                                                        &b);
                             bb += b;
@@ -710,7 +701,7 @@ static void search_for_quantizers_twoloo
                             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 @@ static void search_for_quantizers_faac(A
                                                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 @@ static void search_for_ms(AACEncContext 
 AACCoefficientsEncoder ff_aac_coders[] = {
     {
         search_for_quantizers_faac,
-        encode_window_bands_info_fixed,
+        encode_window_bands_info,
         quantize_and_encode_band,
 //        search_for_ms,
     },

Modified: trunk/libavcodec/aacenc.c
==============================================================================
--- trunk/libavcodec/aacenc.c	Wed Jul  8 23:36:33 2009	(r19378)
+++ trunk/libavcodec/aacenc.c	Thu Jul  9 01:04:22 2009	(r19379)
@@ -583,6 +583,7 @@ static int aac_encode_frame(AVCodecConte
     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)



More information about the ffmpeg-cvslog mailing list