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