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

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