diff --git a/postproc/swscale.c b/postproc/swscale.c index e911a6467db08b89b8747df42b411dc95349b873..d46e6167dcbf01301a171f189ea0f21c1d91d679 100644 --- a/postproc/swscale.c +++ b/postproc/swscale.c @@ -1084,8 +1084,10 @@ static inline void initFilter(int16_t **outFilter, int16_t **filterPos, int *out for(i=0; i<dstW; i++) { int j; + double error=0; double sum=0; double scale= one; + for(j=0; j<filterSize; j++) { sum+= filter[i*filterSize + j]; @@ -1093,7 +1095,10 @@ static inline void initFilter(int16_t **outFilter, int16_t **filterPos, int *out scale/= sum; for(j=0; j<*outFilterSize; j++) { - (*outFilter)[i*(*outFilterSize) + j]= (int)(filter[i*filterSize + j]*scale + 0.5); + double v= filter[i*filterSize + j]*scale + error; + int intV= floor(v + 0.5); + (*outFilter)[i*(*outFilterSize) + j]= intV; + error = v - intV; } }