diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-09-04 19:49:13 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-09-04 19:49:13 +0000 |
commit | 7372e9bbe5380ee8c95464fc6f48cbd4939ac72b (patch) | |
tree | c48a3a626b80dc2b3b3fc285b2953cdf9ef41c9a /libswscale/rgb2rgb.c | |
parent | 6107059c2c571bbe158b97e2d20456f8e83f1754 (diff) | |
download | ffmpeg-7372e9bbe5380ee8c95464fc6f48cbd4939ac72b.tar.gz |
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.
Originally committed as revision 27519 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
Diffstat (limited to 'libswscale/rgb2rgb.c')
-rw-r--r-- | libswscale/rgb2rgb.c | 38 |
1 files changed, 10 insertions, 28 deletions
diff --git a/libswscale/rgb2rgb.c b/libswscale/rgb2rgb.c index 6f935e997a..e3ac5a6ace 100644 --- a/libswscale/rgb2rgb.c +++ b/libswscale/rgb2rgb.c @@ -416,13 +416,8 @@ void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size) 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, uint8_t *dst, long src_size) 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, uint8_t *dst, long src_size) 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, uint8_t *dst, long src_size) 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); } } |