comparison libpostproc/postprocess_template.c @ 1158:71d890b5c13b libavcodec

faster C linear blend & interpolate deinterlacers
author michaelni
date Sat, 29 Mar 2003 14:06:24 +0000
parents 57fe9c4e0c6e
children 2e06398e4647
comparison
equal deleted inserted replaced
1157:57fe9c4e0c6e 1158:71d890b5c13b
1560 1560
1561 : : "r" (src), "r" (stride) 1561 : : "r" (src), "r" (stride)
1562 : "%eax", "%ecx" 1562 : "%eax", "%ecx"
1563 ); 1563 );
1564 #else 1564 #else
1565 int x; 1565 int a, b, x;
1566 src+= 4*stride; 1566 src+= 4*stride;
1567 for(x=0; x<8; x++) 1567
1568 { 1568 for(x=0; x<2; x++){
1569 src[stride] = (src[0] + src[stride*2])>>1; 1569 a= *(uint32_t*)&src[stride*0];
1570 src[stride*3] = (src[stride*2] + src[stride*4])>>1; 1570 b= *(uint32_t*)&src[stride*2];
1571 src[stride*5] = (src[stride*4] + src[stride*6])>>1; 1571 *(uint32_t*)&src[stride*1]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1572 src[stride*7] = (src[stride*6] + src[stride*8])>>1; 1572 a= *(uint32_t*)&src[stride*4];
1573 src++; 1573 *(uint32_t*)&src[stride*3]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1574 b= *(uint32_t*)&src[stride*6];
1575 *(uint32_t*)&src[stride*5]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1576 a= *(uint32_t*)&src[stride*8];
1577 *(uint32_t*)&src[stride*7]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1578 src += 4;
1574 } 1579 }
1575 #endif 1580 #endif
1576 } 1581 }
1577 1582
1578 /** 1583 /**
1873 1878
1874 : : "r" (src), "r" (stride) 1879 : : "r" (src), "r" (stride)
1875 : "%eax", "%edx" 1880 : "%eax", "%edx"
1876 ); 1881 );
1877 #else 1882 #else
1878 int x; 1883 int a, b, c, x;
1879 src+= 4*stride; 1884 src+= 4*stride;
1880 for(x=0; x<8; x++) 1885
1881 { 1886 for(x=0; x<2; x++){
1882 src[0 ] = (src[0 ] + 2*src[stride ] + src[stride*2])>>2; 1887 a= *(uint32_t*)&src[stride*0];
1883 src[stride ] = (src[stride ] + 2*src[stride*2] + src[stride*3])>>2; 1888 b= *(uint32_t*)&src[stride*1];
1884 src[stride*2] = (src[stride*2] + 2*src[stride*3] + src[stride*4])>>2; 1889 c= *(uint32_t*)&src[stride*2];
1885 src[stride*3] = (src[stride*3] + 2*src[stride*4] + src[stride*5])>>2; 1890 a= (a&c) + (((a^c)&0xFEFEFEFEUL)>>1);
1886 src[stride*4] = (src[stride*4] + 2*src[stride*5] + src[stride*6])>>2; 1891 *(uint32_t*)&src[stride*0]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1887 src[stride*5] = (src[stride*5] + 2*src[stride*6] + src[stride*7])>>2; 1892
1888 src[stride*6] = (src[stride*6] + 2*src[stride*7] + src[stride*8])>>2; 1893 a= *(uint32_t*)&src[stride*3];
1889 src[stride*7] = (src[stride*7] + 2*src[stride*8] + src[stride*9])>>2; 1894 b= (a&b) + (((a^b)&0xFEFEFEFEUL)>>1);
1890 src++; 1895 *(uint32_t*)&src[stride*1]= (c|b) - (((c^b)&0xFEFEFEFEUL)>>1);
1896
1897 b= *(uint32_t*)&src[stride*4];
1898 c= (b&c) + (((b^c)&0xFEFEFEFEUL)>>1);
1899 *(uint32_t*)&src[stride*2]= (c|a) - (((c^a)&0xFEFEFEFEUL)>>1);
1900
1901 c= *(uint32_t*)&src[stride*5];
1902 a= (a&c) + (((a^c)&0xFEFEFEFEUL)>>1);
1903 *(uint32_t*)&src[stride*3]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1904
1905 a= *(uint32_t*)&src[stride*6];
1906 b= (a&b) + (((a^b)&0xFEFEFEFEUL)>>1);
1907 *(uint32_t*)&src[stride*4]= (c|b) - (((c^b)&0xFEFEFEFEUL)>>1);
1908
1909 b= *(uint32_t*)&src[stride*7];
1910 c= (b&c) + (((b^c)&0xFEFEFEFEUL)>>1);
1911 *(uint32_t*)&src[stride*5]= (c|a) - (((c^a)&0xFEFEFEFEUL)>>1);
1912
1913 c= *(uint32_t*)&src[stride*8];
1914 a= (a&c) + (((a^c)&0xFEFEFEFEUL)>>1);
1915 *(uint32_t*)&src[stride*6]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
1916
1917 a= *(uint32_t*)&src[stride*9];
1918 b= (a&b) + (((a^b)&0xFEFEFEFEUL)>>1);
1919 *(uint32_t*)&src[stride*7]= (c|b) - (((c^b)&0xFEFEFEFEUL)>>1);
1920
1921 src += 4;
1891 } 1922 }
1892 #endif 1923 #endif
1893 } 1924 }
1894 1925
1895 /** 1926 /**