[svn] / branches / dev-api-3 / xvidcore / src / image / interpolate8x8.h Repository:
ViewVC logotype

Annotation of /branches/dev-api-3/xvidcore/src/image/interpolate8x8.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 692 - (view) (download)

1 : Isibaar 579 #ifndef _INTERPOLATE8X8_H_
2 :     #define _INTERPOLATE8X8_H_
3 :    
4 : Isibaar 3 #include "../utils/mem_transfer.h"
5 :    
6 : edgomez 195 typedef void (INTERPOLATE8X8) (uint8_t * const dst,
7 :     const uint8_t * const src,
8 :     const uint32_t stride,
9 :     const uint32_t rounding);
10 :     typedef INTERPOLATE8X8 *INTERPOLATE8X8_PTR;
11 : Isibaar 3
12 : Isibaar 579 typedef void (INTERPOLATE8X8_AVG2) (uint8_t *dst,
13 :     const uint8_t *src1,
14 :     const uint8_t *src2,
15 :     const uint32_t stride,
16 : Isibaar 664 const uint32_t rounding,
17 :     const uint32_t height);
18 : Isibaar 579 typedef INTERPOLATE8X8_AVG2 *INTERPOLATE8X8_AVG2_PTR;
19 :    
20 :     typedef void (INTERPOLATE8X8_AVG4) (uint8_t *dst,
21 :     const uint8_t *src1,
22 :     const uint8_t *src2,
23 :     const uint8_t *src3,
24 :     const uint8_t *src4,
25 :     const uint32_t stride,
26 :     const uint32_t rounding);
27 :     typedef INTERPOLATE8X8_AVG4 *INTERPOLATE8X8_AVG4_PTR;
28 :    
29 : Isibaar 588 typedef void (INTERPOLATE_LOWPASS) (uint8_t *dst,
30 : Isibaar 579 uint8_t *src,
31 :     int32_t stride,
32 :     int32_t rounding);
33 :    
34 : Isibaar 588 typedef INTERPOLATE_LOWPASS *INTERPOLATE_LOWPASS_PTR;
35 : Isibaar 579
36 : Isibaar 588 typedef void (INTERPOLATE_LOWPASS_HV) (uint8_t *dst1,
37 : Isibaar 579 uint8_t *dst2,
38 :     uint8_t *src,
39 :     int32_t stride,
40 :     int32_t rounding);
41 :    
42 : Isibaar 588 typedef INTERPOLATE_LOWPASS_HV *INTERPOLATE_LOWPASS_HV_PTR;
43 : Isibaar 579
44 :     typedef void (INTERPOLATE8X8_6TAP_LOWPASS) (uint8_t *dst,
45 :     uint8_t *src,
46 :     int32_t stride,
47 :     int32_t rounding);
48 :    
49 :     typedef INTERPOLATE8X8_6TAP_LOWPASS *INTERPOLATE8X8_6TAP_LOWPASS_PTR;
50 :    
51 : Isibaar 3 extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_h;
52 :     extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_v;
53 :     extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv;
54 :    
55 : Isibaar 579 extern INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;
56 :     extern INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;
57 :    
58 : Isibaar 588 extern INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_h;
59 :     extern INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_v;
60 : Isibaar 579
61 : Isibaar 588 extern INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_h;
62 :     extern INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_v;
63 : Isibaar 579
64 : Isibaar 588 extern INTERPOLATE_LOWPASS_HV_PTR interpolate8x8_lowpass_hv;
65 :     extern INTERPOLATE_LOWPASS_HV_PTR interpolate16x16_lowpass_hv;
66 :    
67 : Isibaar 579 extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h;
68 :     extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v;
69 :    
70 : Isibaar 3 INTERPOLATE8X8 interpolate8x8_halfpel_h_c;
71 :     INTERPOLATE8X8 interpolate8x8_halfpel_v_c;
72 :     INTERPOLATE8X8 interpolate8x8_halfpel_hv_c;
73 :    
74 :     INTERPOLATE8X8 interpolate8x8_halfpel_h_mmx;
75 :     INTERPOLATE8X8 interpolate8x8_halfpel_v_mmx;
76 :     INTERPOLATE8X8 interpolate8x8_halfpel_hv_mmx;
77 :    
78 :     INTERPOLATE8X8 interpolate8x8_halfpel_h_xmm;
79 :     INTERPOLATE8X8 interpolate8x8_halfpel_v_xmm;
80 :     INTERPOLATE8X8 interpolate8x8_halfpel_hv_xmm;
81 :    
82 :     INTERPOLATE8X8 interpolate8x8_halfpel_h_3dn;
83 :     INTERPOLATE8X8 interpolate8x8_halfpel_v_3dn;
84 :     INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dn;
85 :    
86 : Isibaar 209 INTERPOLATE8X8 interpolate8x8_halfpel_h_ia64;
87 :     INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;
88 :     INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;
89 :    
90 : Isibaar 579 INTERPOLATE8X8_AVG2 interpolate8x8_avg2_c;
91 :     INTERPOLATE8X8_AVG4 interpolate8x8_avg4_c;
92 : Isibaar 333
93 : Isibaar 579 INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;
94 :     INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;
95 : Isibaar 333
96 : Isibaar 588 INTERPOLATE_LOWPASS interpolate8x8_lowpass_h_c;
97 :     INTERPOLATE_LOWPASS interpolate8x8_lowpass_v_c;
98 : Isibaar 579
99 : Isibaar 588 INTERPOLATE_LOWPASS interpolate16x16_lowpass_h_c;
100 :     INTERPOLATE_LOWPASS interpolate16x16_lowpass_v_c;
101 :    
102 :     INTERPOLATE_LOWPASS_HV interpolate8x8_lowpass_hv_c;
103 :     INTERPOLATE_LOWPASS_HV interpolate16x16_lowpass_hv_c;
104 :    
105 : Isibaar 579 INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_c;
106 :     INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_c;
107 :    
108 :     INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_mmx;
109 :     INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_mmx;
110 :    
111 : edgomez 195 static __inline void
112 :     interpolate8x8_switch(uint8_t * const cur,
113 :     const uint8_t * const refn,
114 :     const uint32_t x,
115 :     const uint32_t y,
116 :     const int32_t dx,
117 :     const int dy,
118 :     const uint32_t stride,
119 :     const uint32_t rounding)
120 : Isibaar 3 {
121 :     int32_t ddx, ddy;
122 :    
123 : edgomez 195 switch (((dx & 1) << 1) + (dy & 1)) // ((dx%2)?2:0)+((dy%2)?1:0)
124 :     {
125 :     case 0:
126 :     ddx = dx / 2;
127 :     ddy = dy / 2;
128 :     transfer8x8_copy(cur + y * stride + x,
129 : Isibaar 209 refn + (int)((y + ddy) * stride + x + ddx), stride);
130 : Isibaar 3 break;
131 :    
132 : edgomez 195 case 1:
133 :     ddx = dx / 2;
134 :     ddy = (dy - 1) / 2;
135 :     interpolate8x8_halfpel_v(cur + y * stride + x,
136 : Isibaar 209 refn + (int)((y + ddy) * stride + x + ddx), stride,
137 : edgomez 195 rounding);
138 : Isibaar 3 break;
139 :    
140 : edgomez 195 case 2:
141 :     ddx = (dx - 1) / 2;
142 :     ddy = dy / 2;
143 :     interpolate8x8_halfpel_h(cur + y * stride + x,
144 : Isibaar 209 refn + (int)((y + ddy) * stride + x + ddx), stride,
145 : edgomez 195 rounding);
146 : Isibaar 3 break;
147 :    
148 : edgomez 195 default:
149 :     ddx = (dx - 1) / 2;
150 :     ddy = (dy - 1) / 2;
151 :     interpolate8x8_halfpel_hv(cur + y * stride + x,
152 : Isibaar 209 refn + (int)((y + ddy) * stride + x + ddx), stride,
153 : edgomez 195 rounding);
154 : Isibaar 3 break;
155 : edgomez 195 }
156 : Isibaar 3 }
157 : chenm001 156
158 : suxen_drol 692
159 :     static __inline void
160 :     interpolate16x16_switch(uint8_t * const cur,
161 :     const uint8_t * const refn,
162 :     const uint32_t x,
163 :     const uint32_t y,
164 :     const int32_t dx,
165 :     const int dy,
166 :     const uint32_t stride,
167 :     const uint32_t rounding)
168 :     {
169 :     interpolate8x8_switch(cur, refn, x, y, dx, dy, stride, rounding);
170 :     interpolate8x8_switch(cur, refn, x+8, y, dx, dy, stride, rounding);
171 :     interpolate8x8_switch(cur, refn, x, y+8, dx, dy, stride, rounding);
172 :     interpolate8x8_switch(cur, refn, x+8, y+8, dx, dy, stride, rounding);
173 :     }
174 :    
175 :    
176 :     static __inline void
177 :     interpolate32x32_switch(uint8_t * const cur,
178 :     const uint8_t * const refn,
179 :     const uint32_t x,
180 :     const uint32_t y,
181 :     const int32_t dx,
182 :     const int dy,
183 :     const uint32_t stride,
184 :     const uint32_t rounding)
185 :     {
186 :     interpolate16x16_switch(cur, refn, x, y, dx, dy, stride, rounding);
187 :     interpolate16x16_switch(cur, refn, x+16, y, dx, dy, stride, rounding);
188 :     interpolate16x16_switch(cur, refn, x, y+16, dx, dy, stride, rounding);
189 :     interpolate16x16_switch(cur, refn, x+16, y+16, dx, dy, stride, rounding);
190 :     }
191 :    
192 :    
193 : chl 530 static __inline uint8_t *
194 :     interpolate8x8_switch2(uint8_t * const buffer,
195 :     const uint8_t * const refn,
196 :     const uint32_t x,
197 :     const uint32_t y,
198 :     const int32_t dx,
199 :     const int dy,
200 :     const uint32_t stride,
201 :     const uint32_t rounding)
202 :     {
203 :     int32_t ddx, ddy;
204 : chenm001 156
205 : chl 530 switch (((dx & 1) << 1) + (dy & 1)) // ((dx%2)?2:0)+((dy%2)?1:0)
206 :     {
207 :     case 0:
208 :     return (uint8_t *)refn + (int)((y + dy/2) * stride + x + dx/2);
209 :    
210 :     case 1:
211 :     ddx = dx / 2;
212 :     ddy = (dy - 1) / 2;
213 :     interpolate8x8_halfpel_v(buffer,
214 :     refn + (int)((y + ddy) * stride + x + ddx), stride,
215 :     rounding);
216 :     break;
217 :    
218 :     case 2:
219 :     ddx = (dx - 1) / 2;
220 :     ddy = dy / 2;
221 :     interpolate8x8_halfpel_h(buffer,
222 :     refn + (int)((y + ddy) * stride + x + ddx), stride,
223 :     rounding);
224 :     break;
225 :    
226 :     default:
227 :     ddx = (dx - 1) / 2;
228 :     ddy = (dy - 1) / 2;
229 :     interpolate8x8_halfpel_hv(buffer,
230 :     refn + (int)((y + ddy) * stride + x + ddx), stride,
231 :     rounding);
232 :     break;
233 :     }
234 :     return buffer;
235 :     }
236 :    
237 : Isibaar 579 static __inline void interpolate8x8_quarterpel(uint8_t * const cur,
238 : Isibaar 333 uint8_t * const refn,
239 : Isibaar 579 uint8_t * const refh,
240 :     uint8_t * const refv,
241 :     uint8_t * const refhv,
242 : Isibaar 333 const uint32_t x, const uint32_t y,
243 :     const int32_t dx, const int dy,
244 :     const uint32_t stride,
245 :     const uint32_t rounding)
246 :     {
247 :     const int32_t xRef = x*4 + dx;
248 :     const int32_t yRef = y*4 + dy;
249 :    
250 :     uint8_t *src, *dst;
251 : Isibaar 579 uint8_t *halfpel_h, *halfpel_v, *halfpel_hv;
252 : Isibaar 333 int32_t x_int, y_int, x_frac, y_frac;
253 :    
254 :     x_int = xRef/4;
255 :     if (xRef < 0 && xRef % 4)
256 :     x_int--;
257 :    
258 :     x_frac = xRef - (4*x_int);
259 :    
260 :     y_int = yRef/4;
261 :     if (yRef < 0 && yRef % 4)
262 :     y_int--;
263 :    
264 :     y_frac = yRef - (4*y_int);
265 :    
266 :     src = refn + y_int * stride + x_int;
267 : Isibaar 579 halfpel_h = refh;
268 :     halfpel_v = refv;
269 :     halfpel_hv = refhv;
270 :    
271 : Isibaar 333 dst = cur + y * stride + x;
272 :    
273 :     switch((y_frac << 2) | (x_frac)) {
274 :    
275 :     case 0:
276 :     transfer8x8_copy(dst, src, stride);
277 :     break;
278 :    
279 :     case 1:
280 : Isibaar 579 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
281 : Isibaar 666 interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);
282 : Isibaar 333 break;
283 :    
284 :     case 2:
285 : Isibaar 579 interpolate8x8_lowpass_h(dst, src, stride, rounding);
286 : Isibaar 333 break;
287 :    
288 :     case 3:
289 : Isibaar 579 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
290 : Isibaar 666 interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);
291 : Isibaar 333 break;
292 :    
293 :     case 4:
294 : Isibaar 579 interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
295 : Isibaar 666 interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);
296 : Isibaar 333 break;
297 :    
298 :     case 5:
299 : Isibaar 598 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
300 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
301 : Isibaar 598 interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
302 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
303 : Isibaar 333 break;
304 :    
305 :     case 6:
306 : Isibaar 579 interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
307 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);
308 : Isibaar 333 break;
309 :    
310 :     case 7:
311 : Isibaar 598 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
312 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
313 : Isibaar 598 interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
314 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
315 : Isibaar 333 break;
316 :    
317 :     case 8:
318 : Isibaar 579 interpolate8x8_lowpass_v(dst, src, stride, rounding);
319 : Isibaar 333 break;
320 :    
321 :     case 9:
322 : Isibaar 598 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
323 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
324 : Isibaar 598 interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
325 : Isibaar 333 break;
326 :    
327 :     case 10:
328 : Isibaar 579 interpolate8x8_lowpass_hv(dst, halfpel_h, src, stride, rounding);
329 : Isibaar 333 break;
330 :    
331 :     case 11:
332 : Isibaar 598 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
333 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
334 : Isibaar 598 interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
335 : Isibaar 333 break;
336 :    
337 :     case 12:
338 : Isibaar 579 interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
339 : Isibaar 666 interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);
340 : Isibaar 333 break;
341 :    
342 :     case 13:
343 : Isibaar 598 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
344 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
345 : Isibaar 598 interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
346 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_v+stride, halfpel_hv, stride, rounding, 8);
347 : Isibaar 333 break;
348 :    
349 :     case 14:
350 : Isibaar 579 interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
351 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);
352 : Isibaar 333 break;
353 :    
354 :     case 15:
355 : Isibaar 598 interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
356 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
357 : Isibaar 598 interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
358 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_hv, halfpel_v + stride, stride, rounding, 8);
359 : Isibaar 333 break;
360 :     }
361 : Isibaar 579 }
362 :    
363 : Isibaar 588 static __inline void interpolate16x16_quarterpel(uint8_t * const cur,
364 :     uint8_t * const refn,
365 :     uint8_t * const refh,
366 :     uint8_t * const refv,
367 :     uint8_t * const refhv,
368 :     const uint32_t x, const uint32_t y,
369 :     const int32_t dx, const int dy,
370 :     const uint32_t stride,
371 :     const uint32_t rounding)
372 :     {
373 :     const int32_t xRef = x*4 + dx;
374 :     const int32_t yRef = y*4 + dy;
375 :    
376 :     uint8_t *src, *dst;
377 :     uint8_t *halfpel_h, *halfpel_v, *halfpel_hv;
378 :     int32_t x_int, y_int, x_frac, y_frac;
379 :    
380 :     x_int = xRef/4;
381 :     if (xRef < 0 && xRef % 4)
382 :     x_int--;
383 :    
384 :     x_frac = xRef - (4*x_int);
385 :    
386 :     y_int = yRef/4;
387 :     if (yRef < 0 && yRef % 4)
388 :     y_int--;
389 :    
390 :     y_frac = yRef - (4*y_int);
391 :    
392 :     src = refn + y_int * stride + x_int;
393 :     halfpel_h = refh;
394 :     halfpel_v = refv;
395 :     halfpel_hv = refhv;
396 :    
397 :     dst = cur + y * stride + x;
398 :    
399 :     switch((y_frac << 2) | (x_frac)) {
400 :    
401 :     case 0:
402 :     transfer8x8_copy(dst, src, stride);
403 :     transfer8x8_copy(dst+8, src+8, stride);
404 :     transfer8x8_copy(dst+8*stride, src+8*stride, stride);
405 :     transfer8x8_copy(dst+8*stride+8, src+8*stride+8, stride);
406 :     break;
407 :    
408 :     case 1:
409 :     interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
410 : Isibaar 666 interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);
411 :     interpolate8x8_avg2(dst+8, src+8, halfpel_h+8, stride, rounding, 8);
412 :     interpolate8x8_avg2(dst+8*stride, src+8*stride, halfpel_h+8*stride, stride, rounding, 8);
413 :     interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 8);
414 : Isibaar 588 break;
415 :    
416 :     case 2:
417 :     interpolate16x16_lowpass_h(dst, src, stride, rounding);
418 :     break;
419 :    
420 :     case 3:
421 :     interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
422 : Isibaar 666 interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);
423 :     interpolate8x8_avg2(dst+8, src + 8 + 1, halfpel_h+8, stride, rounding, 8);
424 :     interpolate8x8_avg2(dst+8*stride, src + 8*stride + 1, halfpel_h+8*stride, stride, rounding, 8);
425 :     interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8 + 1, halfpel_h+8*stride+8, stride, rounding, 8);
426 : Isibaar 588 break;
427 :    
428 :     case 4:
429 :     interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
430 : Isibaar 666 interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);
431 :     interpolate8x8_avg2(dst+8, src+8, halfpel_v+8, stride, rounding, 8);
432 :     interpolate8x8_avg2(dst+8*stride, src+8*stride, halfpel_v+8*stride, stride, rounding, 8);
433 :     interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
434 : Isibaar 588 break;
435 :    
436 :     case 5:
437 : Isibaar 598 interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
438 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
439 :     interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);
440 :     interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
441 :     interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
442 : Isibaar 598
443 :     interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
444 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_hv, halfpel_v, stride, rounding, 8);
445 :     interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+8, stride, rounding, 8);
446 :     interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+8*stride, stride, rounding, 8);
447 :     interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
448 : Isibaar 588 break;
449 :    
450 :     case 6:
451 :     interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
452 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);
453 :     interpolate8x8_avg2(dst+8, halfpel_h+8, halfpel_hv+8, stride, rounding, 8);
454 :     interpolate8x8_avg2(dst+8*stride, halfpel_h+8*stride, halfpel_hv+8*stride, stride, rounding, 8);
455 :     interpolate8x8_avg2(dst+8*stride+8, halfpel_h+8*stride+8, halfpel_hv+8*stride+8, stride, rounding, 8);
456 : Isibaar 588 break;
457 :    
458 :     case 7:
459 : Isibaar 598 interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
460 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
461 :     interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);
462 :     interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
463 :     interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
464 : Isibaar 598
465 :     interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
466 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_hv, halfpel_v, stride, rounding, 8);
467 :     interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+8, stride, rounding, 8);
468 :     interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+8*stride, stride, rounding, 8);
469 :     interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
470 : Isibaar 588 break;
471 :    
472 :     case 8:
473 :     interpolate16x16_lowpass_v(dst, src, stride, rounding);
474 :     break;
475 :    
476 :     case 9:
477 : Isibaar 598 interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
478 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
479 :     interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);
480 :     interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
481 :     interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
482 : Isibaar 598 interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
483 : Isibaar 588 break;
484 :    
485 :     case 10:
486 :     interpolate16x16_lowpass_hv(dst, halfpel_h, src, stride, rounding);
487 :     break;
488 :    
489 :     case 11:
490 : Isibaar 598 interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
491 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
492 :     interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);
493 :     interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
494 :     interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
495 : Isibaar 598 interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
496 : Isibaar 588 break;
497 :    
498 :     case 12:
499 :     interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
500 : Isibaar 666 interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);
501 :     interpolate8x8_avg2(dst+8, src+stride+8, halfpel_v+8, stride, rounding, 8);
502 :     interpolate8x8_avg2(dst+8*stride, src+stride+8*stride, halfpel_v+8*stride, stride, rounding, 8);
503 :     interpolate8x8_avg2(dst+8*stride+8, src+stride+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
504 : Isibaar 588 break;
505 :    
506 :     case 13:
507 : Isibaar 598 interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
508 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
509 :     interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);
510 :     interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
511 :     interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
512 : Isibaar 598
513 :     interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
514 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_hv, halfpel_v+stride, stride, rounding, 8);
515 :     interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+stride+8, stride, rounding, 8);
516 :     interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+stride+8*stride, stride, rounding, 8);
517 :     interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+stride+8*stride+8, stride, rounding, 8);
518 : Isibaar 588 break;
519 :    
520 :     case 14:
521 :     interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
522 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);
523 :     interpolate8x8_avg2(dst+8, halfpel_h+stride+8, halfpel_hv+8, stride, rounding, 8);
524 :     interpolate8x8_avg2(dst+8*stride, halfpel_h+stride+8*stride, halfpel_hv+8*stride, stride, rounding, 8);
525 :     interpolate8x8_avg2(dst+8*stride+8, halfpel_h+stride+8*stride+8, halfpel_hv+8*stride+8, stride, rounding, 8);
526 : Isibaar 588 break;
527 :    
528 :     case 15:
529 : Isibaar 598 interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
530 : Isibaar 664 interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
531 :     interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);
532 :     interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
533 :     interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
534 : Isibaar 598
535 :     interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
536 : Isibaar 666 interpolate8x8_avg2(dst, halfpel_hv, halfpel_v+stride, stride, rounding, 8);
537 :     interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+stride+8, stride, rounding, 8);
538 :     interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+stride+8*stride, stride, rounding, 8);
539 :     interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+stride+8*stride+8, stride, rounding, 8);
540 : Isibaar 588 break;
541 :     }
542 :     }
543 : chl 597 #endif

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4