Commit 2b647ac8 authored by Michael Niedermayer's avatar Michael Niedermayer

fix normalization

Originally committed as revision 3203 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 23854cad
...@@ -545,7 +545,7 @@ static void component_resample(ImgReSampleContext *s, ...@@ -545,7 +545,7 @@ static void component_resample(ImgReSampleContext *s,
static void build_filter(int16_t *filter, float factor) static void build_filter(int16_t *filter, float factor)
{ {
int ph, i, v; 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 upsampling, only need to interpolate, no filter */
if (factor > 1.0) if (factor > 1.0)
...@@ -571,10 +571,13 @@ static void build_filter(int16_t *filter, float factor) ...@@ -571,10 +571,13 @@ static void build_filter(int16_t *filter, float factor)
} }
/* normalize so that an uniform color remains the same */ /* 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++) { 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; filter[ph * NB_TAPS + i] = v;
norm -= tab[i];
target -= v;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment