[Mplayerxp-cvslog] CVS: mplayerxp/mplayerxp/postproc rgb2rgb.c,1.9,1.10 rgb2rgb.h,1.7,1.8 rgb2rgb_te
Brought to you by:
olov
From: Nick K. <nic...@us...> - 2002-06-29 04:56:11
|
Update of /cvsroot/mplayerxp/mplayerxp/mplayerxp/postproc In directory usw-pr-cvs1:/tmp/cvs-serv11056 Modified Files: rgb2rgb.c rgb2rgb.h rgb2rgb_template.c swscale.c Log Message: almost all rgb2bgr convertors Index: rgb2rgb.c =================================================================== RCS file: /cvsroot/mplayerxp/mplayerxp/mplayerxp/postproc/rgb2rgb.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- rgb2rgb.c 27 Jun 2002 16:20:41 -0000 1.9 +++ rgb2rgb.c 29 Jun 2002 04:56:07 -0000 1.10 @@ -244,6 +244,20 @@ rgb15to16_C(src, dst, src_size); } +void rgb16to15(const uint8_t *src,uint8_t *dst,unsigned src_size) +{ +#ifdef CAN_COMPILE_X86_ASM + // ordered per speed fasterst first + if(gCpuCaps.hasMMX2) + rgb16to15_MMX2(src, dst, src_size); + else if(gCpuCaps.has3DNow) + rgb16to15_3DNow(src, dst, src_size); + else if(gCpuCaps.hasMMX) + rgb16to15_MMX(src, dst, src_size); + else +#endif + rgb16to15_C(src, dst, src_size); +} /** * Pallete is assumed to contain bgr32 */ @@ -370,31 +384,46 @@ rgb32tobgr32_C(src, dst, src_size); } -void rgb24tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) +void rgb32tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + unsigned i; + unsigned num_pixels = src_size >> 2; + for(i=0; i<num_pixels; i++) + { + dst[3*i + 0] = src[4*i + 2]; + dst[3*i + 1] = src[4*i + 1]; + dst[3*i + 2] = src[4*i + 0]; + } +} + +void rgb32tobgr16(const uint8_t *src, uint8_t *dst, unsigned int src_size) { #ifdef CAN_COMPILE_X86_ASM // ordered per speed fasterst first if(gCpuCaps.hasMMX2) - rgb24tobgr24_MMX2(src, dst, src_size); + rgb32tobgr16_MMX2(src, dst, src_size); else if(gCpuCaps.has3DNow) - rgb24tobgr24_3DNow(src, dst, src_size); + rgb32tobgr16_3DNow(src, dst, src_size); else if(gCpuCaps.hasMMX) - rgb24tobgr24_MMX(src, dst, src_size); + rgb32tobgr16_MMX(src, dst, src_size); else #endif - rgb24tobgr24_C(src, dst, src_size); + rgb32tobgr16_C(src, dst, src_size); } -void rgb32tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) +void rgb32tobgr15(const uint8_t *src, uint8_t *dst, unsigned int src_size) { - unsigned i; - unsigned num_pixels = src_size >> 2; - for(i=0; i<num_pixels; i++) - { - dst[3*i + 0] = src[4*i + 2]; - dst[3*i + 1] = src[4*i + 1]; - dst[3*i + 2] = src[4*i + 0]; - } +#ifdef CAN_COMPILE_X86_ASM + // ordered per speed fasterst first + if(gCpuCaps.hasMMX2) + rgb32tobgr15_MMX2(src, dst, src_size); + else if(gCpuCaps.has3DNow) + rgb32tobgr15_3DNow(src, dst, src_size); + else if(gCpuCaps.hasMMX) + rgb32tobgr15_MMX(src, dst, src_size); + else +#endif + rgb32tobgr15_C(src, dst, src_size); } void rgb24tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size) @@ -410,6 +439,84 @@ } } +void rgb24tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ +#ifdef CAN_COMPILE_X86_ASM + // ordered per speed fasterst first + if(gCpuCaps.hasMMX2) + rgb24tobgr24_MMX2(src, dst, src_size); + else if(gCpuCaps.has3DNow) + rgb24tobgr24_3DNow(src, dst, src_size); + else if(gCpuCaps.hasMMX) + rgb24tobgr24_MMX(src, dst, src_size); + else +#endif + rgb24tobgr24_C(src, dst, src_size); +} + +void rgb24tobgr16(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ +#ifdef CAN_COMPILE_X86_ASM + // ordered per speed fasterst first + if(gCpuCaps.hasMMX2) + rgb24tobgr16_MMX2(src, dst, src_size); + else if(gCpuCaps.has3DNow) + rgb24tobgr16_3DNow(src, dst, src_size); + else if(gCpuCaps.hasMMX) + rgb24tobgr16_MMX(src, dst, src_size); + else +#endif + rgb24tobgr16_C(src, dst, src_size); +} + +void rgb24tobgr15(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ +#ifdef CAN_COMPILE_X86_ASM + // ordered per speed fasterst first + if(gCpuCaps.hasMMX2) + rgb24tobgr15_MMX2(src, dst, src_size); + else if(gCpuCaps.has3DNow) + rgb24tobgr15_3DNow(src, dst, src_size); + else if(gCpuCaps.hasMMX) + rgb24tobgr15_MMX(src, dst, src_size); + else +#endif + rgb24tobgr15_C(src, dst, src_size); +} + +void rgb16tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + const uint16_t *end; + uint8_t *d = (uint8_t *)dst; + const uint16_t *s = (uint16_t *)src; + end = s + src_size/2; + while(s < end) + { + register uint16_t bgr; + bgr = *s++; + *d++ = (bgr&0xF800)>>8; + *d++ = (bgr&0x7E0)>>3; + *d++ = (bgr&0x1F)<<3; + *d++ = 0; + } +} + +void rgb16tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + const uint16_t *end; + uint8_t *d = (uint8_t *)dst; + const uint16_t *s = (const uint16_t *)src; + end = s + src_size/2; + while(s < end) + { + register uint16_t bgr; + bgr = *s++; + *d++ = (bgr&0xF800)>>8; + *d++ = (bgr&0x7E0)>>3; + *d++ = (bgr&0x1F)<<3; + } +} + void rgb16tobgr16(const uint8_t *src, uint8_t *dst, unsigned int src_size) { unsigned i; @@ -423,6 +530,73 @@ r = rgb&0x1F; g = (rgb&0x7E0)>>5; b = (rgb&0xF800)>>11; + dst[2*i] = (b&0x1F) | ((g&0x3F)<<5) | ((r&0x1F)<<11); + } +} + +void rgb16tobgr15(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + unsigned i; + unsigned num_pixels = src_size >> 1; + + 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); + } +} + +void rgb15tobgr32(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + const uint16_t *end; + uint8_t *d = (uint8_t *)dst; + const uint16_t *s = (const uint16_t *)src; + end = s + src_size/2; + while(s < end) + { + register uint16_t bgr; + bgr = *s++; + *d++ = (bgr&0x7C00)>>7; + *d++ = (bgr&0x3E0)>>2; + *d++ = (bgr&0x1F)<<3; + *d++ = 0; + } +} + +void rgb15tobgr24(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + const uint16_t *end; + uint8_t *d = (uint8_t *)dst; + const uint16_t *s = (uint16_t *)src; + end = s + src_size/2; + while(s < end) + { + register uint16_t bgr; + bgr = *s++; + *d++ = (bgr&0x7C00)>>7; + *d++ = (bgr&0x3E0)>>2; + *d++ = (bgr&0x1F)<<3; + } +} + +void rgb15tobgr16(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + unsigned i; + unsigned num_pixels = src_size >> 1; + + 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); } } Index: rgb2rgb.h =================================================================== RCS file: /cvsroot/mplayerxp/mplayerxp/mplayerxp/postproc/rgb2rgb.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- rgb2rgb.h 27 Jun 2002 16:20:41 -0000 1.7 +++ rgb2rgb.h 29 Jun 2002 04:56:07 -0000 1.8 @@ -9,6 +9,7 @@ #ifndef RGB2RGB_INCLUDED #define RGB2RGB_INCLUDED +/* A full collection of rgb to rgb(bgr) convertors */ extern void rgb24to32(const uint8_t *src,uint8_t *dst,unsigned src_size); extern void rgb24to16(const uint8_t *src,uint8_t *dst,unsigned src_size); extern void rgb24to15(const uint8_t *src,uint8_t *dst,unsigned src_size); @@ -18,13 +19,24 @@ extern void rgb15to16(const uint8_t *src,uint8_t *dst,unsigned src_size); extern void rgb15to24(const uint8_t *src,uint8_t *dst,unsigned src_size); extern void rgb15to32(const uint8_t *src,uint8_t *dst,unsigned src_size); +extern void rgb16to15(const uint8_t *src,uint8_t *dst,unsigned src_size); extern void rgb16to24(const uint8_t *src,uint8_t *dst,unsigned src_size); extern void rgb16to32(const uint8_t *src,uint8_t *dst,unsigned src_size); -extern void rgb32tobgr32(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb24tobgr32(const uint8_t *src, uint8_t *dst, unsigned src_size); extern void rgb24tobgr24(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb24tobgr16(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb24tobgr15(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb32tobgr32(const uint8_t *src, uint8_t *dst, unsigned src_size); extern void rgb32tobgr24(const uint8_t *src, uint8_t *dst, unsigned src_size); -extern void rgb24tobgr32(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb32tobgr16(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb32tobgr15(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb16tobgr32(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb16tobgr24(const uint8_t *src, uint8_t *dst, unsigned src_size); extern void rgb16tobgr16(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb16tobgr15(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb15tobgr32(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb15tobgr24(const uint8_t *src, uint8_t *dst, unsigned src_size); +extern void rgb15tobgr16(const uint8_t *src, uint8_t *dst, unsigned src_size); extern void rgb15tobgr15(const uint8_t *src, uint8_t *dst, unsigned src_size); extern void rgb8tobgr8(const uint8_t *src, uint8_t *dst, unsigned src_size); Index: rgb2rgb_template.c =================================================================== RCS file: /cvsroot/mplayerxp/mplayerxp/mplayerxp/postproc/rgb2rgb_template.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- rgb2rgb_template.c 25 Jun 2002 15:54:08 -0000 1.14 +++ rgb2rgb_template.c 29 Jun 2002 04:56:07 -0000 1.15 @@ -240,6 +240,61 @@ } } +static inline void RENAME(rgb16to15)(const uint8_t *src,uint8_t *dst,unsigned src_size) +{ + register const uint8_t* s=src; + register uint8_t* d=dst; + register const uint8_t *end; + uint8_t *mm_end; + end = s + src_size; +#ifdef HAVE_MMX + __asm __volatile(PREFETCH" %0"::"m"(*s)); + __asm __volatile("movq %0, %%mm7"::"m"(mask15rg)); + __asm __volatile("movq %0, %%mm6"::"m"(mask15b)); + mm_end = (uint8_t*)((((unsigned long)end)/16)*16); + while(s<mm_end) + { + __asm __volatile( + PREFETCH" 32%1\n\t" + "movq %1, %%mm0\n\t" + "movq 8%1, %%mm2\n\t" + "movq %%mm0, %%mm1\n\t" + "movq %%mm2, %%mm3\n\t" + "psrlq $1, %%mm0\n\t" + "psrlq $1, %%mm2\n\t" + "pand %%mm7, %%mm0\n\t" + "pand %%mm7, %%mm2\n\t" + "pand %%mm6, %%mm1\n\t" + "pand %%mm6, %%mm3\n\t" + "por %%mm1, %%mm0\n\t" + "por %%mm3, %%mm2\n\t" + MOVNTQ" %%mm0, %0\n\t" + MOVNTQ" %%mm2, 8%0" + :"=m"(*d) + :"m"(*s) + ); + d+=16; + s+=16; + } + __asm __volatile(SFENCE:::"memory"); + __asm __volatile(EMMS:::"memory"); +#endif + while(s < end) + { + register uint32_t x= *((uint32_t *)s); + *((uint32_t *)d) = ((x>>1)&0x7FE07FE0) | (x&0x001F001F); + s+=4; + d+=4; + } + if(s < end) + { + register uint16_t x= *((uint16_t *)s); + *((uint16_t *)d) = ((x>>1)&0x7FE0) | (x&0x001F); + s+=2; + d+=2; + } +} + static inline void RENAME(rgb32to16)(const uint8_t *src, uint8_t *dst, unsigned src_size) { const uint8_t *s = src; @@ -304,6 +359,70 @@ } } +static inline void RENAME(rgb32tobgr16)(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + const uint8_t *s = src; + const uint8_t *end; +#ifdef HAVE_MMX + const uint8_t *mm_end; +#endif + uint16_t *d = (uint16_t *)dst; + end = s + src_size; +#ifdef HAVE_MMX + __asm __volatile(PREFETCH" %0"::"m"(*src):"memory"); + __asm __volatile( + "movq %0, %%mm7\n\t" + "movq %1, %%mm6\n\t" + ::"m"(red_16mask),"m"(green_16mask)); + mm_end = (uint8_t*)((((unsigned long)end)/16)*16); + while(s < mm_end) + { + __asm __volatile( + PREFETCH" 32%1\n\t" + "movd %1, %%mm0\n\t" + "movd 4%1, %%mm3\n\t" + "punpckldq 8%1, %%mm0\n\t" + "punpckldq 12%1, %%mm3\n\t" + "movq %%mm0, %%mm1\n\t" + "movq %%mm0, %%mm2\n\t" + "movq %%mm3, %%mm4\n\t" + "movq %%mm3, %%mm5\n\t" + "psllq $8, %%mm0\n\t" + "psllq $8, %%mm3\n\t" + "pand %%mm7, %%mm0\n\t" + "pand %%mm7, %%mm3\n\t" + "psrlq $5, %%mm1\n\t" + "psrlq $5, %%mm4\n\t" + "pand %%mm6, %%mm1\n\t" + "pand %%mm6, %%mm4\n\t" + "psrlq $19, %%mm2\n\t" + "psrlq $19, %%mm5\n\t" + "pand %2, %%mm2\n\t" + "pand %2, %%mm5\n\t" + "por %%mm1, %%mm0\n\t" + "por %%mm4, %%mm3\n\t" + "por %%mm2, %%mm0\n\t" + "por %%mm5, %%mm3\n\t" + "psllq $16, %%mm3\n\t" + "por %%mm3, %%mm0\n\t" + MOVNTQ" %%mm0, %0\n\t" + :"=m"(*d):"m"(*s),"m"(blue_16mask):"memory"); + d += 4; + s += 16; + } + __asm __volatile(SFENCE:::"memory"); + __asm __volatile(EMMS:::"memory"); +#endif + while(s < end) + { + const int r= *s++; + const int g= *s++; + const int b= *s++; + *d++ = (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8); + s++; + } +} + static inline void RENAME(rgb32to15)(const uint8_t *src, uint8_t *dst, unsigned src_size) { const uint8_t *s = src; @@ -368,6 +487,70 @@ } } +static inline void RENAME(rgb32tobgr15)(const uint8_t *src, uint8_t *dst, unsigned src_size) +{ + const uint8_t *s = src; + const uint8_t *end; +#ifdef HAVE_MMX + const uint8_t *mm_end; +#endif + uint16_t *d = (uint16_t *)dst; + end = s + src_size; +#ifdef HAVE_MMX + __asm __volatile(PREFETCH" %0"::"m"(*src):"memory"); + __asm __volatile( + "movq %0, %%mm7\n\t" + "movq %1, %%mm6\n\t" + ::"m"(red_15mask),"m"(green_15mask)); + mm_end = (uint8_t*)((((unsigned long)end)/16)*16); + while(s < mm_end) + { + __asm __volatile( + PREFETCH" 32%1\n\t" + "movd %1, %%mm0\n\t" + "movd 4%1, %%mm3\n\t" + "punpckldq 8%1, %%mm0\n\t" + "punpckldq 12%1, %%mm3\n\t" + "movq %%mm0, %%mm1\n\t" + "movq %%mm0, %%mm2\n\t" + "movq %%mm3, %%mm4\n\t" + "movq %%mm3, %%mm5\n\t" + "psllq $7, %%mm0\n\t" + "psllq $7, %%mm3\n\t" + "pand %%mm7, %%mm0\n\t" + "pand %%mm7, %%mm3\n\t" + "psrlq $6, %%mm1\n\t" + "psrlq $6, %%mm4\n\t" + "pand %%mm6, %%mm1\n\t" + "pand %%mm6, %%mm4\n\t" + "psrlq $19, %%mm2\n\t" + "psrlq $19, %%mm5\n\t" + "pand %2, %%mm2\n\t" + "pand %2, %%mm5\n\t" + "por %%mm1, %%mm0\n\t" + "por %%mm4, %%mm3\n\t" + "por %%mm2, %%mm0\n\t" + "por %%mm5, %%mm3\n\t" + "psllq $16, %%mm3\n\t" + "por %%mm3, %%mm0\n\t" + MOVNTQ" %%mm0, %0\n\t" + :"=m"(*d):"m"(*s),"m"(blue_15mask):"memory"); + d += 4; + s += 16; + } + __asm __volatile(SFENCE:::"memory"); + __asm __volatile(EMMS:::"memory"); +#endif + while(s < end) + { + const int r= *s++; + const int g= *s++; + const int b= *s++; + *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7); + s++; + } +} + static inline void RENAME(rgb24to16)(const uint8_t *src, uint8_t *dst, unsigned src_size) { const uint8_t *s = src; @@ -431,6 +614,69 @@ } } +static inline void RENAME(rgb24tobgr16)(const uint8_t *src, uint8_t *dst, unsigned int src_size) +{ + const uint8_t *s = src; + const uint8_t *end; +#ifdef HAVE_MMX + const uint8_t *mm_end; +#endif + uint16_t *d = (uint16_t *)dst; + end = s + src_size; +#ifdef HAVE_MMX + __asm __volatile(PREFETCH" %0"::"m"(*src):"memory"); + __asm __volatile( + "movq %0, %%mm7\n\t" + "movq %1, %%mm6\n\t" + ::"m"(red_16mask),"m"(green_16mask)); + mm_end = (uint8_t*)((((unsigned long)end)/16)*16); + while(s < mm_end) + { + __asm __volatile( + PREFETCH" 32%1\n\t" + "movd %1, %%mm0\n\t" + "movd 3%1, %%mm3\n\t" + "punpckldq 6%1, %%mm0\n\t" + "punpckldq 9%1, %%mm3\n\t" + "movq %%mm0, %%mm1\n\t" + "movq %%mm0, %%mm2\n\t" + "movq %%mm3, %%mm4\n\t" + "movq %%mm3, %%mm5\n\t" + "psllq $8, %%mm0\n\t" + "psllq $8, %%mm3\n\t" + "pand %%mm7, %%mm0\n\t" + "pand %%mm7, %%mm3\n\t" + "psrlq $5, %%mm1\n\t" + "psrlq $5, %%mm4\n\t" + "pand %%mm6, %%mm1\n\t" + "pand %%mm6, %%mm4\n\t" + "psrlq $19, %%mm2\n\t" + "psrlq $19, %%mm5\n\t" + "pand %2, %%mm2\n\t" + "pand %2, %%mm5\n\t" + "por %%mm1, %%mm0\n\t" + "por %%mm4, %%mm3\n\t" + "por %%mm2, %%mm0\n\t" + "por %%mm5, %%mm3\n\t" + "psllq $16, %%mm3\n\t" + "por %%mm3, %%mm0\n\t" + MOVNTQ" %%mm0, %0\n\t" + :"=m"(*d):"m"(*s),"m"(blue_16mask):"memory"); + d += 4; + s += 12; + } + __asm __volatile(SFENCE:::"memory"); + __asm __volatile(EMMS:::"memory"); +#endif + while(s < end) + { + const int r= *s++; + const int g= *s++; + const int b= *s++; + *d++ = (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8); + } +} + static inline void RENAME(rgb24to15)(const uint8_t *src, uint8_t *dst, unsigned src_size) { const uint8_t *s = src; @@ -490,6 +736,69 @@ const int b= *s++; const int g= *s++; const int r= *s++; + *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7); + } +} + +static inline void RENAME(rgb24tobgr15)(const uint8_t *src, uint8_t *dst, unsigned src_size) +{ + const uint8_t *s = src; + const uint8_t *end; +#ifdef HAVE_MMX + const uint8_t *mm_end; +#endif + uint16_t *d = (uint16_t *)dst; + end = s + src_size; +#ifdef HAVE_MMX + __asm __volatile(PREFETCH" %0"::"m"(*src):"memory"); + __asm __volatile( + "movq %0, %%mm7\n\t" + "movq %1, %%mm6\n\t" + ::"m"(red_15mask),"m"(green_15mask)); + mm_end = (uint8_t*)((((unsigned long)end)/16)*16); + while(s < mm_end) + { + __asm __volatile( + PREFETCH" 32%1\n\t" + "movd %1, %%mm0\n\t" + "movd 3%1, %%mm3\n\t" + "punpckldq 6%1, %%mm0\n\t" + "punpckldq 9%1, %%mm3\n\t" + "movq %%mm0, %%mm1\n\t" + "movq %%mm0, %%mm2\n\t" + "movq %%mm3, %%mm4\n\t" + "movq %%mm3, %%mm5\n\t" + "psllq $7, %%mm0\n\t" + "psllq $7, %%mm3\n\t" + "pand %%mm7, %%mm0\n\t" + "pand %%mm7, %%mm3\n\t" + "psrlq $6, %%mm1\n\t" + "psrlq $6, %%mm4\n\t" + "pand %%mm6, %%mm1\n\t" + "pand %%mm6, %%mm4\n\t" + "psrlq $19, %%mm2\n\t" + "psrlq $19, %%mm5\n\t" + "pand %2, %%mm2\n\t" + "pand %2, %%mm5\n\t" + "por %%mm1, %%mm0\n\t" + "por %%mm4, %%mm3\n\t" + "por %%mm2, %%mm0\n\t" + "por %%mm5, %%mm3\n\t" + "psllq $16, %%mm3\n\t" + "por %%mm3, %%mm0\n\t" + MOVNTQ" %%mm0, %0\n\t" + :"=m"(*d):"m"(*s),"m"(blue_15mask):"memory"); + d += 4; + s += 12; + } + __asm __volatile(SFENCE:::"memory"); + __asm __volatile(EMMS:::"memory"); +#endif + while(s < end) + { + const int r= *s++; + const int g= *s++; + const int b= *s++; *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7); } } Index: swscale.c =================================================================== RCS file: /cvsroot/mplayerxp/mplayerxp/mplayerxp/postproc/swscale.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- swscale.c 27 Jun 2002 16:20:42 -0000 1.13 +++ swscale.c 29 Jun 2002 04:56:07 -0000 1.14 @@ -1484,6 +1484,26 @@ } } +static void bgr16to15Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]==srcStride[0]) + rgb16to15(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb16to15(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + static void bgr15to24Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]){ @@ -1604,11 +1624,11 @@ } } -static void rgb32tobgr24Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, +static void rgb16tobgr16Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]){ - if(dstStride[0]*4==srcStride[0]*3) - rgb32tobgr24(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + if(dstStride[0]*2==srcStride[0]*2) + rgb16tobgr16(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; @@ -1617,7 +1637,47 @@ for(i=0; i<srcSliceH; i++) { - rgb32tobgr24(srcPtr, dstPtr, c->srcW*3); + rgb16tobgr16(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb15tobgr15Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*2==srcStride[0]*2) + rgb15tobgr15(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb15tobgr15(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb8tobgr8Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]==srcStride[0]) + rgb8tobgr8(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb8tobgr8(srcPtr, dstPtr, c->srcW); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } @@ -1637,18 +1697,18 @@ for(i=0; i<srcSliceH; i++) { - rgb24tobgr32(srcPtr, dstPtr, c->srcW<<2); + rgb24tobgr32(srcPtr, dstPtr, c->srcW*3); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } } } -static void rgb16tobgr16Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, +static void rgb24tobgr16Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]){ - if(dstStride[0]*2==srcStride[0]*2) - rgb16tobgr16(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + if(dstStride[0]*3==srcStride[0]*2) + rgb24tobgr16(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; @@ -1657,18 +1717,18 @@ for(i=0; i<srcSliceH; i++) { - rgb16tobgr16(srcPtr, dstPtr, c->srcW<<1); + rgb24tobgr16(srcPtr, dstPtr, c->srcW*3); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } } } -static void rgb15tobgr15Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, +static void rgb24tobgr15Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]){ - if(dstStride[0]*2==srcStride[0]*2) - rgb15tobgr15(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + if(dstStride[0]*3==srcStride[0]*2) + rgb24tobgr15(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; @@ -1677,18 +1737,78 @@ for(i=0; i<srcSliceH; i++) { - rgb15tobgr15(srcPtr, dstPtr, c->srcW<<1); + rgb24tobgr15(srcPtr, dstPtr, c->srcW*3); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } } } -static void rgb8tobgr8Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, +static void rgb32tobgr24Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*4==srcStride[0]*3) + rgb32tobgr24(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb32tobgr24(srcPtr, dstPtr, c->srcW<<2); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb32tobgr16Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*4==srcStride[0]*2) + rgb32tobgr16(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb32tobgr16(srcPtr, dstPtr, c->srcW<<2); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb32tobgr15Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*4==srcStride[0]*2) + rgb32tobgr15(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb32tobgr15(srcPtr, dstPtr, c->srcW<<2); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb15tobgr16Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]){ if(dstStride[0]==srcStride[0]) - rgb8tobgr8(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + rgb15tobgr16(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); else { int i; @@ -1697,13 +1817,114 @@ for(i=0; i<srcSliceH; i++) { - rgb8tobgr8(srcPtr, dstPtr, c->srcW); + rgb15tobgr16(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb16tobgr15Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]==srcStride[0]) + rgb16tobgr15(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb16tobgr15(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb15tobgr24Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*2==srcStride[0]*3) + rgb15tobgr24(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb15tobgr24(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb15tobgr32Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*2==srcStride[0]*4) + rgb15tobgr32(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb15tobgr32(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb16tobgr24Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*2==srcStride[0]*3) + rgb16tobgr24(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb16tobgr24(srcPtr, dstPtr, c->srcW<<1); + srcPtr+= srcStride[0]; + dstPtr+= dstStride[0]; + } + } +} + +static void rgb16tobgr32Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, + int srcSliceH, uint8_t* dst[], int dstStride[]){ + + if(dstStride[0]*2==srcStride[0]*4) + rgb16tobgr32(src[0], dst[0] + dstStride[0]*srcSliceY, srcSliceH*srcStride[0]); + else + { + int i; + uint8_t *srcPtr= src[0]; + uint8_t *dstPtr= dst[0] + dstStride[0]*srcSliceY; + + for(i=0; i<srcSliceH; i++) + { + rgb16tobgr32(srcPtr, dstPtr, c->srcW<<1); srcPtr+= srcStride[0]; dstPtr+= dstStride[0]; } } } + static void bgr24toyv12Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]){ @@ -2007,6 +2228,18 @@ return c; } + /* rgb32tobgr24 */ + if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_RGB24) + ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_BGR24)) + { + c->swScale= rgb32tobgr24Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr32to16 & rgb32to16*/ if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_BGR16) ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_RGB16)) @@ -2019,6 +2252,18 @@ return c; } + /* rgb32tobgr16 */ + if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_RGB16) + ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_BGR16)) + { + c->swScale= rgb32tobgr16Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr32to15 & rgb32to15*/ if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_BGR15) ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_RGB15)) @@ -2030,6 +2275,18 @@ vo_format_name(srcFormat), vo_format_name(dstFormat)); return c; } + + /* rgb32tobgr15 */ + if((srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_RGB15) + ||(srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_BGR15)) + { + c->swScale= rgb32tobgr15Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } /* bgr24to32 & rgb24to32*/ if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_BGR32) @@ -2043,6 +2300,18 @@ return c; } + /* rgb24tobgr32 */ + if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_RGB32) + ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_BGR32)) + { + c->swScale= rgb24tobgr32Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr24to16 & rgb24to16*/ if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_BGR16) ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_RGB16)) @@ -2055,6 +2324,18 @@ return c; } + /* rgb24tobgr16 */ + if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_RGB16) + ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_BGR16)) + { + c->swScale= rgb24tobgr16Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr24to15 & rgb24to15*/ if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_BGR15) ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_RGB15)) @@ -2067,8 +2348,21 @@ return c; } + /* rgb24tobgr15 */ + if((srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_RGB15) + ||(srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_BGR15)) + { + c->swScale= rgb24tobgr15Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr15to16 */ - if(srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_BGR16) + if((srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_BGR16)|| + (srcFormat==IMGFMT_RGB15 && dstFormat==IMGFMT_RGB16)) { c->swScale= bgr15to16Wrapper; @@ -2078,6 +2372,42 @@ return c; } + /* rgb15tobgr16 */ + if((srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_RGB16)|| + (srcFormat==IMGFMT_RGB15 && dstFormat==IMGFMT_BGR16)) + { + c->swScale= rgb15tobgr16Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + + /* bgr16to15 */ + if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_BGR15)|| + (srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_RGB15)) + { + c->swScale= bgr16to15Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + + /* rgb16tobgr15 */ + if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_RGB15)|| + (srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_BGR15)) + { + c->swScale= rgb16tobgr15Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr15to24 */ if((srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_BGR24) ||(srcFormat==IMGFMT_RGB15 && dstFormat==IMGFMT_RGB24)) @@ -2090,6 +2420,18 @@ return c; } + /* rgb15tobgr24 */ + if((srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_RGB24) + ||(srcFormat==IMGFMT_RGB15 && dstFormat==IMGFMT_BGR24)) + { + c->swScale= rgb15tobgr24Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr15to32 */ if((srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_BGR32) ||(srcFormat==IMGFMT_RGB15 && dstFormat==IMGFMT_RGB32)) @@ -2102,6 +2444,18 @@ return c; } + /* rgb15tobgr32 */ + if((srcFormat==IMGFMT_BGR15 && dstFormat==IMGFMT_RGB32) + ||(srcFormat==IMGFMT_RGB15 && dstFormat==IMGFMT_BGR32)) + { + c->swScale= rgb15tobgr32Wrapper; + + if(flags&SWS_PRINT_INFO) + MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", + vo_format_name(srcFormat), vo_format_name(dstFormat)); + return c; + } + /* bgr16to24 */ if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_BGR24) ||(srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_RGB24)) @@ -2114,11 +2468,11 @@ return c; } - /* bgr16to32 */ - if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_BGR32) - ||(srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_RGB32)) + /* rgb16tobgr24 */ + if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_RGB24) + ||(srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_BGR24)) { - c->swScale= bgr16to32Wrapper; + c->swScale= rgb16tobgr24Wrapper; if(flags&SWS_PRINT_INFO) MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", @@ -2126,11 +2480,11 @@ return c; } - /* rgb32tobgr32 */ - if((srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_BGR32)|| - (srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_RGB32)) + /* bgr16to32 */ + if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_BGR32) + ||(srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_RGB32)) { - c->swScale= rgb32tobgr32Wrapper; + c->swScale= bgr16to32Wrapper; if(flags&SWS_PRINT_INFO) MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", @@ -2138,11 +2492,11 @@ return c; } - /* rgb24tobgr24 */ - if((srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_BGR24)|| - (srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_RGB24)) + /* rgb16tobgr32 */ + if((srcFormat==IMGFMT_BGR16 && dstFormat==IMGFMT_RGB32) + ||(srcFormat==IMGFMT_RGB16 && dstFormat==IMGFMT_BGR32)) { - c->swScale= rgb24tobgr24Wrapper; + c->swScale= rgb16tobgr32Wrapper; if(flags&SWS_PRINT_INFO) MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", @@ -2150,11 +2504,11 @@ return c; } - /* rgb32tobgr24 */ - if((srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_BGR24)|| - (srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_RGB24)) + /* rgb32tobgr32 */ + if((srcFormat==IMGFMT_RGB32 && dstFormat==IMGFMT_BGR32)|| + (srcFormat==IMGFMT_BGR32 && dstFormat==IMGFMT_RGB32)) { - c->swScale= rgb32tobgr24Wrapper; + c->swScale= rgb32tobgr32Wrapper; if(flags&SWS_PRINT_INFO) MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", @@ -2162,11 +2516,11 @@ return c; } - /* rgb24tobgr32 */ - if((srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_BGR32)|| - (srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_RGB32)) + /* rgb24tobgr24 */ + if((srcFormat==IMGFMT_RGB24 && dstFormat==IMGFMT_BGR24)|| + (srcFormat==IMGFMT_BGR24 && dstFormat==IMGFMT_RGB24)) { - c->swScale= rgb24tobgr32Wrapper; + c->swScale= rgb24tobgr24Wrapper; if(flags&SWS_PRINT_INFO) MSG_INFO("SwScaler: using unscaled %s -> %s special converter\n", |