Go to the documentation of this file.
47 static const uint16_t
coef_lf[2] = { 4309, 213 };
48 static const uint16_t
coef_hf[3] = { 5570, 3801, 1016 };
49 static const uint16_t
coef_sp[2] = { 5077, 981 };
52 #define FILTER_INTRA() \
53 for (x = 0; x < w; x++) { \
54 interpol = (coef_sp[0] * (cur[mrefs] + cur[prefs]) - coef_sp[1] * (cur[mrefs3] + cur[prefs3])) >> 13; \
55 dst[0] = av_clip(interpol, 0, clip_max); \
62 for (x = 0; x < w; x++) { \
64 int d = (prev2[0] + next2[0]) >> 1; \
66 int temporal_diff0 = FFABS(prev2[0] - next2[0]); \
67 int temporal_diff1 =(FFABS(prev[mrefs] - c) + FFABS(prev[prefs] - e)) >> 1; \
68 int temporal_diff2 =(FFABS(next[mrefs] - c) + FFABS(next[prefs] - e)) >> 1; \
69 int diff = FFMAX3(temporal_diff0 >> 1, temporal_diff1, temporal_diff2); \
75 #define SPAT_CHECK() \
76 int b = ((prev2[mrefs2] + next2[mrefs2]) >> 1) - c; \
77 int f = ((prev2[prefs2] + next2[prefs2]) >> 1) - e; \
80 int max = FFMAX3(de, dc, FFMIN(b, f)); \
81 int min = FFMIN3(de, dc, FFMAX(b, f)); \
82 diff = FFMAX3(diff, min, -max);
84 #define FILTER_LINE() \
86 if (FFABS(c - e) > temporal_diff0) { \
87 interpol = (((coef_hf[0] * (prev2[0] + next2[0]) \
88 - coef_hf[1] * (prev2[mrefs2] + next2[mrefs2] + prev2[prefs2] + next2[prefs2]) \
89 + coef_hf[2] * (prev2[mrefs4] + next2[mrefs4] + prev2[prefs4] + next2[prefs4])) >> 2) \
90 + coef_lf[0] * (c + e) - coef_lf[1] * (cur[mrefs3] + cur[prefs3])) >> 13; \
92 interpol = (coef_sp[0] * (c + e) - coef_sp[1] * (cur[mrefs3] + cur[prefs3])) >> 13; \
95 #define FILTER_EDGE() \
99 interpol = (c + e) >> 1;
102 if (interpol > d + diff) \
103 interpol = d + diff; \
104 else if (interpol < d - diff) \
105 interpol = d - diff; \
107 dst[0] = av_clip(interpol, 0, clip_max); \
119 int prefs3,
int mrefs3,
int parity,
int clip_max)
122 const uint8_t *cur = cur1;
129 int w,
int prefs,
int mrefs,
int prefs2,
int mrefs2,
130 int prefs3,
int mrefs3,
int prefs4,
int mrefs4,
134 const uint8_t *prev = prev1;
135 const uint8_t *cur = cur1;
136 const uint8_t *next = next1;
137 const uint8_t *prev2 =
parity ? prev : cur ;
138 const uint8_t *next2 =
parity ? cur : next;
147 int w,
int prefs,
int mrefs,
int prefs2,
int mrefs2,
148 int parity,
int clip_max,
int spat)
151 const uint8_t *prev = prev1;
152 const uint8_t *cur = cur1;
153 const uint8_t *next = next1;
154 const uint8_t *prev2 =
parity ? prev : cur ;
155 const uint8_t *next2 =
parity ? cur : next;
164 int prefs3,
int mrefs3,
int parity,
int clip_max)
166 uint16_t *
dst = dst1;
167 const uint16_t *cur = cur1;
174 int w,
int prefs,
int mrefs,
int prefs2,
int mrefs2,
175 int prefs3,
int mrefs3,
int prefs4,
int mrefs4,
178 uint16_t *
dst = dst1;
179 const uint16_t *prev = prev1;
180 const uint16_t *cur = cur1;
181 const uint16_t *next = next1;
182 const uint16_t *prev2 =
parity ? prev : cur ;
183 const uint16_t *next2 =
parity ? cur : next;
191 static void filter_edge_16bit(
void *dst1,
const void *prev1,
const void *cur1,
const void *next1,
192 int w,
int prefs,
int mrefs,
int prefs2,
int mrefs2,
193 int parity,
int clip_max,
int spat)
195 uint16_t *
dst = dst1;
196 const uint16_t *prev = prev1;
197 const uint16_t *cur = cur1;
198 const uint16_t *next = next1;
199 const uint16_t *prev2 =
parity ? prev : cur ;
200 const uint16_t *next2 =
parity ? cur : next;
void ff_bwdif_filter_intra_c(void *dst1, const void *cur1, int w, int prefs, int mrefs, int prefs3, int mrefs3, int parity, int clip_max)
static int interpol(MBContext *s, uint32_t *color, int x, int y, int linesize)
void ff_bwdif_filter_edge_c(void *dst1, const void *prev1, const void *cur1, const void *next1, int w, int prefs, int mrefs, int prefs2, int mrefs2, int parity, int clip_max, int spat)
static void bit_depth(AudioStatsContext *s, const uint64_t *const mask, uint8_t *depth)
av_cold void ff_bwdif_init_filter_line(BWDIFDSPContext *s, int bit_depth)
static const uint16_t coef_sp[2]
void ff_bwdif_init_aarch64(BWDIFDSPContext *s, int bit_depth)
static void filter_line_c_16bit(void *dst1, const void *prev1, const void *cur1, const void *next1, int w, int prefs, int mrefs, int prefs2, int mrefs2, int prefs3, int mrefs3, int prefs4, int mrefs4, int parity, int clip_max)
static void filter_edge_16bit(void *dst1, const void *prev1, const void *cur1, const void *next1, int w, int prefs, int mrefs, int prefs2, int mrefs2, int parity, int clip_max, int spat)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
void ff_bwdif_filter_line_c(void *dst1, const void *prev1, const void *cur1, const void *next1, int w, int prefs, int mrefs, int prefs2, int mrefs2, int prefs3, int mrefs3, int prefs4, int mrefs4, int parity, int clip_max)
static void filter_intra_16bit(void *dst1, const void *cur1, int w, int prefs, int mrefs, int prefs3, int mrefs3, int parity, int clip_max)
static const uint16_t coef_hf[3]
void ff_bwdif_init_x86(BWDIFDSPContext *bwdif, int bit_depth)
static const uint16_t coef_lf[2]