Mercurial > mplayer.hg
comparison postproc/swscale_template.c @ 9071:25baacd1c650
UYVY input
author | michael |
---|---|
date | Thu, 23 Jan 2003 09:35:22 +0000 |
parents | 772d6d27fd66 |
children | 0d86fe21b281 |
comparison
equal
deleted
inserted
replaced
9070:8b2dde0dccf6 | 9071:25baacd1c650 |
---|---|
1474 dstV[i]= (src1[4*i + 3] + src2[4*i + 3])>>1; | 1474 dstV[i]= (src1[4*i + 3] + src2[4*i + 3])>>1; |
1475 } | 1475 } |
1476 #endif | 1476 #endif |
1477 } | 1477 } |
1478 | 1478 |
1479 //this is allmost identical to the previous, end exists only cuz yuy2ToY/UV)(dst, src+1, ...) would have 100% unaligned accesses | |
1480 static inline void RENAME(uyvyToY)(uint8_t *dst, uint8_t *src, int width) | |
1481 { | |
1482 #ifdef HAVE_MMX | |
1483 asm volatile( | |
1484 "movl %0, %%eax \n\t" | |
1485 "1: \n\t" | |
1486 "movq (%1, %%eax,2), %%mm0 \n\t" | |
1487 "movq 8(%1, %%eax,2), %%mm1 \n\t" | |
1488 "psrlw $8, %%mm0 \n\t" | |
1489 "psrlw $8, %%mm1 \n\t" | |
1490 "packuswb %%mm1, %%mm0 \n\t" | |
1491 "movq %%mm0, (%2, %%eax) \n\t" | |
1492 "addl $8, %%eax \n\t" | |
1493 " js 1b \n\t" | |
1494 : : "g" (-width), "r" (src+width*2), "r" (dst+width) | |
1495 : "%eax" | |
1496 ); | |
1497 #else | |
1498 int i; | |
1499 for(i=0; i<width; i++) | |
1500 dst[i]= src[2*i+1]; | |
1501 #endif | |
1502 } | |
1503 | |
1504 static inline void RENAME(uyvyToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, int width) | |
1505 { | |
1506 #if defined (HAVE_MMX2) || defined (HAVE_3DNOW) | |
1507 asm volatile( | |
1508 "movq "MANGLE(bm01010101)", %%mm4\n\t" | |
1509 "movl %0, %%eax \n\t" | |
1510 "1: \n\t" | |
1511 "movq (%1, %%eax,4), %%mm0 \n\t" | |
1512 "movq 8(%1, %%eax,4), %%mm1 \n\t" | |
1513 "movq (%2, %%eax,4), %%mm2 \n\t" | |
1514 "movq 8(%2, %%eax,4), %%mm3 \n\t" | |
1515 PAVGB(%%mm2, %%mm0) | |
1516 PAVGB(%%mm3, %%mm1) | |
1517 "pand %%mm4, %%mm0 \n\t" | |
1518 "pand %%mm4, %%mm1 \n\t" | |
1519 "packuswb %%mm1, %%mm0 \n\t" | |
1520 "movq %%mm0, %%mm1 \n\t" | |
1521 "psrlw $8, %%mm0 \n\t" | |
1522 "pand %%mm4, %%mm1 \n\t" | |
1523 "packuswb %%mm0, %%mm0 \n\t" | |
1524 "packuswb %%mm1, %%mm1 \n\t" | |
1525 "movd %%mm0, (%4, %%eax) \n\t" | |
1526 "movd %%mm1, (%3, %%eax) \n\t" | |
1527 "addl $4, %%eax \n\t" | |
1528 " js 1b \n\t" | |
1529 : : "g" (-width), "r" (src1+width*4), "r" (src2+width*4), "r" (dstU+width), "r" (dstV+width) | |
1530 : "%eax" | |
1531 ); | |
1532 #else | |
1533 int i; | |
1534 for(i=0; i<width; i++) | |
1535 { | |
1536 dstU[i]= (src1[4*i + 0] + src2[4*i + 0])>>1; | |
1537 dstV[i]= (src1[4*i + 2] + src2[4*i + 2])>>1; | |
1538 } | |
1539 #endif | |
1540 } | |
1541 | |
1479 static inline void RENAME(bgr32ToY)(uint8_t *dst, uint8_t *src, int width) | 1542 static inline void RENAME(bgr32ToY)(uint8_t *dst, uint8_t *src, int width) |
1480 { | 1543 { |
1481 #ifdef HAVE_MMXFIXME | 1544 #ifdef HAVE_MMXFIXME |
1482 #else | 1545 #else |
1483 int i; | 1546 int i; |
2111 if(srcFormat==IMGFMT_YUY2) | 2174 if(srcFormat==IMGFMT_YUY2) |
2112 { | 2175 { |
2113 RENAME(yuy2ToY)(formatConvBuffer, src, srcW); | 2176 RENAME(yuy2ToY)(formatConvBuffer, src, srcW); |
2114 src= formatConvBuffer; | 2177 src= formatConvBuffer; |
2115 } | 2178 } |
2179 else if(srcFormat==IMGFMT_UYVY) | |
2180 { | |
2181 RENAME(uyvyToY)(formatConvBuffer, src, srcW); | |
2182 src= formatConvBuffer; | |
2183 } | |
2116 else if(srcFormat==IMGFMT_BGR32) | 2184 else if(srcFormat==IMGFMT_BGR32) |
2117 { | 2185 { |
2118 RENAME(bgr32ToY)(formatConvBuffer, src, srcW); | 2186 RENAME(bgr32ToY)(formatConvBuffer, src, srcW); |
2119 src= formatConvBuffer; | 2187 src= formatConvBuffer; |
2120 } | 2188 } |
2260 int32_t *mmx2FilterPos) | 2328 int32_t *mmx2FilterPos) |
2261 { | 2329 { |
2262 if(srcFormat==IMGFMT_YUY2) | 2330 if(srcFormat==IMGFMT_YUY2) |
2263 { | 2331 { |
2264 RENAME(yuy2ToUV)(formatConvBuffer, formatConvBuffer+2048, src1, src2, srcW); | 2332 RENAME(yuy2ToUV)(formatConvBuffer, formatConvBuffer+2048, src1, src2, srcW); |
2333 src1= formatConvBuffer; | |
2334 src2= formatConvBuffer+2048; | |
2335 } | |
2336 else if(srcFormat==IMGFMT_UYVY) | |
2337 { | |
2338 RENAME(uyvyToUV)(formatConvBuffer, formatConvBuffer+2048, src1, src2, srcW); | |
2265 src1= formatConvBuffer; | 2339 src1= formatConvBuffer; |
2266 src2= formatConvBuffer+2048; | 2340 src2= formatConvBuffer+2048; |
2267 } | 2341 } |
2268 else if(srcFormat==IMGFMT_BGR32) | 2342 else if(srcFormat==IMGFMT_BGR32) |
2269 { | 2343 { |