31 |
|
|
32 |
|
|
33 |
#include "../portab.h" |
#include "../portab.h" |
34 |
|
#include "../global.h" |
35 |
#include "interpolate8x8.h" |
#include "interpolate8x8.h" |
36 |
|
|
37 |
// function pointers |
// function pointers |
42 |
INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2; |
INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2; |
43 |
INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4; |
INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4; |
44 |
|
|
45 |
INTERPOLATE8X8_LOWPASS_PTR interpolate8x8_lowpass_h; |
INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_h; |
46 |
INTERPOLATE8X8_LOWPASS_PTR interpolate8x8_lowpass_v; |
INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_v; |
47 |
INTERPOLATE8X8_LOWPASS_HV_PTR interpolate8x8_lowpass_hv; |
|
48 |
|
INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_h; |
49 |
|
INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_v; |
50 |
|
|
51 |
|
INTERPOLATE_LOWPASS_HV_PTR interpolate8x8_lowpass_hv; |
52 |
|
INTERPOLATE_LOWPASS_HV_PTR interpolate16x16_lowpass_hv; |
53 |
|
|
54 |
INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h; |
INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h; |
55 |
INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v; |
INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v; |
56 |
|
|
57 |
void interpolate8x8_avg2_c(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, const uint32_t stride, const uint32_t rounding) |
void interpolate8x8_avg2_c(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, const uint32_t stride, const uint32_t rounding, const uint32_t height) |
58 |
{ |
{ |
59 |
int32_t i; |
uint32_t i; |
60 |
const int32_t round = 1 - rounding; |
const int32_t round = 1 - rounding; |
61 |
|
|
62 |
for(i = 0; i < 8; i++) |
for(i = 0; i < height; i++) |
63 |
{ |
{ |
64 |
dst[0] = (src1[0] + src2[0] + round) >> 1; |
dst[0] = (src1[0] + src2[0] + round) >> 1; |
65 |
dst[1] = (src1[1] + src2[1] + round) >> 1; |
dst[1] = (src1[1] + src2[1] + round) >> 1; |
108 |
const uint32_t stride, |
const uint32_t stride, |
109 |
const uint32_t rounding) |
const uint32_t rounding) |
110 |
{ |
{ |
111 |
uint32_t i, j; |
intptr_t j; |
|
|
|
|
for (j = 0; j < 8; j++) { |
|
|
for (i = 0; i < 8; i++) { |
|
|
|
|
|
int16_t tot = |
|
|
(int32_t) src[j * stride + i] + (int32_t) src[j * stride + i + |
|
|
1]; |
|
112 |
|
|
113 |
tot = (int32_t) ((tot + 1 - rounding) >> 1); |
if (rounding) |
114 |
dst[j * stride + i] = (uint8_t) tot; |
for (j = 7*stride; j >= 0; j-=stride) |
115 |
} |
{ |
116 |
|
dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] )>>1); |
117 |
|
dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] )>>1); |
118 |
|
dst[j + 2] = (uint8_t)((src[j + 2] + src[j + 3] )>>1); |
119 |
|
dst[j + 3] = (uint8_t)((src[j + 3] + src[j + 4] )>>1); |
120 |
|
dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] )>>1); |
121 |
|
dst[j + 5] = (uint8_t)((src[j + 5] + src[j + 6] )>>1); |
122 |
|
dst[j + 6] = (uint8_t)((src[j + 6] + src[j + 7] )>>1); |
123 |
|
dst[j + 7] = (uint8_t)((src[j + 7] + src[j + 8] )>>1); |
124 |
|
} |
125 |
|
else |
126 |
|
for (j = 0; j < 8*stride; j+=stride) /* forward or backwards? Who knows ... */ |
127 |
|
{ |
128 |
|
dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] + 1)>>1); |
129 |
|
dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] + 1)>>1); |
130 |
|
dst[j + 2] = (uint8_t)((src[j + 2] + src[j + 3] + 1)>>1); |
131 |
|
dst[j + 3] = (uint8_t)((src[j + 3] + src[j + 4] + 1)>>1); |
132 |
|
dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] + 1)>>1); |
133 |
|
dst[j + 5] = (uint8_t)((src[j + 5] + src[j + 6] + 1)>>1); |
134 |
|
dst[j + 6] = (uint8_t)((src[j + 6] + src[j + 7] + 1)>>1); |
135 |
|
dst[j + 7] = (uint8_t)((src[j + 7] + src[j + 8] + 1)>>1); |
136 |
} |
} |
137 |
} |
} |
138 |
|
|
144 |
const uint32_t stride, |
const uint32_t stride, |
145 |
const uint32_t rounding) |
const uint32_t rounding) |
146 |
{ |
{ |
147 |
uint32_t i, j; |
intptr_t j; |
148 |
|
// const uint8_t * const src2 = src+stride; /* using a second pointer is _not_ faster here */ |
|
for (j = 0; j < 8; j++) { |
|
|
for (i = 0; i < 8; i++) { |
|
|
int16_t tot = src[j * stride + i] + src[j * stride + i + stride]; |
|
149 |
|
|
150 |
tot = ((tot + 1 - rounding) >> 1); |
if (rounding) |
151 |
dst[j * stride + i] = (uint8_t) tot; |
for (j = 0; j < 8*stride; j+=stride) /* forward is better. Some automatic prefetch perhaps. */ |
152 |
} |
{ |
153 |
|
dst[j + 0] = (uint8_t)((src[j + 0] + src[j + stride + 0] )>>1); |
154 |
|
dst[j + 1] = (uint8_t)((src[j + 1] + src[j + stride + 1] )>>1); |
155 |
|
dst[j + 2] = (uint8_t)((src[j + 2] + src[j + stride + 2] )>>1); |
156 |
|
dst[j + 3] = (uint8_t)((src[j + 3] + src[j + stride + 3] )>>1); |
157 |
|
dst[j + 4] = (uint8_t)((src[j + 4] + src[j + stride + 4] )>>1); |
158 |
|
dst[j + 5] = (uint8_t)((src[j + 5] + src[j + stride + 5] )>>1); |
159 |
|
dst[j + 6] = (uint8_t)((src[j + 6] + src[j + stride + 6] )>>1); |
160 |
|
dst[j + 7] = (uint8_t)((src[j + 7] + src[j + stride + 7] )>>1); |
161 |
|
} |
162 |
|
else |
163 |
|
for (j = 0; j < 8*stride; j+=stride) |
164 |
|
{ |
165 |
|
dst[j + 0] = (uint8_t)((src[j + 0] + src[j + stride + 0] + 1)>>1); |
166 |
|
dst[j + 1] = (uint8_t)((src[j + 1] + src[j + stride + 1] + 1)>>1); |
167 |
|
dst[j + 2] = (uint8_t)((src[j + 2] + src[j + stride + 2] + 1)>>1); |
168 |
|
dst[j + 3] = (uint8_t)((src[j + 3] + src[j + stride + 3] + 1)>>1); |
169 |
|
dst[j + 4] = (uint8_t)((src[j + 4] + src[j + stride + 4] + 1)>>1); |
170 |
|
dst[j + 5] = (uint8_t)((src[j + 5] + src[j + stride + 5] + 1)>>1); |
171 |
|
dst[j + 6] = (uint8_t)((src[j + 6] + src[j + stride + 6] + 1)>>1); |
172 |
|
dst[j + 7] = (uint8_t)((src[j + 7] + src[j + stride + 7] + 1)>>1); |
173 |
} |
} |
174 |
} |
} |
175 |
|
|
180 |
const uint32_t stride, |
const uint32_t stride, |
181 |
const uint32_t rounding) |
const uint32_t rounding) |
182 |
{ |
{ |
183 |
uint32_t i, j; |
intptr_t j; |
184 |
|
|
185 |
for (j = 0; j < 8; j++) { |
if (rounding) |
186 |
for (i = 0; i < 8; i++) { |
for (j = 7*stride; j >= 0; j-=stride) |
187 |
int16_t tot = |
{ |
188 |
src[j * stride + i] + src[j * stride + i + 1] + |
dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +1)>>2); |
189 |
src[j * stride + i + stride] + src[j * stride + i + stride + |
dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +1)>>2); |
190 |
1]; |
dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +1)>>2); |
191 |
tot = ((tot + 2 - rounding) >> 2); |
dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +1)>>2); |
192 |
dst[j * stride + i] = (uint8_t) tot; |
dst[j + 4] = (uint8_t)((src[j+4] + src[j+5] + src[j+stride+4] + src[j+stride+5] +1)>>2); |
193 |
} |
dst[j + 5] = (uint8_t)((src[j+5] + src[j+6] + src[j+stride+5] + src[j+stride+6] +1)>>2); |
194 |
|
dst[j + 6] = (uint8_t)((src[j+6] + src[j+7] + src[j+stride+6] + src[j+stride+7] +1)>>2); |
195 |
|
dst[j + 7] = (uint8_t)((src[j+7] + src[j+8] + src[j+stride+7] + src[j+stride+8] +1)>>2); |
196 |
|
} |
197 |
|
else |
198 |
|
for (j = 7*stride; j >= 0; j-=stride) |
199 |
|
{ |
200 |
|
dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +2)>>2); |
201 |
|
dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +2)>>2); |
202 |
|
dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +2)>>2); |
203 |
|
dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +2)>>2); |
204 |
|
dst[j + 4] = (uint8_t)((src[j+4] + src[j+5] + src[j+stride+4] + src[j+stride+5] +2)>>2); |
205 |
|
dst[j + 5] = (uint8_t)((src[j+5] + src[j+6] + src[j+stride+5] + src[j+stride+6] +2)>>2); |
206 |
|
dst[j + 6] = (uint8_t)((src[j+6] + src[j+7] + src[j+stride+6] + src[j+stride+7] +2)>>2); |
207 |
|
dst[j + 7] = (uint8_t)((src[j+7] + src[j+8] + src[j+stride+7] + src[j+stride+8] +2)>>2); |
208 |
} |
} |
209 |
} |
} |
210 |
|
|
211 |
|
|
212 |
|
|
213 |
|
|
214 |
/************************************************************* |
/************************************************************* |
215 |
* QPEL STUFF STARTS HERE * |
* QPEL STUFF STARTS HERE * |
216 |
*************************************************************/ |
*************************************************************/ |
217 |
|
|
|
#define CLIP(X,A,B) (X < A) ? (A) : ((X > B) ? (B) : (X)) |
|
|
|
|
218 |
void interpolate8x8_6tap_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
void interpolate8x8_6tap_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
219 |
{ |
{ |
220 |
int32_t i; |
int32_t i; |
237 |
} |
} |
238 |
} |
} |
239 |
|
|
240 |
|
void interpolate16x16_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
241 |
|
{ |
242 |
|
int32_t i; |
243 |
|
uint8_t round_add = 16 - rounding; |
244 |
|
|
245 |
|
for(i = 0; i < 17; i++) |
246 |
|
{ |
247 |
|
|
248 |
|
dst[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255); |
249 |
|
dst[1] = CLIP(((19 * src[1] + 20 * src[2] - src[5] + 3 * (src[4] - src[0] - (src[3]<<1)) + round_add) >> 5), 0, 255); |
250 |
|
dst[2] = CLIP(((20 * (src[2] + src[3]) + (src[0]<<1) + 3 * (src[5] - ((src[1] + src[4])<<1)) - src[6] + round_add) >> 5), 0, 255); |
251 |
|
|
252 |
|
dst[3] = CLIP(((20 * (src[3] + src[4]) + 3 * ((src[6] + src[1]) - ((src[2] + src[5])<<1)) - (src[0] + src[7]) + round_add) >> 5), 0, 255); |
253 |
|
dst[4] = CLIP(((20 * (src[4] + src[5]) - 3 * (((src[3] + src[6])<<1) - (src[2] + src[7])) - (src[1] + src[8]) + round_add) >> 5), 0, 255); |
254 |
|
dst[5] = CLIP(((20 * (src[5] + src[6]) - 3 * (((src[4] + src[7])<<1) - (src[3] + src[8])) - (src[2] + src[9]) + round_add) >> 5), 0, 255); |
255 |
|
dst[6] = CLIP(((20 * (src[6] + src[7]) - 3 * (((src[5] + src[8])<<1) - (src[4] + src[9])) - (src[3] + src[10]) + round_add) >> 5), 0, 255); |
256 |
|
dst[7] = CLIP(((20 * (src[7] + src[8]) - 3 * (((src[6] + src[9])<<1) - (src[5] + src[10])) - (src[4] + src[11]) + round_add) >> 5), 0, 255); |
257 |
|
dst[8] = CLIP(((20 * (src[8] + src[9]) - 3 * (((src[7] + src[10])<<1) - (src[6] + src[11])) - (src[5] + src[12]) + round_add) >> 5), 0, 255); |
258 |
|
dst[9] = CLIP(((20 * (src[9] + src[10]) - 3 * (((src[8] + src[11])<<1) - (src[7] + src[12])) - (src[6] + src[13]) + round_add) >> 5), 0, 255); |
259 |
|
dst[10] = CLIP(((20 * (src[10] + src[11]) - 3 * (((src[9] + src[12])<<1) - (src[8] + src[13])) - (src[7] + src[14]) + round_add) >> 5), 0, 255); |
260 |
|
dst[11] = CLIP(((20 * (src[11] + src[12]) - 3 * (((src[10] + src[13])<<1) - (src[9] + src[14])) - (src[8] + src[15]) + round_add) >> 5), 0, 255); |
261 |
|
dst[12] = CLIP(((20 * (src[12] + src[13]) - 3 * (((src[11] + src[14])<<1) - (src[10] + src[15])) - (src[9] + src[16]) + round_add) >> 5), 0, 255); |
262 |
|
|
263 |
|
dst[13] = CLIP(((20 * (src[13] + src[14]) + (src[16]<<1) + 3 * (src[11] - ((src[12] + src[15]) << 1)) - src[10] + round_add) >> 5), 0, 255); |
264 |
|
dst[14] = CLIP(((19 * src[15] + 20 * src[14] + 3 * (src[12] - src[16] - (src[13] << 1)) - src[11] + round_add) >> 5), 0, 255); |
265 |
|
dst[15] = CLIP(((23 * src[15] + 7 * ((src[16]<<1) - src[14]) + 3 * src[13] - src[12] + round_add) >> 5), 0, 255); |
266 |
|
|
267 |
|
dst += stride; |
268 |
|
src += stride; |
269 |
|
} |
270 |
|
} |
271 |
|
|
272 |
void interpolate8x8_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
void interpolate8x8_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
273 |
{ |
{ |
274 |
int32_t i; |
int32_t i; |
275 |
uint8_t round_add = 16 - rounding; |
uint8_t round_add = 16 - rounding; |
276 |
|
|
277 |
for(i = 0; i < 8; i++) |
for(i = 0; i < 9; i++) |
278 |
{ |
{ |
279 |
|
|
280 |
dst[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255); |
dst[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255); |
326 |
} |
} |
327 |
} |
} |
328 |
|
|
329 |
|
void interpolate16x16_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
330 |
|
{ |
331 |
|
int32_t i; |
332 |
|
uint8_t round_add = 16 - rounding; |
333 |
|
|
334 |
|
for(i = 0; i < 17; i++) |
335 |
|
{ |
336 |
|
int32_t src0 = src[0]; |
337 |
|
int32_t src1 = src[stride]; |
338 |
|
int32_t src2 = src[2 * stride]; |
339 |
|
int32_t src3 = src[3 * stride]; |
340 |
|
int32_t src4 = src[4 * stride]; |
341 |
|
int32_t src5 = src[5 * stride]; |
342 |
|
int32_t src6 = src[6 * stride]; |
343 |
|
int32_t src7 = src[7 * stride]; |
344 |
|
int32_t src8 = src[8 * stride]; |
345 |
|
int32_t src9 = src[9 * stride]; |
346 |
|
int32_t src10 = src[10 * stride]; |
347 |
|
int32_t src11 = src[11 * stride]; |
348 |
|
int32_t src12 = src[12 * stride]; |
349 |
|
int32_t src13 = src[13 * stride]; |
350 |
|
int32_t src14 = src[14 * stride]; |
351 |
|
int32_t src15 = src[15 * stride]; |
352 |
|
int32_t src16 = src[16 * stride]; |
353 |
|
|
354 |
|
|
355 |
|
dst[0] = CLIP(((7 * ((src0<<1) - src2) + 23 * src1 + 3 * src3 - src4 + round_add) >> 5), 0, 255); |
356 |
|
dst[stride] = CLIP(((19 * src1 + 20 * src2 - src5 + 3 * (src4 - src0 - (src3<<1)) + round_add) >> 5), 0, 255); |
357 |
|
dst[2*stride] = CLIP(((20 * (src2 + src3) + (src0<<1) + 3 * (src5 - ((src1 + src4)<<1)) - src6 + round_add) >> 5), 0, 255); |
358 |
|
|
359 |
|
dst[3*stride] = CLIP(((20 * (src3 + src4) + 3 * ((src6 + src1) - ((src2 + src5)<<1)) - (src0 + src7) + round_add) >> 5), 0, 255); |
360 |
|
dst[4*stride] = CLIP(((20 * (src4 + src5) - 3 * (((src3 + src6)<<1) - (src2 + src7)) - (src1 + src8) + round_add) >> 5), 0, 255); |
361 |
|
dst[5*stride] = CLIP(((20 * (src5 + src6) - 3 * (((src4 + src7)<<1) - (src3 + src8)) - (src2 + src9) + round_add) >> 5), 0, 255); |
362 |
|
dst[6*stride] = CLIP(((20 * (src6 + src7) - 3 * (((src5 + src8)<<1) - (src4 + src9)) - (src3 + src10) + round_add) >> 5), 0, 255); |
363 |
|
dst[7*stride] = CLIP(((20 * (src7 + src8) - 3 * (((src6 + src9)<<1) - (src5 + src10)) - (src4 + src11) + round_add) >> 5), 0, 255); |
364 |
|
dst[8*stride] = CLIP(((20 * (src8 + src9) - 3 * (((src7 + src10)<<1) - (src6 + src11)) - (src5 + src12) + round_add) >> 5), 0, 255); |
365 |
|
dst[9*stride] = CLIP(((20 * (src9 + src10) - 3 * (((src8 + src11)<<1) - (src7 + src12)) - (src6 + src13) + round_add) >> 5), 0, 255); |
366 |
|
dst[10*stride] = CLIP(((20 * (src10 + src11) - 3 * (((src9 + src12)<<1) - (src8 + src13)) - (src7 + src14) + round_add) >> 5), 0, 255); |
367 |
|
dst[11*stride] = CLIP(((20 * (src11 + src12) - 3 * (((src10 + src13)<<1) - (src9 + src14)) - (src8 + src15) + round_add) >> 5), 0, 255); |
368 |
|
dst[12*stride] = CLIP(((20 * (src12 + src13) - 3 * (((src11 + src14)<<1) - (src10 + src15)) - (src9 + src16) + round_add) >> 5), 0, 255); |
369 |
|
|
370 |
|
dst[13*stride] = CLIP(((20 * (src13 + src14) + (src16<<1) + 3 * (src11 - ((src12 + src15) << 1)) - src10 + round_add) >> 5), 0, 255); |
371 |
|
dst[14*stride] = CLIP(((19 * src15 + 20 * src14 + 3 * (src12 - src16 - (src13 << 1)) - src11 + round_add) >> 5), 0, 255); |
372 |
|
dst[15*stride] = CLIP(((23 * src15 + 7 * ((src16<<1) - src14) + 3 * src13 - src12 + round_add) >> 5), 0, 255); |
373 |
|
|
374 |
|
dst++; |
375 |
|
src++; |
376 |
|
} |
377 |
|
} |
378 |
|
|
379 |
void interpolate8x8_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
void interpolate8x8_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding) |
380 |
{ |
{ |
381 |
int32_t i; |
int32_t i; |
382 |
uint8_t round_add = 16 - rounding; |
uint8_t round_add = 16 - rounding; |
383 |
|
|
384 |
for(i = 0; i < 8; i++) |
for(i = 0; i < 9; i++) |
385 |
{ |
{ |
386 |
int32_t src0 = src[0]; |
int32_t src0 = src[0]; |
387 |
int32_t src1 = src[stride]; |
int32_t src1 = src[stride]; |
407 |
} |
} |
408 |
} |
} |
409 |
|
|
410 |
|
void interpolate16x16_lowpass_hv_c(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t stride, int32_t rounding) |
411 |
|
{ |
412 |
|
int32_t i; |
413 |
|
uint8_t round_add = 16 - rounding; |
414 |
|
uint8_t *h_ptr = dst2; |
415 |
|
|
416 |
|
for(i = 0; i < 17; i++) |
417 |
|
{ |
418 |
|
|
419 |
|
h_ptr[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255); |
420 |
|
h_ptr[1] = CLIP(((19 * src[1] + 20 * src[2] - src[5] + 3 * (src[4] - src[0] - (src[3]<<1)) + round_add) >> 5), 0, 255); |
421 |
|
h_ptr[2] = CLIP(((20 * (src[2] + src[3]) + (src[0]<<1) + 3 * (src[5] - ((src[1] + src[4])<<1)) - src[6] + round_add) >> 5), 0, 255); |
422 |
|
|
423 |
|
h_ptr[3] = CLIP(((20 * (src[3] + src[4]) + 3 * ((src[6] + src[1]) - ((src[2] + src[5])<<1)) - (src[0] + src[7]) + round_add) >> 5), 0, 255); |
424 |
|
h_ptr[4] = CLIP(((20 * (src[4] + src[5]) - 3 * (((src[3] + src[6])<<1) - (src[2] + src[7])) - (src[1] + src[8]) + round_add) >> 5), 0, 255); |
425 |
|
h_ptr[5] = CLIP(((20 * (src[5] + src[6]) - 3 * (((src[4] + src[7])<<1) - (src[3] + src[8])) - (src[2] + src[9]) + round_add) >> 5), 0, 255); |
426 |
|
h_ptr[6] = CLIP(((20 * (src[6] + src[7]) - 3 * (((src[5] + src[8])<<1) - (src[4] + src[9])) - (src[3] + src[10]) + round_add) >> 5), 0, 255); |
427 |
|
h_ptr[7] = CLIP(((20 * (src[7] + src[8]) - 3 * (((src[6] + src[9])<<1) - (src[5] + src[10])) - (src[4] + src[11]) + round_add) >> 5), 0, 255); |
428 |
|
h_ptr[8] = CLIP(((20 * (src[8] + src[9]) - 3 * (((src[7] + src[10])<<1) - (src[6] + src[11])) - (src[5] + src[12]) + round_add) >> 5), 0, 255); |
429 |
|
h_ptr[9] = CLIP(((20 * (src[9] + src[10]) - 3 * (((src[8] + src[11])<<1) - (src[7] + src[12])) - (src[6] + src[13]) + round_add) >> 5), 0, 255); |
430 |
|
h_ptr[10] = CLIP(((20 * (src[10] + src[11]) - 3 * (((src[9] + src[12])<<1) - (src[8] + src[13])) - (src[7] + src[14]) + round_add) >> 5), 0, 255); |
431 |
|
h_ptr[11] = CLIP(((20 * (src[11] + src[12]) - 3 * (((src[10] + src[13])<<1) - (src[9] + src[14])) - (src[8] + src[15]) + round_add) >> 5), 0, 255); |
432 |
|
h_ptr[12] = CLIP(((20 * (src[12] + src[13]) - 3 * (((src[11] + src[14])<<1) - (src[10] + src[15])) - (src[9] + src[16]) + round_add) >> 5), 0, 255); |
433 |
|
|
434 |
|
h_ptr[13] = CLIP(((20 * (src[13] + src[14]) + (src[16]<<1) + 3 * (src[11] - ((src[12] + src[15]) << 1)) - src[10] + round_add) >> 5), 0, 255); |
435 |
|
h_ptr[14] = CLIP(((19 * src[15] + 20 * src[14] + 3 * (src[12] - src[16] - (src[13] << 1)) - src[11] + round_add) >> 5), 0, 255); |
436 |
|
h_ptr[15] = CLIP(((23 * src[15] + 7 * ((src[16]<<1) - src[14]) + 3 * src[13] - src[12] + round_add) >> 5), 0, 255); |
437 |
|
|
438 |
|
h_ptr += stride; |
439 |
|
src += stride; |
440 |
|
} |
441 |
|
|
442 |
|
interpolate16x16_lowpass_v_c(dst1, dst2, stride, rounding); |
443 |
|
|
444 |
|
} |
445 |
|
|
446 |
void interpolate8x8_lowpass_hv_c(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t stride, int32_t rounding) |
void interpolate8x8_lowpass_hv_c(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t stride, int32_t rounding) |
447 |
{ |
{ |
448 |
int32_t i; |
int32_t i; |