[cvs] / xvidcore / src / image / interpolate8x8.h Repository:
ViewVC logotype

Annotation of /xvidcore/src/image/interpolate8x8.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5.2.7 - (view) (download)

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

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