mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
Forgotten accurate rounding function YSCALEYUV2YV121_ACCURATE.
Originally committed as revision 27321 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
This commit is contained in:
parent
7bae01c62c
commit
bf2bdde67a
@ -181,6 +181,24 @@
|
||||
"add $8, %%"REG_a" \n\t"\
|
||||
"jnc 1b \n\t"
|
||||
|
||||
#define YSCALEYUV2YV121_ACCURATE \
|
||||
"mov %2, %%"REG_a" \n\t"\
|
||||
"pcmpeqw %%mm7, %%mm7 \n\t"\
|
||||
"psrlw $15, %%mm7 \n\t"\
|
||||
"psllw $6, %%mm7 \n\t"\
|
||||
ASMALIGN(4) /* FIXME Unroll? */\
|
||||
"1: \n\t"\
|
||||
"movq (%0, %%"REG_a", 2), %%mm0 \n\t"\
|
||||
"movq 8(%0, %%"REG_a", 2), %%mm1 \n\t"\
|
||||
"paddw %%mm7, %%mm0 \n\t"\
|
||||
"paddw %%mm7, %%mm1 \n\t"\
|
||||
"psraw $7, %%mm0 \n\t"\
|
||||
"psraw $7, %%mm1 \n\t"\
|
||||
"packuswb %%mm1, %%mm0 \n\t"\
|
||||
MOVNTQ(%%mm0, (%1, %%REGa))\
|
||||
"add $8, %%"REG_a" \n\t"\
|
||||
"jnc 1b \n\t"
|
||||
|
||||
/*
|
||||
:: "m" (-lumFilterSize), "m" (-chrFilterSize),
|
||||
"m" (lumMmxFilter+lumFilterSize*4), "m" (chrMmxFilter+chrFilterSize*4),
|
||||
@ -969,7 +987,7 @@ yuv2nv12XinC(lumFilter, lumSrc, lumFilterSize,
|
||||
dest, uDest, dstW, chrDstW, dstFormat);
|
||||
}
|
||||
|
||||
static inline void RENAME(yuv2yuv1)(int16_t *lumSrc, int16_t *chrSrc,
|
||||
static inline void RENAME(yuv2yuv1)(SwsContext *c, int16_t *lumSrc, int16_t *chrSrc,
|
||||
uint8_t *dest, uint8_t *uDest, uint8_t *vDest, long dstW, long chrDstW)
|
||||
{
|
||||
#ifdef HAVE_MMX
|
||||
@ -978,6 +996,16 @@ static inline void RENAME(yuv2yuv1)(int16_t *lumSrc, int16_t *chrSrc,
|
||||
uint8_t *dst[3]= {dest, uDest, vDest};
|
||||
long counter[3] = {dstW, chrDstW, chrDstW};
|
||||
|
||||
if (c->flags & SWS_ACCURATE_RND){
|
||||
while(p--){
|
||||
asm volatile(
|
||||
YSCALEYUV2YV121_ACCURATE
|
||||
:: "r" (src[p]), "r" (dst[p] + counter[p]),
|
||||
"g" (-counter[p])
|
||||
: "%"REG_a
|
||||
);
|
||||
}
|
||||
}else{
|
||||
while(p--){
|
||||
asm volatile(
|
||||
YSCALEYUV2YV121
|
||||
@ -986,6 +1014,7 @@ static inline void RENAME(yuv2yuv1)(int16_t *lumSrc, int16_t *chrSrc,
|
||||
: "%"REG_a
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
int i;
|
||||
@ -3178,7 +3207,7 @@ static int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int s
|
||||
{
|
||||
int16_t *lumBuf = lumPixBuf[0];
|
||||
int16_t *chrBuf= chrPixBuf[0];
|
||||
RENAME(yuv2yuv1)(lumBuf, chrBuf, dest, uDest, vDest, dstW, chrDstW);
|
||||
RENAME(yuv2yuv1)(c, lumBuf, chrBuf, dest, uDest, vDest, dstW, chrDstW);
|
||||
}
|
||||
else //General YV12
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user