summaryrefslogtreecommitdiffstats
path: root/postproc/swscale_template.c
diff options
context:
space:
mode:
Diffstat (limited to 'postproc/swscale_template.c')
-rw-r--r--postproc/swscale_template.c460
1 files changed, 89 insertions, 371 deletions
diff --git a/postproc/swscale_template.c b/postproc/swscale_template.c
index 85e18a8dbd..7095824466 100644
--- a/postproc/swscale_template.c
+++ b/postproc/swscale_template.c
@@ -752,18 +752,14 @@ static inline void RENAME(yuv2yuv1)(int16_t *lumSrc, int16_t *chrSrc,
/**
* vertical scale YV12 to RGB
*/
-static inline void RENAME(yuv2rgbX)(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
+static inline void RENAME(yuv2rgbX)(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
- uint8_t *dest, int dstW, int dstFormat, int16_t * lumMmxFilter, int16_t * chrMmxFilter)
+ uint8_t *dest, int dstW, int16_t * lumMmxFilter, int16_t * chrMmxFilter, int dstY)
{
-/* if(flags&SWS_FULL_UV_IPOL)
- {
-//FIXME
- }//FULL_UV_IPOL
- else*/
+ switch(c->dstFormat)
{
#ifdef HAVE_MMX
- if(dstFormat == IMGFMT_BGR32) //FIXME untested
+ case IMGFMT_BGR32:
{
asm volatile(
YSCALEYUV2RGBX
@@ -776,7 +772,8 @@ static inline void RENAME(yuv2rgbX)(int16_t *lumFilter, int16_t **lumSrc, int lu
: "%eax", "%ebx", "%ecx", "%edx", "%esi"
);
}
- else if(dstFormat == IMGFMT_BGR24) //FIXME untested
+ break;
+ case IMGFMT_BGR24:
{
asm volatile(
YSCALEYUV2RGBX
@@ -791,7 +788,8 @@ static inline void RENAME(yuv2rgbX)(int16_t *lumFilter, int16_t **lumSrc, int lu
: "%eax", "%ebx", "%ecx", "%edx", "%esi"
);
}
- else if(dstFormat==IMGFMT_BGR15)
+ break;
+ case IMGFMT_BGR15:
{
asm volatile(
YSCALEYUV2RGBX
@@ -811,7 +809,8 @@ static inline void RENAME(yuv2rgbX)(int16_t *lumFilter, int16_t **lumSrc, int lu
: "%eax", "%ebx", "%ecx", "%edx", "%esi"
);
}
- else if(dstFormat==IMGFMT_BGR16)
+ break;
+ case IMGFMT_BGR16:
{
asm volatile(
YSCALEYUV2RGBX
@@ -831,31 +830,33 @@ static inline void RENAME(yuv2rgbX)(int16_t *lumFilter, int16_t **lumSrc, int lu
: "%eax", "%ebx", "%ecx", "%edx", "%esi"
);
}
-#else
-yuv2rgbXinC(lumFilter, lumSrc, lumFilterSize,
- chrFilter, chrSrc, chrFilterSize,
- dest, dstW, dstFormat);
-
+ break;
#endif
- } //!FULL_UV_IPOL
+ default:
+ yuv2rgbXinC(c, lumFilter, lumSrc, lumFilterSize,
+ chrFilter, chrSrc, chrFilterSize,
+ dest, dstW, dstY);
+ break;
+ }
}
-
/**
* vertical bilinear scale YV12 to RGB
*/
-static inline void RENAME(yuv2rgb2)(uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, uint16_t *uvbuf1,
- uint8_t *dest, int dstW, int yalpha, int uvalpha, int dstFormat, int flags)
+static inline void RENAME(yuv2rgb2)(SwsContext *c, uint16_t *buf0, uint16_t *buf1, uint16_t *uvbuf0, uint16_t *uvbuf1,
+ uint8_t *dest, int dstW, int yalpha, int uvalpha, int y)
{
int yalpha1=yalpha^4095;
int uvalpha1=uvalpha^4095;
+ int i;
+#if 0 //isnt used
if(flags&SWS_FULL_CHR_H_INT)
{
-
-#ifdef HAVE_MMX
- if(dstFormat==IMGFMT_BGR32)
+ switch(dstFormat)
{
+#ifdef HAVE_MMX
+ case IMGFMT_BGR32:
asm volatile(
@@ -879,9 +880,8 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR24)
- {
+ break;
+ case IMGFMT_BGR24:
asm volatile(
FULL_YSCALEYUV2RGB
@@ -929,9 +929,8 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax", "%ebx"
);
- }
- else if(dstFormat==IMGFMT_BGR15)
- {
+ break;
+ case IMGFMT_BGR15:
asm volatile(
FULL_YSCALEYUV2RGB
@@ -963,9 +962,8 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR16)
- {
+ break;
+ case IMGFMT_BGR16:
asm volatile(
FULL_YSCALEYUV2RGB
@@ -997,8 +995,12 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
-#else
+ break;
+#endif
+ case IMGFMT_RGB32:
+#ifndef HAVE_MMX
+ case IMGFMT_BGR32:
+#endif
if(dstFormat==IMGFMT_BGR32)
{
int i;
@@ -1060,13 +1062,14 @@ FULL_YSCALEYUV2RGB
clip_table15r[(Y + yuvtab_3343[V]) >>13];
}
}
-#endif
}//FULL_UV_IPOL
else
{
+#endif // if 0
#ifdef HAVE_MMX
- if(dstFormat==IMGFMT_BGR32)
- {
+ switch(c->dstFormat)
+ {
+ case IMGFMT_BGR32:
asm volatile(
YSCALEYUV2RGB
WRITEBGR32
@@ -1075,9 +1078,8 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR24)
- {
+ return;
+ case IMGFMT_BGR24:
asm volatile(
"movl %4, %%ebx \n\t"
YSCALEYUV2RGB
@@ -1087,9 +1089,8 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax", "%ebx"
);
- }
- else if(dstFormat==IMGFMT_BGR15)
- {
+ return;
+ case IMGFMT_BGR15:
asm volatile(
YSCALEYUV2RGB
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
@@ -1105,9 +1106,8 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR16)
- {
+ return;
+ case IMGFMT_BGR16:
asm volatile(
YSCALEYUV2RGB
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
@@ -1123,176 +1123,38 @@ FULL_YSCALEYUV2RGB
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
-#else
- if(dstFormat==IMGFMT_BGR32)
- {
- int i;
-#ifdef WORDS_BIGENDIAN
- dest++;
-#endif
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[((buf0[i]*yalpha1+buf1[i]*yalpha)>>19)];
- int Y2=yuvtab_2568[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19)];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- dest[4*i+0]=clip_table[((Y1 + Cb) >>13)];
- dest[4*i+1]=clip_table[((Y1 + Cg) >>13)];
- dest[4*i+2]=clip_table[((Y1 + Cr) >>13)];
-
- dest[4*i+4]=clip_table[((Y2 + Cb) >>13)];
- dest[4*i+5]=clip_table[((Y2 + Cg) >>13)];
- dest[4*i+6]=clip_table[((Y2 + Cr) >>13)];
- }
- }
- else if(dstFormat==IMGFMT_BGR24)
- {
- int i;
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[((buf0[i]*yalpha1+buf1[i]*yalpha)>>19)];
- int Y2=yuvtab_2568[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19)];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- dest[0]=clip_table[((Y1 + Cb) >>13)];
- dest[1]=clip_table[((Y1 + Cg) >>13)];
- dest[2]=clip_table[((Y1 + Cr) >>13)];
-
- dest[3]=clip_table[((Y2 + Cb) >>13)];
- dest[4]=clip_table[((Y2 + Cg) >>13)];
- dest[5]=clip_table[((Y2 + Cr) >>13)];
- dest+=6;
- }
- }
- else if(dstFormat==IMGFMT_BGR16)
- {
- int i;
-#ifdef DITHER1XBPP
- static int ditherb1=1<<14;
- static int ditherg1=1<<13;
- static int ditherr1=2<<14;
- static int ditherb2=3<<14;
- static int ditherg2=3<<13;
- static int ditherr2=0<<14;
-
- ditherb1 ^= (1^2)<<14;
- ditherg1 ^= (1^2)<<13;
- ditherr1 ^= (1^2)<<14;
- ditherb2 ^= (3^0)<<14;
- ditherg2 ^= (3^0)<<13;
- ditherr2 ^= (3^0)<<14;
-#else
- const int ditherb1=0;
- const int ditherg1=0;
- const int ditherr1=0;
- const int ditherb2=0;
- const int ditherg2=0;
- const int ditherr2=0;
-#endif
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[((buf0[i]*yalpha1+buf1[i]*yalpha)>>19)];
- int Y2=yuvtab_2568[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19)];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- ((uint16_t*)dest)[i] =
- clip_table16b[(Y1 + Cb + ditherb1) >>13] |
- clip_table16g[(Y1 + Cg + ditherg1) >>13] |
- clip_table16r[(Y1 + Cr + ditherr1) >>13];
-
- ((uint16_t*)dest)[i+1] =
- clip_table16b[(Y2 + Cb + ditherb2) >>13] |
- clip_table16g[(Y2 + Cg + ditherg2) >>13] |
- clip_table16r[(Y2 + Cr + ditherr2) >>13];
- }
- }
- else if(dstFormat==IMGFMT_BGR15)
- {
- int i;
-#ifdef DITHER1XBPP
- static int ditherb1=1<<14;
- static int ditherg1=1<<14;
- static int ditherr1=2<<14;
- static int ditherb2=3<<14;
- static int ditherg2=3<<14;
- static int ditherr2=0<<14;
-
- ditherb1 ^= (1^2)<<14;
- ditherg1 ^= (1^2)<<14;
- ditherr1 ^= (1^2)<<14;
- ditherb2 ^= (3^0)<<14;
- ditherg2 ^= (3^0)<<14;
- ditherr2 ^= (3^0)<<14;
-#else
- const int ditherb1=0;
- const int ditherg1=0;
- const int ditherr1=0;
- const int ditherb2=0;
- const int ditherg2=0;
- const int ditherr2=0;
-#endif
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[((buf0[i]*yalpha1+buf1[i]*yalpha)>>19)];
- int Y2=yuvtab_2568[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19)];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- ((uint16_t*)dest)[i] =
- clip_table15b[(Y1 + Cb + ditherb1) >>13] |
- clip_table15g[(Y1 + Cg + ditherg1) >>13] |
- clip_table15r[(Y1 + Cr + ditherr1) >>13];
-
- ((uint16_t*)dest)[i+1] =
- clip_table15b[(Y2 + Cb + ditherb2) >>13] |
- clip_table15g[(Y2 + Cg + ditherg2) >>13] |
- clip_table15r[(Y2 + Cr + ditherr2) >>13];
- }
- }
-#endif
- } //!FULL_UV_IPOL
+ return;
+ default: break;
+ }
+#endif //HAVE_MMX
+YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB2_C)
}
/**
* YV12 to RGB without scaling or interpolating
*/
-static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *uvbuf1,
- uint8_t *dest, int dstW, int uvalpha, int dstFormat, int flags)
+static inline void RENAME(yuv2rgb1)(SwsContext *c, uint16_t *buf0, uint16_t *uvbuf0, uint16_t *uvbuf1,
+ uint8_t *dest, int dstW, int uvalpha, int dstFormat, int flags, int y)
{
int uvalpha1=uvalpha^4095;
const int yalpha1=0;
+ int i;
+
+ uint16_t *buf1= buf0; //FIXME needed for the rgb1/bgr1
+ const int yalpha= 4096; //FIXME ...
if(flags&SWS_FULL_CHR_H_INT)
{
- RENAME(yuv2rgb2)(buf0, buf0, uvbuf0, uvbuf1, dest, dstW, 0, uvalpha, dstFormat, flags);
+ RENAME(yuv2rgb2)(c, buf0, buf0, uvbuf0, uvbuf1, dest, dstW, 0, uvalpha, y);
return;
}
#ifdef HAVE_MMX
if( uvalpha < 2048 ) // note this is not correct (shifts chrominance by 0.5 pixels) but its a bit faster
{
- if(dstFormat==IMGFMT_BGR32)
+ switch(dstFormat)
{
+ case IMGFMT_BGR32:
asm volatile(
YSCALEYUV2RGB1
WRITEBGR32
@@ -1300,9 +1162,8 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR24)
- {
+ return;
+ case IMGFMT_BGR24:
asm volatile(
"movl %4, %%ebx \n\t"
YSCALEYUV2RGB1
@@ -1311,9 +1172,8 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax", "%ebx"
);
- }
- else if(dstFormat==IMGFMT_BGR15)
- {
+ return;
+ case IMGFMT_BGR15:
asm volatile(
YSCALEYUV2RGB1
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
@@ -1327,9 +1187,8 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR16)
- {
+ return;
+ case IMGFMT_BGR16:
asm volatile(
YSCALEYUV2RGB1
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
@@ -1344,12 +1203,14 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
+ return;
}
}
else
{
- if(dstFormat==IMGFMT_BGR32)
+ switch(dstFormat)
{
+ case IMGFMT_BGR32:
asm volatile(
YSCALEYUV2RGB1b
WRITEBGR32
@@ -1357,9 +1218,8 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR24)
- {
+ return;
+ case IMGFMT_BGR24:
asm volatile(
"movl %4, %%ebx \n\t"
YSCALEYUV2RGB1b
@@ -1368,9 +1228,8 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax", "%ebx"
);
- }
- else if(dstFormat==IMGFMT_BGR15)
- {
+ return;
+ case IMGFMT_BGR15:
asm volatile(
YSCALEYUV2RGB1b
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
@@ -1384,9 +1243,8 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
- }
- else if(dstFormat==IMGFMT_BGR16)
- {
+ return;
+ case IMGFMT_BGR16:
asm volatile(
YSCALEYUV2RGB1b
/* mm2=B, %%mm4=G, %%mm5=R, %%mm7=0 */
@@ -1401,156 +1259,16 @@ static inline void RENAME(yuv2rgb1)(uint16_t *buf0, uint16_t *uvbuf0, uint16_t *
"m" (yalpha1), "m" (uvalpha1)
: "%eax"
);
+ return;
}
}
-#else
-//FIXME write 2 versions (for even & odd lines)
-
- if(dstFormat==IMGFMT_BGR32)
- {
- int i;
-#ifdef WORDS_BIGENDIAN
- dest++;
#endif
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[buf0[i]>>7];
- int Y2=yuvtab_2568[buf0[i+1]>>7];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- dest[4*i+0]=clip_table[((Y1 + Cb) >>13)];
- dest[4*i+1]=clip_table[((Y1 + Cg) >>13)];
- dest[4*i+2]=clip_table[((Y1 + Cr) >>13)];
-
- dest[4*i+4]=clip_table[((Y2 + Cb) >>13)];
- dest[4*i+5]=clip_table[((Y2 + Cg) >>13)];
- dest[4*i+6]=clip_table[((Y2 + Cr) >>13)];
- }
- }
- else if(dstFormat==IMGFMT_BGR24)
- {
- int i;
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[buf0[i]>>7];
- int Y2=yuvtab_2568[buf0[i+1]>>7];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- dest[0]=clip_table[((Y1 + Cb) >>13)];
- dest[1]=clip_table[((Y1 + Cg) >>13)];
- dest[2]=clip_table[((Y1 + Cr) >>13)];
-
- dest[3]=clip_table[((Y2 + Cb) >>13)];
- dest[4]=clip_table[((Y2 + Cg) >>13)];
- dest[5]=clip_table[((Y2 + Cr) >>13)];
- dest+=6;
- }
- }
- else if(dstFormat==IMGFMT_BGR16)
+ if( uvalpha < 2048 )
{
- int i;
-#ifdef DITHER1XBPP
- static int ditherb1=1<<14;
- static int ditherg1=1<<13;
- static int ditherr1=2<<14;
- static int ditherb2=3<<14;
- static int ditherg2=3<<13;
- static int ditherr2=0<<14;
-
- ditherb1 ^= (1^2)<<14;
- ditherg1 ^= (1^2)<<13;
- ditherr1 ^= (1^2)<<14;
- ditherb2 ^= (3^0)<<14;
- ditherg2 ^= (3^0)<<13;
- ditherr2 ^= (3^0)<<14;
-#else
- const int ditherb1=0;
- const int ditherg1=0;
- const int ditherr1=0;
- const int ditherb2=0;
- const int ditherg2=0;
- const int ditherr2=0;
-#endif
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[buf0[i]>>7];
- int Y2=yuvtab_2568[buf0[i+1]>>7];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- ((uint16_t*)dest)[i] =
- clip_table16b[(Y1 + Cb + ditherb1) >>13] |
- clip_table16g[(Y1 + Cg + ditherg1) >>13] |
- clip_table16r[(Y1 + Cr + ditherr1) >>13];
-
- ((uint16_t*)dest)[i+1] =
- clip_table16b[(Y2 + Cb + ditherb2) >>13] |
- clip_table16g[(Y2 + Cg + ditherg2) >>13] |
- clip_table16r[(Y2 + Cr + ditherr2) >>13];
- }
+ YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB1_C)
+ }else{
+ YSCALE_YUV_2_ANYRGB_C(YSCALE_YUV_2_RGB1B_C)
}
- else if(dstFormat==IMGFMT_BGR15)
- {
- int i;
-#ifdef DITHER1XBPP
- static int ditherb1=1<<14;
- static int ditherg1=1<<14;
- static int ditherr1=2<<14;
- static int ditherb2=3<<14;
- static int ditherg2=3<<14;
- static int ditherr2=0<<14;
-
- ditherb1 ^= (1^2)<<14;
- ditherg1 ^= (1^2)<<14;
- ditherr1 ^= (1^2)<<14;
- ditherb2 ^= (3^0)<<14;
- ditherg2 ^= (3^0)<<14;
- ditherr2 ^= (3^0)<<14;
-#else
- const int ditherb1=0;
- const int ditherg1=0;
- const int ditherr1=0;
- const int ditherb2=0;
- const int ditherg2=0;
- const int ditherr2=0;
-#endif
- for(i=0; i<dstW-1; i+=2){
- // vertical linear interpolation && yuv2rgb in a single step:
- int Y1=yuvtab_2568[buf0[i]>>7];
- int Y2=yuvtab_2568[buf0[i+1]>>7];
- int U=((uvbuf0[i>>1]*uvalpha1+uvbuf1[i>>1]*uvalpha)>>19);
- int V=((uvbuf0[(i>>1)+2048]*uvalpha1+uvbuf1[(i>>1)+2048]*uvalpha)>>19);
-
- int Cb= yuvtab_40cf[U];
- int Cg= yuvtab_1a1e[V] + yuvtab_0c92[U];
- int Cr= yuvtab_3343[V];
-
- ((uint16_t*)dest)[i] =
- clip_table15b[(Y1 + Cb + ditherb1) >>13] |
- clip_table15g[(Y1 + Cg + ditherg1) >>13] |
- clip_table15r[(Y1 + Cr + ditherr1) >>13];
-
- ((uint16_t*)dest)[i+1] =
- clip_table15b[(Y2 + Cb + ditherb2) >>13] |
- clip_table15g[(Y2 + Cg + ditherg2) >>13] |
- clip_table15r[(Y2 + Cr + ditherr2) >>13];
- }
- }
-#endif
}
//FIXME yuy2* can read upto 7 samples to much
@@ -2814,24 +2532,24 @@ i--;
{
int chrAlpha= vChrFilter[2*dstY+1];
- RENAME(yuv2rgb1)(*lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1),
- dest, dstW, chrAlpha, dstFormat, flags);
+ RENAME(yuv2rgb1)(c, *lumSrcPtr, *chrSrcPtr, *(chrSrcPtr+1),
+ dest, dstW, chrAlpha, dstFormat, flags, dstY);
}
else if(vLumFilterSize == 2 && vChrFilterSize == 2) //BiLinear Upscale RGB
{
int lumAlpha= vLumFilter[2*dstY+1];
int chrAlpha= vChrFilter[2*dstY+1];
- RENAME(yuv2rgb2)(*lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1),
- dest, dstW, lumAlpha, chrAlpha, dstFormat, flags);
+ RENAME(yuv2rgb2)(c, *lumSrcPtr, *(lumSrcPtr+1), *chrSrcPtr, *(chrSrcPtr+1),
+ dest, dstW, lumAlpha, chrAlpha, dstY);
}
else //General RGB
{
- RENAME(yuv2rgbX)(
+ RENAME(yuv2rgbX)(c,
vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
- dest, dstW, dstFormat,
- lumMmxFilter+dstY*vLumFilterSize*4, chrMmxFilter+dstY*vChrFilterSize*4);
+ dest, dstW,
+ lumMmxFilter+dstY*vLumFilterSize*4, chrMmxFilter+dstY*vChrFilterSize*4, dstY);
}
}
}
@@ -2851,10 +2569,10 @@ i--;
{
ASSERT(lumSrcPtr + vLumFilterSize - 1 < lumPixBuf + vLumBufSize*2);
ASSERT(chrSrcPtr + vChrFilterSize - 1 < chrPixBuf + vChrBufSize*2);
- yuv2rgbXinC(
+ yuv2rgbXinC(c,
vLumFilter+dstY*vLumFilterSize, lumSrcPtr, vLumFilterSize,
vChrFilter+dstY*vChrFilterSize, chrSrcPtr, vChrFilterSize,
- dest, dstW, dstFormat);
+ dest, dstW, dstY);
}
}
}