Mercurial > libavcodec.hg
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 |