fix normalization
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 6 Jun 2004 20:15:53 +0000 (20:15 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 6 Jun 2004 20:15:53 +0000 (20:15 +0000)
Originally committed as revision 3203 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/imgresample.c

index dc5ccf9..da57ad7 100644 (file)
@@ -545,7 +545,7 @@ static void component_resample(ImgReSampleContext *s,
 static void build_filter(int16_t *filter, float factor)
 {
     int ph, i, v;
-    float x, y, tab[NB_TAPS], norm, mult;
+    float x, y, tab[NB_TAPS], norm, mult, target;
 
     /* if upsampling, only need to interpolate, no filter */
     if (factor > 1.0)
@@ -571,10 +571,13 @@ static void build_filter(int16_t *filter, float factor)
         }
 
         /* normalize so that an uniform color remains the same */
-        mult = (float)(1 << FILTER_BITS) / norm;
+        target= 1 << FILTER_BITS;
         for(i=0;i<NB_TAPS;i++) {
-            v = (int)(tab[i] * mult);
+            mult = target / norm;
+            v = lrintf(tab[i] * mult);
             filter[ph * NB_TAPS + i] = v;
+            norm -= tab[i];
+            target -= v;
         }
     }
 }