Originally committed as revision 23035 to svn://svn.ffmpeg.org/ffmpeg/trunk
Showing the changes to libavcodec/aaccoder.c (1 of 1 file). Show all
Unified · Split
| @@ -763,7 +763,7 @@ static void search_for_quantizers_faac(AVCodecContext *avctx, AACEncContext *s, · 762 unmodified lines | ||
| 763 | 763 | const float *scaled = s->scoefs + start; |
| 764 | 764 | const int size = sce->ics.swb_sizes[g]; |
| 765 | 765 | int scf, prev_scf, step; |
| 766 | − int min_scf = 0, max_scf = 255; | |
| 766 | + int min_scf = -1, max_scf = 256; | |
| 767 | 767 | float curdiff; |
| 768 | 768 | if (maxq[w*16+g] < 21.544) { |
| 769 | 769 | sce->zeroes[w*16+g] = 1; |
| @@ -797,21 +797,23 @@ static void search_for_quantizers_faac(AVCodecContext *avctx, AACEncContext *s, · 27 unmodified lines | ||
| 797 | 797 | } |
| 798 | 798 | prev_scf = scf; |
| 799 | 799 | curdiff = fabsf(dist - uplim[w*16+g]); |
| 800 | − if (curdiff == 0.0f) | |
| 800 | + if (curdiff <= 1.0f) | |
| 801 | 801 | step = 0; |
| 802 | 802 | else |
| 803 | − step = fabsf(log2(curdiff)); | |
| 803 | + step = log2(curdiff); | |
| 804 | 804 | if (dist > uplim[w*16+g]) |
| 805 | 805 | step = -step; |
| 806 | + scf += step; | |
| 807 | + av_clip_uint8(scf); | |
| 808 | + step = scf - prev_scf; | |
| 806 | 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 | 811 | break; |
| 809 | 812 | } |
| 810 | − scf += step; | |
| 811 | 813 | if (step > 0) |
| 812 | − min_scf = scf; | |
| 814 | + min_scf = prev_scf; | |
| 813 | 815 | else |
| 814 | − max_scf = scf; | |
| 816 | + max_scf = prev_scf; | |
| 815 | 817 | } |
| 816 | 818 | start += size; |
| 817 | 819 | } |