diff options
author | michael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-10-15 12:08:31 +0000 |
---|---|---|
committer | michael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-10-15 12:08:31 +0000 |
commit | fa12a92799faca7a686dfc4dc778c7b700af31b4 (patch) | |
tree | 18cc8118b1b80d1843cc7c19362ff9f02f9d9617 /postproc | |
parent | f9bb7a21e57d481ddeea4d27919ac37c7ea32bd1 (diff) | |
download | mpv-fa12a92799faca7a686dfc4dc778c7b700af31b4.tar.bz2 mpv-fa12a92799faca7a686dfc4dc778c7b700af31b4.tar.xz |
dither scaling coefficients so they add up to 1.0
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11124 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'postproc')
-rw-r--r-- | postproc/swscale.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/postproc/swscale.c b/postproc/swscale.c index e911a6467d..d46e6167dc 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; } } |