Mercurial > libavcodec.hg
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]; |
