[MPlayer-cvslog] r27519 - trunk/libswscale/rgb2rgb.c

michael subversion at mplayerhq.hu
Thu Sep 4 21:49:13 CEST 2008


Author: michael
Date: Thu Sep  4 21:49:13 2008
New Revision: 27519

Log:
Fix 4 of the unscaled rgb15/16 converters, each of these contained
2-3 bugs each of which made it fail completely, this code clearly
has never been tested and been written by somone who knows the
difference between a potato and a computer is that the first is round.


Modified:
   trunk/libswscale/rgb2rgb.c

Modified: trunk/libswscale/rgb2rgb.c
==============================================================================
--- trunk/libswscale/rgb2rgb.c	(original)
+++ trunk/libswscale/rgb2rgb.c	Thu Sep  4 21:49:13 2008
@@ -416,13 +416,8 @@ void rgb16tobgr16(const uint8_t *src, ui
 
     for (i=0; i<num_pixels; i++)
     {
-        unsigned b,g,r;
-        register uint16_t rgb;
-        rgb = src[2*i];
-        r = rgb&0x1F;
-        g = (rgb&0x7E0)>>5;
-        b = (rgb&0xF800)>>11;
-        dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11);
+        unsigned rgb = ((const uint16_t*)src)[i];
+        ((uint16_t*)dst)[i] = (rgb>>11) | (rgb&0x7E0) | (rgb<<11);
     }
 }
 
@@ -433,13 +428,8 @@ void rgb16tobgr15(const uint8_t *src, ui
 
     for (i=0; i<num_pixels; i++)
     {
-        unsigned b,g,r;
-        register uint16_t rgb;
-        rgb = src[2*i];
-        r = rgb&0x1F;
-        g = (rgb&0x7E0)>>5;
-        b = (rgb&0xF800)>>11;
-        dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10);
+        unsigned rgb = ((const uint16_t*)src)[i];
+        ((uint16_t*)dst)[i] = (rgb>>11) | ((rgb&0x7C0)>>1) | ((rgb&0x1F)<<10);
     }
 }
 
@@ -490,13 +480,8 @@ void rgb15tobgr16(const uint8_t *src, ui
 
     for (i=0; i<num_pixels; i++)
     {
-        unsigned b,g,r;
-        register uint16_t rgb;
-        rgb = src[2*i];
-        r = rgb&0x1F;
-        g = (rgb&0x3E0)>>5;
-        b = (rgb&0x7C00)>>10;
-        dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11);
+        unsigned rgb = ((const uint16_t*)src)[i];
+        ((uint16_t*)dst)[i] = ((rgb&0x7C00)>>10) | ((rgb&0x3E0)<<1) | (rgb<<11);
     }
 }
 
@@ -507,13 +492,10 @@ void rgb15tobgr15(const uint8_t *src, ui
 
     for (i=0; i<num_pixels; i++)
     {
-        unsigned b,g,r;
-        register uint16_t rgb;
-        rgb = src[2*i];
-        r = rgb&0x1F;
-        g = (rgb&0x3E0)>>5;
-        b = (rgb&0x7C00)>>10;
-        dst[2*i] = (b&0x1F) | ((g&0x1F)<<5) | ((r&0x1F)<<10);
+        unsigned br;
+        unsigned rgb = ((const uint16_t*)src)[i];
+        br = rgb&0x7c1F;
+        ((uint16_t*)dst)[i] = (br>>10) | (rgb&0x3E0) | (br<<10);
     }
 }
 



More information about the MPlayer-cvslog mailing list