Mercurial > mplayer.hg
comparison postproc/postprocess.c @ 2477:830c0e171d7d
dering in c
dering bugfix
author | michael |
---|---|
date | Fri, 26 Oct 2001 00:35:41 +0000 |
parents | a6c5a537f30a |
children | 42d5846eeb51 |
comparison
equal
deleted
inserted
replaced
2476:a6c5a537f30a | 2477:830c0e171d7d |
---|---|
24 doVertDefFilter Ec Ec Ec | 24 doVertDefFilter Ec Ec Ec |
25 isHorizDC Ec Ec | 25 isHorizDC Ec Ec |
26 isHorizMinMaxOk a E | 26 isHorizMinMaxOk a E |
27 doHorizLowPass E e e | 27 doHorizLowPass E e e |
28 doHorizDefFilter Ec Ec Ec | 28 doHorizDefFilter Ec Ec Ec |
29 deRing e e* | 29 deRing E e e* |
30 Vertical RKAlgo1 E a a | 30 Vertical RKAlgo1 E a a |
31 Horizontal RKAlgo1 a a | 31 Horizontal RKAlgo1 a a |
32 Vertical X1 a E E | 32 Vertical X1 a E E |
33 Horizontal X1 a E E | 33 Horizontal X1 a E E |
34 LinIpolDeinterlace e E E* | 34 LinIpolDeinterlace e E E* |
90 #ifdef HAVE_MMX2 | 90 #ifdef HAVE_MMX2 |
91 #define PAVGB(a,b) "pavgb " #a ", " #b " \n\t" | 91 #define PAVGB(a,b) "pavgb " #a ", " #b " \n\t" |
92 #elif defined (HAVE_3DNOW) | 92 #elif defined (HAVE_3DNOW) |
93 #define PAVGB(a,b) "pavgusb " #a ", " #b " \n\t" | 93 #define PAVGB(a,b) "pavgusb " #a ", " #b " \n\t" |
94 #endif | 94 #endif |
95 | |
96 #ifdef HAVE_MMX2 | |
97 #define PMINUB(a,b,t) "pminub " #a ", " #b " \n\t" | |
98 #elif defined (HAVE_MMX) | |
99 #define PMINUB(b,a,t) \ | |
100 "movq " #a ", " #t " \n\t"\ | |
101 "psubusb " #b ", " #t " \n\t"\ | |
102 "psubb " #t ", " #a " \n\t" | |
103 #endif | |
104 | |
105 #ifdef HAVE_MMX2 | |
106 #define PMAXUB(a,b) "pmaxub " #a ", " #b " \n\t" | |
107 #elif defined (HAVE_MMX) | |
108 #define PMAXUB(a,b) \ | |
109 "psubusb " #a ", " #b " \n\t"\ | |
110 "paddb " #a ", " #b " \n\t" | |
111 #endif | |
112 | |
95 | 113 |
96 #define GET_MODE_BUFFER_SIZE 500 | 114 #define GET_MODE_BUFFER_SIZE 500 |
97 #define OPTIONS_ARRAY_SIZE 10 | 115 #define OPTIONS_ARRAY_SIZE 10 |
98 | 116 |
99 | 117 |
1970 "paddb " #t0 ", " #sx " \n\t"\ | 1988 "paddb " #t0 ", " #sx " \n\t"\ |
1971 \ | 1989 \ |
1972 PAVGB(lx, pplx) \ | 1990 PAVGB(lx, pplx) \ |
1973 PAVGB(plx, pplx) /* filtered */\ | 1991 PAVGB(plx, pplx) /* filtered */\ |
1974 "movq " #dst ", " #t0 " \n\t" /* dst */\ | 1992 "movq " #dst ", " #t0 " \n\t" /* dst */\ |
1975 "movq " #pplx ", " #t1 " \n\t"\ | 1993 "movq " #t0 ", " #t1 " \n\t" /* dst */\ |
1976 "psubusb " #t0 ", " #pplx " \n\t"\ | 1994 "psubusb pQPb2, " #t0 " \n\t"\ |
1977 "psubusb " #t1 ", " #t0 " \n\t"\ | 1995 "paddusb pQPb2, " #t1 " \n\t"\ |
1978 "por " #t0 ", " #pplx " \n\t" /* |filtered - dst| */\ | 1996 PMAXUB(t0, pplx)\ |
1979 "psubusb pQPb2, " #pplx " \n\t"\ | 1997 PMINUB(t1, pplx, t0)\ |
1980 "pcmpeqb b00, " #pplx " \n\t"\ | |
1981 "paddb " #sx ", " #ppsx " \n\t"\ | 1998 "paddb " #sx ", " #ppsx " \n\t"\ |
1982 "paddb " #psx ", " #ppsx " \n\t"\ | 1999 "paddb " #psx ", " #ppsx " \n\t"\ |
1983 "#paddb b02, " #ppsx " \n\t"\ | 2000 "#paddb b02, " #ppsx " \n\t"\ |
1984 "pand b08, " #ppsx " \n\t"\ | 2001 "pand b08, " #ppsx " \n\t"\ |
1985 "pcmpeqb b00, " #ppsx " \n\t"\ | 2002 "pcmpeqb b00, " #ppsx " \n\t"\ |
1986 "pand " #pplx ", " #ppsx " \n\t"\ | 2003 "pand " #ppsx ", " #pplx " \n\t"\ |
1987 "pand " #ppsx ", " #t1 " \n\t"\ | |
1988 "pandn " #dst ", " #ppsx " \n\t"\ | 2004 "pandn " #dst ", " #ppsx " \n\t"\ |
1989 "por " #t1 ", " #ppsx " \n\t"\ | 2005 "por " #pplx ", " #ppsx " \n\t"\ |
1990 "movq " #ppsx ", " #dst " \n\t" | 2006 "movq " #ppsx ", " #dst " \n\t" |
2007 | |
1991 /* | 2008 /* |
1992 0000000 | 2009 0000000 |
1993 1111111 | 2010 1111111 |
1994 | 2011 |
1995 1111110 | 2012 1111110 |
2016 | 2033 |
2017 : : "r" (src), "r" (stride), "r" (QP) | 2034 : : "r" (src), "r" (stride), "r" (QP) |
2018 : "%eax", "%ebx" | 2035 : "%eax", "%ebx" |
2019 ); | 2036 ); |
2020 #else | 2037 #else |
2021 | 2038 int y; |
2022 //FIXME | 2039 int min=255; |
2040 int max=0; | |
2041 int avg; | |
2042 uint8_t *p; | |
2043 int s[10]; | |
2044 | |
2045 for(y=1; y<9; y++) | |
2046 { | |
2047 int x; | |
2048 p= src + stride*y; | |
2049 for(x=1; x<9; x++) | |
2050 { | |
2051 p++; | |
2052 if(*p > max) max= *p; | |
2053 if(*p < min) min= *p; | |
2054 } | |
2055 } | |
2056 avg= (min + max + 1)/2; | |
2057 | |
2058 for(y=0; y<10; y++) | |
2059 { | |
2060 int x; | |
2061 int t = 0; | |
2062 p= src + stride*y; | |
2063 for(x=0; x<10; x++) | |
2064 { | |
2065 if(*p > avg) t |= (1<<x); | |
2066 p++; | |
2067 } | |
2068 t |= (~t)<<16; | |
2069 t &= (t<<1) & (t>>1); | |
2070 s[y] = t; | |
2071 } | |
2072 | |
2073 for(y=1; y<9; y++) | |
2074 { | |
2075 int x; | |
2076 int t = s[y-1] & s[y] & s[y+1]; | |
2077 t|= t>>16; | |
2078 | |
2079 p= src + stride*y; | |
2080 for(x=1; x<9; x++) | |
2081 { | |
2082 p++; | |
2083 if(t & (1<<x)) | |
2084 { | |
2085 int f= (*(p-stride-1)) + 2*(*(p-stride)) + (*(p-stride+1)) | |
2086 +2*(*(p -1)) + 4*(*p ) + 2*(*(p +1)) | |
2087 +(*(p+stride-1)) + 2*(*(p+stride)) + (*(p+stride+1)); | |
2088 f= (f + 8)>>4; | |
2089 | |
2090 if (*p + 2*QP < f) *p= *p + 2*QP; | |
2091 else if(*p - 2*QP > f) *p= *p - 2*QP; | |
2092 else *p=f; | |
2093 } | |
2094 } | |
2095 } | |
2096 | |
2023 #endif | 2097 #endif |
2024 } | 2098 } |
2025 | 2099 |
2026 /** | 2100 /** |
2027 * Deinterlaces the given block | 2101 * Deinterlaces the given block |