summaryrefslogtreecommitdiffstats
path: root/postproc
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-10-15 12:08:31 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-10-15 12:08:31 +0000
commitfa12a92799faca7a686dfc4dc778c7b700af31b4 (patch)
tree18cc8118b1b80d1843cc7c19362ff9f02f9d9617 /postproc
parentf9bb7a21e57d481ddeea4d27919ac37c7ea32bd1 (diff)
downloadmpv-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.c7
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;
}
}