fix full range (jpeg yuv) chroma
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 18 Mar 2007 12:31:53 +0000 (12:31 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 18 Mar 2007 12:31:53 +0000 (12:31 +0000)
Originally committed as revision 22713 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale

libswscale/swscale.c
libswscale/yuv2rgb.c
libswscale/yuv2rgb_init.c

index f034c54071feedfc7b306651388d10b692a1e2c0..f6a23425bf59d5cb9548f89d78d507a91d256bf8 100644 (file)
@@ -1876,7 +1876,12 @@ int sws_setColorspaceDetails(SwsContext *c, const int inv_table[4], int srcRange
        if(!srcRange){
                cy= (cy*255) / 219;
                oy= 16<<16;
        if(!srcRange){
                cy= (cy*255) / 219;
                oy= 16<<16;
-       }
+       }else{
+                crv= (crv*224) / 255;
+                cbu= (cbu*224) / 255;
+                cgu= (cgu*224) / 255;
+                cgv= (cgv*224) / 255;
+        }
 
        cy = (cy *contrast             )>>16;
        crv= (crv*contrast * saturation)>>32;
 
        cy = (cy *contrast             )>>16;
        crv= (crv*contrast * saturation)>>32;
index 3e81866498a81d7a0bf646d2405e41862b198908..af7f86f401f9b34440b4c27ca6249552d78882d8 100644 (file)
@@ -670,6 +670,11 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange,
     if(!fullRange){
        cy= (cy*255) / 219;
        oy= 16<<16;
     if(!fullRange){
        cy= (cy*255) / 219;
        oy= 16<<16;
+    }else{
+        crv= (crv*224) / 255;
+        cbu= (cbu*224) / 255;
+        cgu= (cgu*224) / 255;
+        cgv= (cgv*224) / 255;
     }
        
     cy = (cy *contrast             )>>16;
     }
        
     cy = (cy *contrast             )>>16;
index 14c46b0e40fe4ae0ddc2ce01563c51b105c176e4..371dce5da2d73368de3097e25428d39cbd0df339 100644 (file)
@@ -263,6 +263,11 @@ int yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], int fullRange,
     if (fullRange) {
         cy = 1 << 16;
         oy = 0;
     if (fullRange) {
         cy = 1 << 16;
         oy = 0;
+        crv= (crv*224) / 255;
+        cbu= (cbu*224) / 255;
+        cgu= (cgu*224) / 255;
+        cgv= (cgv*224) / 255;
+        //FIXME maybe its cleaner if the tables where based on full range (*244/255)
     } else {
         cy = ((1 << 16) * 255) / 219;
         oy= 16 << 16;
     } else {
         cy = ((1 << 16) * 255) / 219;
         oy= 16 << 16;