|
|
|
@ -399,6 +399,35 @@ static void RENAME(yuv2rgb32_X)(SwsContext *c, const int16_t *lumFilter, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void RENAME(yuv2bgr32_X)(SwsContext *c, const int16_t *lumFilter, |
|
|
|
|
const int16_t **lumSrc, int lumFilterSize, |
|
|
|
|
const int16_t *chrFilter, const int16_t **chrUSrc, |
|
|
|
|
const int16_t **chrVSrc, |
|
|
|
|
int chrFilterSize, const int16_t **alpSrc, |
|
|
|
|
uint8_t *dest, int dstW, int dstY) |
|
|
|
|
{ |
|
|
|
|
x86_reg dummy=0; |
|
|
|
|
x86_reg dstW_reg = dstW; |
|
|
|
|
x86_reg uv_off = c->uv_offx2; |
|
|
|
|
|
|
|
|
|
if (CONFIG_SWSCALE_ALPHA && c->alpPixBuf) { |
|
|
|
|
YSCALEYUV2PACKEDX |
|
|
|
|
YSCALEYUV2RGBX |
|
|
|
|
YSCALEYUV2PACKEDX_YA(ALP_MMX_FILTER_OFFSET, %%mm0, %%mm3, %%mm6, %%mm1, %%mm7) |
|
|
|
|
"psraw $3, %%mm1 \n\t" |
|
|
|
|
"psraw $3, %%mm7 \n\t" |
|
|
|
|
"packuswb %%mm7, %%mm1 \n\t" |
|
|
|
|
WRITEBGR32(%4, "%5", %%REGa, %%mm5, %%mm4, %%mm2, %%mm1, %%mm0, %%mm7, %%mm3, %%mm6) |
|
|
|
|
YSCALEYUV2PACKEDX_END |
|
|
|
|
} else { |
|
|
|
|
YSCALEYUV2PACKEDX |
|
|
|
|
YSCALEYUV2RGBX |
|
|
|
|
"pcmpeqd %%mm7, %%mm7 \n\t" |
|
|
|
|
WRITEBGR32(%4, "%5", %%REGa, %%mm5, %%mm4, %%mm2, %%mm7, %%mm0, %%mm1, %%mm3, %%mm6) |
|
|
|
|
YSCALEYUV2PACKEDX_END |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#define REAL_WRITERGB16(dst, dstw, index) \ |
|
|
|
|
"pand "MANGLE(bF8)", %%mm2 \n\t" /* B */\
|
|
|
|
|
"pand "MANGLE(bFC)", %%mm4 \n\t" /* G */\
|
|
|
|
@ -1491,6 +1520,7 @@ static av_cold void RENAME(sws_init_swscale)(SwsContext *c) |
|
|
|
|
if (!(c->flags & SWS_FULL_CHR_H_INT)) { |
|
|
|
|
switch (c->dstFormat) { |
|
|
|
|
case AV_PIX_FMT_RGB32: c->yuv2packedX = RENAME(yuv2rgb32_X); break; |
|
|
|
|
case AV_PIX_FMT_BGR32: c->yuv2packedX = RENAME(yuv2bgr32_X); break; |
|
|
|
|
#if HAVE_6REGS |
|
|
|
|
case AV_PIX_FMT_BGR24: c->yuv2packedX = RENAME(yuv2bgr24_X); break; |
|
|
|
|
#endif |
|
|
|
|