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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5.2.2, Sat Oct 5 21:30:50 2002 UTC revision 1.5.2.9, Thu Dec 19 00:39:47 2002 UTC
# Line 13  Line 13 
13                                                                          const uint8_t *src1,                                                                          const uint8_t *src1,
14                                                                          const uint8_t *src2,                                                                          const uint8_t *src2,
15                                                                          const uint32_t stride,                                                                          const uint32_t stride,
16                                                                          const uint32_t rounding);                                                                          const uint32_t rounding,
17                                                                            const uint32_t height);
18  typedef INTERPOLATE8X8_AVG2 *INTERPOLATE8X8_AVG2_PTR;  typedef INTERPOLATE8X8_AVG2 *INTERPOLATE8X8_AVG2_PTR;
19    
20  typedef void (INTERPOLATE8X8_AVG4) (uint8_t *dst,  typedef void (INTERPOLATE8X8_AVG4) (uint8_t *dst,
# Line 25  Line 26 
26                                                                          const uint32_t rounding);                                                                          const uint32_t rounding);
27  typedef INTERPOLATE8X8_AVG4 *INTERPOLATE8X8_AVG4_PTR;  typedef INTERPOLATE8X8_AVG4 *INTERPOLATE8X8_AVG4_PTR;
28    
29  typedef void (INTERPOLATE8X8_LOWPASS) (uint8_t *dst,  typedef void (INTERPOLATE_LOWPASS) (uint8_t *dst,
30                                                                             uint8_t *src,                                                                             uint8_t *src,
31                                                                             int32_t stride,                                                                             int32_t stride,
32                                                                             int32_t rounding);                                                                             int32_t rounding);
33    
34  typedef INTERPOLATE8X8_LOWPASS *INTERPOLATE8X8_LOWPASS_PTR;  typedef INTERPOLATE_LOWPASS *INTERPOLATE_LOWPASS_PTR;
35    
36  typedef void (INTERPOLATE8X8_LOWPASS_HV) (uint8_t *dst1,  typedef void (INTERPOLATE_LOWPASS_HV) (uint8_t *dst1,
37                                                                                    uint8_t *dst2,                                                                                    uint8_t *dst2,
38                                                                                    uint8_t *src,                                                                                    uint8_t *src,
39                                                                                    int32_t stride,                                                                                    int32_t stride,
40                                                                                    int32_t rounding);                                                                                    int32_t rounding);
41    
42  typedef INTERPOLATE8X8_LOWPASS_HV *INTERPOLATE8X8_LOWPASS_HV_PTR;  typedef INTERPOLATE_LOWPASS_HV *INTERPOLATE_LOWPASS_HV_PTR;
43    
44  typedef void (INTERPOLATE8X8_6TAP_LOWPASS) (uint8_t *dst,  typedef void (INTERPOLATE8X8_6TAP_LOWPASS) (uint8_t *dst,
45                                                                                  uint8_t *src,                                                                                  uint8_t *src,
# Line 54  Line 55 
55  extern INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;  extern INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;
56  extern INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;  extern INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;
57    
58  extern INTERPOLATE8X8_LOWPASS_PTR interpolate8x8_lowpass_h;  extern INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_h;
59  extern INTERPOLATE8X8_LOWPASS_PTR interpolate8x8_lowpass_v;  extern INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_v;
60    
61    extern INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_h;
62    extern INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_v;
63    
64  extern INTERPOLATE8X8_LOWPASS_HV_PTR interpolate8x8_lowpass_hv;  extern INTERPOLATE_LOWPASS_HV_PTR interpolate8x8_lowpass_hv;
65    extern INTERPOLATE_LOWPASS_HV_PTR interpolate16x16_lowpass_hv;
66    
67  extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h;  extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h;
68  extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v;  extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v;
# Line 78  Line 83 
83  INTERPOLATE8X8 interpolate8x8_halfpel_v_3dn;  INTERPOLATE8X8 interpolate8x8_halfpel_v_3dn;
84  INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dn;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dn;
85    
86    INTERPOLATE8X8 interpolate8x8_halfpel_h_3dne;
87    INTERPOLATE8X8 interpolate8x8_halfpel_v_3dne;
88    INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dne;
89    
90  INTERPOLATE8X8 interpolate8x8_halfpel_h_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_h_ia64;
91  INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;
92  INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;
# Line 88  Line 97 
97  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;
98  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;
99    
100  INTERPOLATE8X8_LOWPASS interpolate8x8_lowpass_h_c;  INTERPOLATE_LOWPASS interpolate8x8_lowpass_h_c;
101  INTERPOLATE8X8_LOWPASS interpolate8x8_lowpass_v_c;  INTERPOLATE_LOWPASS interpolate8x8_lowpass_v_c;
102  INTERPOLATE8X8_LOWPASS_HV interpolate8x8_lowpass_hv_c;  
103    INTERPOLATE_LOWPASS interpolate16x16_lowpass_h_c;
104    INTERPOLATE_LOWPASS interpolate16x16_lowpass_v_c;
105    
106    INTERPOLATE_LOWPASS_HV interpolate8x8_lowpass_hv_c;
107    INTERPOLATE_LOWPASS_HV interpolate16x16_lowpass_hv_c;
108    
109  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_c;  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_c;
110  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_c;  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_c;
# Line 145  Line 159 
159          }          }
160  }  }
161    
162    
163    static __inline void
164    interpolate16x16_switch(uint8_t * const cur,
165                                              const uint8_t * const refn,
166                                              const uint32_t x,
167                                              const uint32_t y,
168                                              const int32_t dx,
169                                              const int dy,
170                                              const uint32_t stride,
171                                              const uint32_t rounding)
172    {
173            interpolate8x8_switch(cur, refn, x,   y,   dx, dy, stride, rounding);
174            interpolate8x8_switch(cur, refn, x+8, y,   dx, dy, stride, rounding);
175            interpolate8x8_switch(cur, refn, x,   y+8, dx, dy, stride, rounding);
176            interpolate8x8_switch(cur, refn, x+8, y+8, dx, dy, stride, rounding);
177    }
178    
179    
180    static __inline void
181    interpolate32x32_switch(uint8_t * const cur,
182                                              const uint8_t * const refn,
183                                              const uint32_t x,
184                                              const uint32_t y,
185                                              const int32_t dx,
186                                              const int dy,
187                                              const uint32_t stride,
188                                              const uint32_t rounding)
189    {
190            interpolate16x16_switch(cur, refn, x,    y,    dx, dy, stride, rounding);
191            interpolate16x16_switch(cur, refn, x+16, y,    dx, dy, stride, rounding);
192            interpolate16x16_switch(cur, refn, x,    y+16, dx, dy, stride, rounding);
193            interpolate16x16_switch(cur, refn, x+16, y+16, dx, dy, stride, rounding);
194    }
195    
196    
197  static __inline uint8_t *  static __inline uint8_t *
198  interpolate8x8_switch2(uint8_t * const buffer,  interpolate8x8_switch2(uint8_t * const buffer,
199                                            const uint8_t * const refn,                                            const uint8_t * const refn,
# Line 189  Line 238 
238          return buffer;          return buffer;
239  }  }
240    
   
241  static __inline void interpolate8x8_quarterpel(uint8_t * const cur,  static __inline void interpolate8x8_quarterpel(uint8_t * const cur,
242                                       uint8_t * const refn,                                       uint8_t * const refn,
243                                           uint8_t * const refh,                                           uint8_t * const refh,
# Line 234  Line 282 
282    
283          case 1:          case 1:
284                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
285                  interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding);                  interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);
286                  break;                  break;
287    
288          case 2:          case 2:
# Line 243  Line 291 
291    
292          case 3:          case 3:
293                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
294                  interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding);                  interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);
295                  break;                  break;
296    
297          case 4:          case 4:
298                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
299                  interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding);                  interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);
300                  break;                  break;
301    
302          case 5:          case 5:
303                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
304                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
305                  interpolate8x8_avg4(dst, src, halfpel_h, halfpel_v, halfpel_hv, stride, rounding);                  interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
306                    interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
307                  break;                  break;
308    
309          case 6:          case 6:
310                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
311                  interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding);                  interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);
312                  break;                  break;
313    
314          case 7:          case 7:
315                  interpolate8x8_lowpass_v(halfpel_v, src+1, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
316                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
317                  interpolate8x8_avg4(dst, src+1, halfpel_h, halfpel_v, halfpel_hv, stride, rounding);                  interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
318                    interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
319                  break;                  break;
320    
321          case 8:          case 8:
# Line 273  Line 323 
323                  break;                  break;
324    
325          case 9:          case 9:
326                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
327                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
328                  interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding);                  interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
329                  break;                  break;
330    
331          case 10:          case 10:
# Line 283  Line 333 
333                  break;                  break;
334    
335          case 11:          case 11:
336                  interpolate8x8_lowpass_v(halfpel_v, src+1, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
337                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
338                  interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding);                  interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
339                  break;                  break;
340    
341          case 12:          case 12:
342                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
343                  interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding);                  interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);
344                  break;                  break;
345    
346          case 13:          case 13:
347                  interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
348                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
349                  interpolate8x8_avg4(dst, src+stride, halfpel_h+stride, halfpel_v, halfpel_hv, stride, rounding);                  interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
350                    interpolate8x8_avg2(dst, halfpel_v+stride, halfpel_hv, stride, rounding, 8);
351                  break;                  break;
352    
353          case 14:          case 14:
354                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
355                  interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding);                  interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);
356                  break;                  break;
357    
358          case 15:          case 15:
359                  interpolate8x8_lowpass_v(halfpel_v, src+1, stride, rounding);                  interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
360                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
361                  interpolate8x8_avg4(dst, src+stride+1, halfpel_h+stride, halfpel_v, halfpel_hv, stride, rounding);                  interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
362                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v + stride, stride, rounding, 8);
363                  break;                  break;
364          }          }
365  }  }
366    
367    static __inline void interpolate16x16_quarterpel(uint8_t * const cur,
368                                         uint8_t * const refn,
369                                             uint8_t * const refh,
370                                             uint8_t * const refv,
371                                             uint8_t * const refhv,
372                                         const uint32_t x, const uint32_t y,
373                                             const int32_t dx,  const int dy,
374                                             const uint32_t stride,
375                                             const uint32_t rounding)
376    {
377            const int32_t xRef = x*4 + dx;
378            const int32_t yRef = y*4 + dy;
379    
380            uint8_t *src, *dst;
381            uint8_t *halfpel_h, *halfpel_v, *halfpel_hv;
382            int32_t x_int, y_int, x_frac, y_frac;
383    
384            x_int = xRef/4;
385            if (xRef < 0 && xRef % 4)
386                    x_int--;
387    
388            x_frac = xRef - (4*x_int);
389    
390            y_int  = yRef/4;
391            if (yRef < 0 && yRef % 4)
392                    y_int--;
393    
394            y_frac = yRef - (4*y_int);
395    
396            src = refn + y_int * stride + x_int;
397            halfpel_h = refh;
398            halfpel_v = refv;
399            halfpel_hv = refhv;
400    
401            dst = cur + y * stride + x;
402    
403            switch((y_frac << 2) | (x_frac)) {
404    
405            case 0:
406                    transfer8x8_copy(dst, src, stride);
407                    transfer8x8_copy(dst+8, src+8, stride);
408                    transfer8x8_copy(dst+8*stride, src+8*stride, stride);
409                    transfer8x8_copy(dst+8*stride+8, src+8*stride+8, stride);
410                    break;
411    
412            case 1:
413                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
414                    interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);
415                    interpolate8x8_avg2(dst+8, src+8, halfpel_h+8, stride, rounding, 8);
416                    interpolate8x8_avg2(dst+8*stride, src+8*stride, halfpel_h+8*stride, stride, rounding, 8);
417                    interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 8);
418                    break;
419    
420            case 2:
421                interpolate16x16_lowpass_h(dst, src, stride, rounding);
422                    break;
423    
424            case 3:
425                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
426                    interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);
427                    interpolate8x8_avg2(dst+8, src + 8 + 1, halfpel_h+8, stride, rounding, 8);
428                    interpolate8x8_avg2(dst+8*stride, src + 8*stride + 1, halfpel_h+8*stride, stride, rounding, 8);
429                    interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8 + 1, halfpel_h+8*stride+8, stride, rounding, 8);
430                    break;
431    
432            case 4:
433                    interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
434                    interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);
435                    interpolate8x8_avg2(dst+8, src+8, halfpel_v+8, stride, rounding, 8);
436                    interpolate8x8_avg2(dst+8*stride, src+8*stride, halfpel_v+8*stride, stride, rounding, 8);
437                    interpolate8x8_avg2(dst+8*stride+8, src+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
438                    break;
439    
440            case 5:
441                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
442                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
443                    interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);
444                    interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
445                    interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
446    
447                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
448                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v, stride, rounding, 8);
449                    interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+8, stride, rounding, 8);
450                    interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+8*stride, stride, rounding, 8);
451                    interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
452                    break;
453    
454            case 6:
455                    interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
456                    interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);
457                    interpolate8x8_avg2(dst+8, halfpel_h+8, halfpel_hv+8, stride, rounding, 8);
458                    interpolate8x8_avg2(dst+8*stride, halfpel_h+8*stride, halfpel_hv+8*stride, stride, rounding, 8);
459                    interpolate8x8_avg2(dst+8*stride+8, halfpel_h+8*stride+8, halfpel_hv+8*stride+8, stride, rounding, 8);
460                    break;
461    
462            case 7:
463                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
464                    interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
465                    interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);
466                    interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
467                    interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
468    
469                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
470                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v, stride, rounding, 8);
471                    interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+8, stride, rounding, 8);
472                    interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+8*stride, stride, rounding, 8);
473                    interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
474                    break;
475    
476            case 8:
477                interpolate16x16_lowpass_v(dst, src, stride, rounding);
478                    break;
479    
480            case 9:
481                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
482                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
483                    interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);
484                    interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
485                    interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
486                    interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
487                    break;
488    
489            case 10:
490                    interpolate16x16_lowpass_hv(dst, halfpel_h, src, stride, rounding);
491                    break;
492    
493            case 11:
494                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
495                    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                    interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
500                    break;
501    
502            case 12:
503                    interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
504                    interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);
505                    interpolate8x8_avg2(dst+8, src+stride+8, halfpel_v+8, stride, rounding, 8);
506                    interpolate8x8_avg2(dst+8*stride, src+stride+8*stride, halfpel_v+8*stride, stride, rounding, 8);
507                    interpolate8x8_avg2(dst+8*stride+8, src+stride+8*stride+8, halfpel_v+8*stride+8, stride, rounding, 8);
508                    break;
509    
510            case 13:
511                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
512                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
513                    interpolate8x8_avg2(halfpel_v+8, src + 8, halfpel_h+8, stride, rounding, 9);
514                    interpolate8x8_avg2(halfpel_v+8*stride, src + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
515                    interpolate8x8_avg2(halfpel_v+8*stride+8, src+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
516    
517                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
518                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v+stride, stride, rounding, 8);
519                    interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+stride+8, stride, rounding, 8);
520                    interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+stride+8*stride, stride, rounding, 8);
521                    interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+stride+8*stride+8, stride, rounding, 8);
522                    break;
523    
524            case 14:
525                    interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
526                    interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);
527                    interpolate8x8_avg2(dst+8, halfpel_h+stride+8, halfpel_hv+8, stride, rounding, 8);
528                    interpolate8x8_avg2(dst+8*stride, halfpel_h+stride+8*stride, halfpel_hv+8*stride, stride, rounding, 8);
529                    interpolate8x8_avg2(dst+8*stride+8, halfpel_h+stride+8*stride+8, halfpel_hv+8*stride+8, stride, rounding, 8);
530                    break;
531    
532            case 15:
533                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
534                    interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
535                    interpolate8x8_avg2(halfpel_v+8, src+1 + 8, halfpel_h+8, stride, rounding, 9);
536                    interpolate8x8_avg2(halfpel_v+8*stride, src+1 + 8*stride, halfpel_h+8*stride, stride, rounding, 9);
537                    interpolate8x8_avg2(halfpel_v+8*stride+8, src+1+8*stride+8, halfpel_h+8*stride+8, stride, rounding, 9);
538    
539                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
540                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v+stride, stride, rounding, 8);
541                    interpolate8x8_avg2(dst+8, halfpel_hv+8, halfpel_v+stride+8, stride, rounding, 8);
542                    interpolate8x8_avg2(dst+8*stride, halfpel_hv+8*stride, halfpel_v+stride+8*stride, stride, rounding, 8);
543                    interpolate8x8_avg2(dst+8*stride+8, halfpel_hv+8*stride+8, halfpel_v+stride+8*stride+8, stride, rounding, 8);
544                    break;
545            }
546    }
547  #endif  #endif

Legend:
Removed from v.1.5.2.2  
changed lines
  Added in v.1.5.2.9

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