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 {