}
}
-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;
sce->ics.swb_sizes[g],
sce->sf_idx[w*16+g],
ESC_BT,
- 1.0,
+ lambda,
INFINITY,
&b);
bb += b;
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];
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;
AACCoefficientsEncoder ff_aac_coders[] = {
{
search_for_quantizers_faac,
- encode_window_bands_info_fixed,
+ encode_window_bands_info,
quantize_and_encode_band,
// search_for_ms,
},
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)