comparison libpostproc/postprocess_template.c @ 1029:804cc05a3f61 libavcodec

C implementation of the median deinterlacer (seems to be the only one that generates tolerable output for anime) so it will work on non-MMX architectures. Someone should optimize it better eventually.
author rfelker
date Thu, 23 Jan 2003 04:19:24 +0000
parents 8a95bda80fdc
children 3644e555a20a
comparison
equal deleted inserted replaced
1028:e76fb91de4cc 1029:804cc05a3f61
1887 : : "r" (src), "r" (stride) 1887 : : "r" (src), "r" (stride)
1888 : "%eax", "%edx" 1888 : "%eax", "%edx"
1889 ); 1889 );
1890 #endif // MMX 1890 #endif // MMX
1891 #else 1891 #else
1892 //FIXME 1892 int x, y;
1893 int x;
1894 src+= 4*stride; 1893 src+= 4*stride;
1894 // FIXME - there should be a way to do a few columns in parallel like w/mmx
1895 for(x=0; x<8; x++) 1895 for(x=0; x<8; x++)
1896 { 1896 {
1897 src[0 ] = (src[0 ] + 2*src[stride ] + src[stride*2])>>2; 1897 uint8_t *colsrc = src;
1898 src[stride ] = (src[stride ] + 2*src[stride*2] + src[stride*3])>>2; 1898 for (y=0; y<4; y++)
1899 src[stride*2] = (src[stride*2] + 2*src[stride*3] + src[stride*4])>>2; 1899 {
1900 src[stride*3] = (src[stride*3] + 2*src[stride*4] + src[stride*5])>>2; 1900 int a, b, c, d, e, f;
1901 src[stride*4] = (src[stride*4] + 2*src[stride*5] + src[stride*6])>>2; 1901 a = colsrc[0 ];
1902 src[stride*5] = (src[stride*5] + 2*src[stride*6] + src[stride*7])>>2; 1902 b = colsrc[stride ];
1903 src[stride*6] = (src[stride*6] + 2*src[stride*7] + src[stride*8])>>2; 1903 c = colsrc[stride*2];
1904 src[stride*7] = (src[stride*7] + 2*src[stride*8] + src[stride*9])>>2; 1904 d = (a-b)>>31;
1905 e = (b-c)>>31;
1906 f = (c-a)>>31;
1907 colsrc[stride ] = (a|(d^f)) & (b|(d^e)) & (c|(e^f));
1908 colsrc += stride*2;
1909 }
1905 src++; 1910 src++;
1906 } 1911 }
1907 #endif 1912 #endif
1908 } 1913 }
1909 1914