fix normalization
Originally committed as revision 3203 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
23854cadec
commit
2b647ac8c9
@ -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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user