minor QP bugfix
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 28 Jan 2002 22:38:15 +0000 (22:38 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 28 Jan 2002 22:38:15 +0000 (22:38 +0000)
Originally committed as revision 4400 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc

postproc/postprocess_template.c

index daf22cb..9191b0b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2001 Michael Niedermayer (michaelni@gmx.at)
+    Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -2587,7 +2587,7 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
           after watching a black picture for 5 hours*/
        static uint64_t *yHistogram= NULL;
        int black=0, white=255; // blackest black and whitest white in the picture
-       int QPCorrecture= 256;
+       int QPCorrecture= 256*256;
 
        /* Temporary buffers for handling the last row(s) */
        static uint8_t *tempDst= NULL;
@@ -2615,7 +2615,6 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
        long long memcpyTime=0, vertTime=0, horizTime=0, sumTime;
        sumTime= rdtsc();
 #endif
-
        dcOffset= ppMode->maxDcDiff;
        dcThreshold= ppMode->maxDcDiff*2 + 1;
 
@@ -2727,16 +2726,17 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
 
                packedYScale|= packedYScale<<32;
                packedYScale|= packedYScale<<16;
+               
+               if(mode & LEVEL_FIX)    QPCorrecture= (int)(scale*256*256 + 0.5);
+               else                    QPCorrecture= 256*256;
        }
        else
        {
                packedYScale= 0x0100010001000100LL;
                packedYOffset= 0;
+               QPCorrecture= 256*256;
        }
 
-       if(mode & LEVEL_FIX)    QPCorrecture= packedYScale &0xFFFF;
-       else                    QPCorrecture= 256;
-
        /* copy & deinterlace first row of blocks */
        y=-BLOCK_SIZE;
        {
@@ -2819,8 +2819,8 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
 #endif
 #ifdef ARCH_X86
                int *QPptr= isColor ? &QPs[(y>>3)*QPStride] :&QPs[(y>>4)*QPStride];
-               int QPDelta= isColor ? 1<<(32-3) : 1<<(32-4);
-               int QPFrac= QPDelta;
+               int QPDelta= isColor ? (-1) : 1<<31;
+               int QPFrac= 1<<30;
 #endif
                int QP=0;
                /* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards
@@ -2875,7 +2875,7 @@ static void RENAME(postProcess)(uint8_t src[], int srcStride, uint8_t dst[], int
 #endif
                        if(!isColor)
                        {
-                               QP= (QP* QPCorrecture)>>8;
+                               QP= (QP* QPCorrecture + 256*128)>>16;
                                yHistogram[ srcBlock[srcStride*12 + 4] ]++;
                        }
 #ifdef HAVE_MMX