comparison aaccoder.c @ 11686:41a083a2527a libavcodec

Make the faac inspired quantizer search make sense for a slightly narrower definition of "make sense."
author alexc
date Thu, 06 May 2010 20:18:36 +0000
parents 7dd2a45249a9
children 6f5bee041560
comparison
equal deleted inserted replaced
11685:d3098fb8ec05 11686:41a083a2527a
761 for (g = 0; g < sce->ics.num_swb; g++) { 761 for (g = 0; g < sce->ics.num_swb; g++) {
762 const float *coefs = sce->coeffs + start; 762 const float *coefs = sce->coeffs + start;
763 const float *scaled = s->scoefs + start; 763 const float *scaled = s->scoefs + start;
764 const int size = sce->ics.swb_sizes[g]; 764 const int size = sce->ics.swb_sizes[g];
765 int scf, prev_scf, step; 765 int scf, prev_scf, step;
766 int min_scf = 0, max_scf = 255; 766 int min_scf = -1, max_scf = 256;
767 float curdiff; 767 float curdiff;
768 if (maxq[w*16+g] < 21.544) { 768 if (maxq[w*16+g] < 21.544) {
769 sce->zeroes[w*16+g] = 1; 769 sce->zeroes[w*16+g] = 1;
770 start += size; 770 start += size;
771 continue; 771 continue;
795 sce->sf_idx[w*16+g] = prev_scf; 795 sce->sf_idx[w*16+g] = prev_scf;
796 break; 796 break;
797 } 797 }
798 prev_scf = scf; 798 prev_scf = scf;
799 curdiff = fabsf(dist - uplim[w*16+g]); 799 curdiff = fabsf(dist - uplim[w*16+g]);
800 if (curdiff == 0.0f) 800 if (curdiff <= 1.0f)
801 step = 0; 801 step = 0;
802 else 802 else
803 step = fabsf(log2(curdiff)); 803 step = log2(curdiff);
804 if (dist > uplim[w*16+g]) 804 if (dist > uplim[w*16+g])
805 step = -step; 805 step = -step;
806 scf += step;
807 av_clip_uint8(scf);
808 step = scf - prev_scf;
806 if (FFABS(step) <= 1 || (step > 0 && scf >= max_scf) || (step < 0 && scf <= min_scf)) { 809 if (FFABS(step) <= 1 || (step > 0 && scf >= max_scf) || (step < 0 && scf <= min_scf)) {
807 sce->sf_idx[w*16+g] = scf; 810 sce->sf_idx[w*16+g] = av_clip(scf, min_scf, max_scf);
808 break; 811 break;
809 } 812 }
810 scf += step;
811 if (step > 0) 813 if (step > 0)
812 min_scf = scf; 814 min_scf = prev_scf;
813 else 815 else
814 max_scf = scf; 816 max_scf = prev_scf;
815 } 817 }
816 start += size; 818 start += size;
817 } 819 }
818 } 820 }
819 minq = sce->sf_idx[0] ? sce->sf_idx[0] : INT_MAX; 821 minq = sce->sf_idx[0] ? sce->sf_idx[0] : INT_MAX;