mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-14 11:14:44 +00:00
gmc_mmx tweaks
Originally committed as revision 5269 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
87b041e0f0
commit
75ca1a5f70
@ -2406,7 +2406,6 @@ static void just_return() { return; }
|
||||
static void gmc_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
|
||||
int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height){
|
||||
const int w = 8;
|
||||
const int s = 1<<shift;
|
||||
const int ix = ox>>(16+shift);
|
||||
const int iy = oy>>(16+shift);
|
||||
const int oxs = ox>>4;
|
||||
@ -2437,14 +2436,21 @@ static void gmc_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int o
|
||||
return;
|
||||
}
|
||||
|
||||
src += ix + iy*stride;
|
||||
if( (unsigned)ix >= width-w ||
|
||||
(unsigned)iy >= height-h )
|
||||
{
|
||||
ff_emulated_edge_mc(edge_buf, src+ix+iy*stride, stride, w+1, h+1, ix, iy, width, height);
|
||||
ff_emulated_edge_mc(edge_buf, src, stride, w+1, h+1, ix, iy, width, height);
|
||||
src = edge_buf;
|
||||
}
|
||||
else
|
||||
src += ix + iy*stride;
|
||||
|
||||
asm volatile(
|
||||
"movd %0, %%mm6 \n\t"
|
||||
"pxor %%mm7, %%mm7 \n\t"
|
||||
"punpcklwd %%mm6, %%mm6 \n\t"
|
||||
"punpcklwd %%mm6, %%mm6 \n\t"
|
||||
:: "r"(1<<shift)
|
||||
);
|
||||
|
||||
for(x=0; x<w; x+=4){
|
||||
uint16_t dx4[4] = { oxs - dxys + dxxs*(x+0),
|
||||
@ -2456,14 +2462,6 @@ static void gmc_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int o
|
||||
oys - dyys + dyxs*(x+2),
|
||||
oys - dyys + dyxs*(x+3) };
|
||||
|
||||
asm volatile(
|
||||
"movd %0, %%mm6 \n\t"
|
||||
"pxor %%mm7, %%mm7 \n\t"
|
||||
"punpcklwd %%mm6, %%mm6 \n\t"
|
||||
"punpcklwd %%mm6, %%mm6 \n\t"
|
||||
:: "g"(s)
|
||||
);
|
||||
|
||||
for(y=0; y<h; y++){
|
||||
asm volatile(
|
||||
"movq %0, %%mm4 \n\t"
|
||||
@ -2503,10 +2501,10 @@ static void gmc_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int o
|
||||
"punpcklbw %%mm7, %%mm4 \n\t"
|
||||
"pmullw %%mm5, %%mm1 \n\t" // src[1,0] * dx*(s-dy)
|
||||
"pmullw %%mm4, %%mm0 \n\t" // src[0,0] * (s-dx)*(s-dy)
|
||||
"paddw %5, %%mm1 \n\t"
|
||||
"paddw %%mm3, %%mm2 \n\t"
|
||||
"paddw %%mm1, %%mm0 \n\t"
|
||||
"paddw %%mm2, %%mm0 \n\t"
|
||||
"paddw %5, %%mm0 \n\t"
|
||||
|
||||
"psrlw %6, %%mm0 \n\t"
|
||||
"packuswb %%mm0, %%mm0 \n\t"
|
||||
|
Loading…
Reference in New Issue
Block a user