comparison aaccoder.c @ 9939:6c5a58b34997 libavcodec

Turn on AAC rate control.
author alexc
date Wed, 08 Jul 2009 23:04:22 +0000
parents 6c1ac45b3097
children c5ca5e520fe1
comparison
equal deleted inserted replaced
9938:6c1ac45b3097 9939:6c5a58b34997
455 } 455 }
456 put_bits(&s->pb, run_bits, count); 456 put_bits(&s->pb, run_bits, count);
457 } 457 }
458 } 458 }
459 459
460 static void encode_window_bands_info_fixed(AACEncContext *s,
461 SingleChannelElement *sce,
462 int win, int group_len,
463 const float lambda)
464 {
465 encode_window_bands_info(s, sce, win, group_len, 1.0f);
466 }
467
468
469 typedef struct TrellisPath { 460 typedef struct TrellisPath {
470 float cost; 461 float cost;
471 int prev; 462 int prev;
472 int min_val; 463 int min_val;
473 int max_val; 464 int max_val;
698 dist += quantize_band_cost(s, coefs + w2*128, 689 dist += quantize_band_cost(s, coefs + w2*128,
699 scaled + w2*128, 690 scaled + w2*128,
700 sce->ics.swb_sizes[g], 691 sce->ics.swb_sizes[g],
701 sce->sf_idx[w*16+g], 692 sce->sf_idx[w*16+g],
702 ESC_BT, 693 ESC_BT,
703 1.0, 694 lambda,
704 INFINITY, 695 INFINITY,
705 &b); 696 &b);
706 bb += b; 697 bb += b;
707 } 698 }
708 if (dist < mindist) { 699 if (dist < mindist) {
709 mindist = dist; 700 mindist = dist;
710 minbits = bb; 701 minbits = bb;
711 } 702 }
712 } 703 }
713 dists[w*16+g] = mindist - minbits; 704 dists[w*16+g] = (mindist - minbits) / lambda;
714 bits = minbits; 705 bits = minbits;
715 if (prev != -1) { 706 if (prev != -1) {
716 bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO]; 707 bits += ff_aac_scalefactor_bits[sce->sf_idx[w*16+g] - prev + SCALE_DIFF_ZERO];
717 } 708 }
718 tbits += bits; 709 tbits += bits;
868 dist += quantize_band_cost(s, coefs + w2*128, 859 dist += quantize_band_cost(s, coefs + w2*128,
869 scaled + w2*128, 860 scaled + w2*128,
870 sce->ics.swb_sizes[g], 861 sce->ics.swb_sizes[g],
871 scf, 862 scf,
872 ESC_BT, 863 ESC_BT,
873 1.0, 864 lambda,
874 INFINITY, 865 INFINITY,
875 &b); 866 &b);
876 dist -= b; 867 dist -= b;
877 } 868 }
878 dist *= 1.0f/512.0f; 869 dist *= 1.0f / 512.0f / lambda;
879 quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[200 - scf + SCALE_ONE_POS - SCALE_DIV_512]); 870 quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[200 - scf + SCALE_ONE_POS - SCALE_DIV_512]);
880 if (quant_max >= 8191) { // too much, return to the previous quantizer 871 if (quant_max >= 8191) { // too much, return to the previous quantizer
881 sce->sf_idx[w*16+g] = prev_scf; 872 sce->sf_idx[w*16+g] = prev_scf;
882 break; 873 break;
883 } 874 }
1017 } 1008 }
1018 1009
1019 AACCoefficientsEncoder ff_aac_coders[] = { 1010 AACCoefficientsEncoder ff_aac_coders[] = {
1020 { 1011 {
1021 search_for_quantizers_faac, 1012 search_for_quantizers_faac,
1022 encode_window_bands_info_fixed, 1013 encode_window_bands_info,
1023 quantize_and_encode_band, 1014 quantize_and_encode_band,
1024 // search_for_ms, 1015 // search_for_ms,
1025 }, 1016 },
1026 { 1017 {
1027 search_for_quantizers_anmr, 1018 search_for_quantizers_anmr,