comparison resample2.c @ 4694:f5fa13dfd3c8 libavcodec

remove dithering of filter coefficients, improves precision by 1-2 bits and improves subjective sound quality on artificial sample (udial.wav resampling to 32khz)
author michael
date Wed, 21 Mar 2007 22:02:52 +0000
parents a96d905dcbaa
children 8155dd60b50b
comparison
equal deleted inserted replaced
4693:86a2dfcc5eef 4694:f5fa13dfd3c8
91 if (factor > 1.0) 91 if (factor > 1.0)
92 factor = 1.0; 92 factor = 1.0;
93 93
94 for(ph=0;ph<phase_count;ph++) { 94 for(ph=0;ph<phase_count;ph++) {
95 double norm = 0; 95 double norm = 0;
96 double e= 0;
97 for(i=0;i<tap_count;i++) { 96 for(i=0;i<tap_count;i++) {
98 x = M_PI * ((double)(i - center) - (double)ph / phase_count) * factor; 97 x = M_PI * ((double)(i - center) - (double)ph / phase_count) * factor;
99 if (x == 0) y = 1.0; 98 if (x == 0) y = 1.0;
100 else y = sin(x) / x; 99 else y = sin(x) / x;
101 switch(type){ 100 switch(type){
119 norm += y; 118 norm += y;
120 } 119 }
121 120
122 /* normalize so that an uniform color remains the same */ 121 /* normalize so that an uniform color remains the same */
123 for(i=0;i<tap_count;i++) { 122 for(i=0;i<tap_count;i++) {
124 v = av_clip(lrintf(tab[i] * scale / norm + e), FELEM_MIN, FELEM_MAX); 123 v = av_clip(lrintf(tab[i] * scale / norm), FELEM_MIN, FELEM_MAX);
125 filter[ph * tap_count + i] = v; 124 filter[ph * tap_count + i] = v;
126 e += tab[i] * scale / norm - v;
127 } 125 }
128 } 126 }
129 } 127 }
130 128
131 /** 129 /**