[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