comparison aaccoder.c @ 11730:5e8702ddbb93 libavcodec

aacenc: Use an estimated codebook for the TLS (two loop search).
author alexc
date Fri, 14 May 2010 16:49:30 +0000
parents 6f5bee041560
children 73f923159384
comparison
equal deleted inserted replaced
11729:6598cef880fc 11730:5e8702ddbb93
602 if (sce->zeroes[w*16+g] || sce->sf_idx[w*16+g] >= 218) { 602 if (sce->zeroes[w*16+g] || sce->sf_idx[w*16+g] >= 218) {
603 start += sce->ics.swb_sizes[g]; 603 start += sce->ics.swb_sizes[g];
604 continue; 604 continue;
605 } 605 }
606 minscaler = FFMIN(minscaler, sce->sf_idx[w*16+g]); 606 minscaler = FFMIN(minscaler, sce->sf_idx[w*16+g]);
607 for (cb = 0; cb <= ESC_BT; cb++) { 607 {
608 float dist = 0.0f; 608 float dist = 0.0f;
609 int bb = 0; 609 int bb = 0;
610 float maxval = 0.0f;
611 float Q = ff_aac_pow2sf_tab[200 - sce->sf_idx[w*16+g] + SCALE_ONE_POS - SCALE_DIV_512];
612 float Q34 = sqrtf(Q * sqrtf(Q));
613 int qmaxval;
614 for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
615 for (i = 0; i < sce->ics.swb_sizes[g]; i++) {
616 maxval = fmaxf(maxval, scaled[w2*128+i]);
617 }
618 }
619 qmaxval = maxval * Q34 + 0.4054;
620 if (qmaxval == 0) cb = 0;
621 else if (qmaxval == 1) cb = 1;
622 else if (qmaxval == 2) cb = 3;
623 else if (qmaxval <= 4) cb = 5;
624 else if (qmaxval <= 7) cb = 7;
625 else if (qmaxval <= 12) cb = 9;
626 else cb = 11;
610 for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) { 627 for (w2 = 0; w2 < sce->ics.group_len[w]; w2++) {
611 int b; 628 int b;
612 dist += quantize_band_cost(s, coefs + w2*128, 629 dist += quantize_band_cost(s, coefs + w2*128,
613 scaled + w2*128, 630 scaled + w2*128,
614 sce->ics.swb_sizes[g], 631 sce->ics.swb_sizes[g],
617 lambda, 634 lambda,
618 INFINITY, 635 INFINITY,
619 &b); 636 &b);
620 bb += b; 637 bb += b;
621 } 638 }
622 if (dist < mindist) {
623 mindist = dist; 639 mindist = dist;
624 minbits = bb; 640 minbits = bb;
625 }
626 } 641 }
627 dists[w*16+g] = (mindist - minbits) / lambda; 642 dists[w*16+g] = (mindist - minbits) / lambda;
628 bits = minbits; 643 bits = minbits;
629 if (prev != -1) { 644 if (prev != -1) {
630 bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO]; 645 bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO];