[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.1.1.1, Fri Mar 8 02:44:46 2002 UTC revision 1.5.2.8, Sun Dec 8 05:33:42 2002 UTC
# Line 1  Line 1 
1    #ifndef _INTERPOLATE8X8_H_
2    #define _INTERPOLATE8X8_H_
3    
4  #include "../utils/mem_transfer.h"  #include "../utils/mem_transfer.h"
5    
6  typedef void (INTERPOLATE8X8)(uint8_t * const dst,  typedef void (INTERPOLATE8X8)(uint8_t * const dst,
# Line 6  Line 9 
9                                          const uint32_t rounding);                                          const uint32_t rounding);
10  typedef INTERPOLATE8X8 * INTERPOLATE8X8_PTR;  typedef INTERPOLATE8X8 * INTERPOLATE8X8_PTR;
11    
12    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                                                                            const uint32_t height);
18    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    typedef void (INTERPOLATE_LOWPASS) (uint8_t *dst,
30                                                                               uint8_t *src,
31                                                                               int32_t stride,
32                                                                               int32_t rounding);
33    
34    typedef INTERPOLATE_LOWPASS *INTERPOLATE_LOWPASS_PTR;
35    
36    typedef void (INTERPOLATE_LOWPASS_HV) (uint8_t *dst1,
37                                                                                      uint8_t *dst2,
38                                                                                      uint8_t *src,
39                                                                                      int32_t stride,
40                                                                                      int32_t rounding);
41    
42    typedef INTERPOLATE_LOWPASS_HV *INTERPOLATE_LOWPASS_HV_PTR;
43    
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  extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_h;  extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_h;
52  extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_v;  extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_v;
53  extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv;  extern INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv;
54    
55    extern INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;
56    extern INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;
57    
58    extern INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_h;
59    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 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;
68    extern INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v;
69    
70  INTERPOLATE8X8 interpolate8x8_halfpel_h_c;  INTERPOLATE8X8 interpolate8x8_halfpel_h_c;
71  INTERPOLATE8X8 interpolate8x8_halfpel_v_c;  INTERPOLATE8X8 interpolate8x8_halfpel_v_c;
72  INTERPOLATE8X8 interpolate8x8_halfpel_hv_c;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_c;
# Line 26  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  static __inline void interpolate8x8_switch(uint8_t * const cur,  INTERPOLATE8X8 interpolate8x8_halfpel_h_ia64;
87    INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;
88    INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;
89    
90    INTERPOLATE8X8_AVG2 interpolate8x8_avg2_c;
91    INTERPOLATE8X8_AVG4 interpolate8x8_avg4_c;
92    
93    INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;
94    INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;
95    
96    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    
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    
111    static __inline void
112    interpolate8x8_switch(uint8_t * const cur,
113                                       const uint8_t * const refn,                                       const uint8_t * const refn,
114                                       const uint32_t x, const uint32_t y,                                            const uint32_t x,
115                                           const int32_t dx,  const int dy,                                            const uint32_t y,
116                                              const int32_t dx,
117                                              const int dy,
118                                           const uint32_t stride,                                           const uint32_t stride,
119                                           const uint32_t rounding)                                           const uint32_t rounding)
120  {  {
# Line 40  Line 125 
125      case 0 :      case 0 :
126                  ddx = dx/2;                  ddx = dx/2;
127                  ddy = dy/2;                  ddy = dy/2;
128                  transfer8x8_copy(cur + y*stride + x, refn + (y+ddy)*stride + x + ddx, stride);                  transfer8x8_copy(cur + y * stride + x,
129                                                     refn + (int)((y + ddy) * stride + x + ddx), stride);
130                  break;                  break;
131    
132      case 1 :      case 1 :
133                  ddx = dx/2;                  ddx = dx/2;
134                  ddy = (dy-1)/2;                  ddy = (dy-1)/2;
135                  interpolate8x8_halfpel_v(cur + y*stride + x,                  interpolate8x8_halfpel_v(cur + y*stride + x,
136                                                          refn + (y+ddy)*stride + x + ddx, stride, rounding);                                                                   refn + (int)((y + ddy) * stride + x + ddx), stride,
137                                                                     rounding);
138                  break;                  break;
139    
140      case 2 :      case 2 :
141                  ddx = (dx-1)/2;                  ddx = (dx-1)/2;
142                  ddy = dy/2;                  ddy = dy/2;
143                  interpolate8x8_halfpel_h(cur + y*stride + x,                  interpolate8x8_halfpel_h(cur + y*stride + x,
144                                                          refn + (y+ddy)*stride + x + ddx, stride, rounding);                                                                   refn + (int)((y + ddy) * stride + x + ddx), stride,
145                                                                     rounding);
146                  break;                  break;
147    
148      default :      default :
149                  ddx = (dx-1)/2;                  ddx = (dx-1)/2;
150                  ddy = (dy-1)/2;                  ddy = (dy-1)/2;
151                  interpolate8x8_halfpel_hv(cur + y*stride + x,                  interpolate8x8_halfpel_hv(cur + y*stride + x,
152                                                          refn + (y+ddy)*stride + x + ddx, stride, rounding);                                                                   refn + (int)((y + ddy) * stride + x + ddx), stride,
153                                                                      rounding);
154                    break;
155            }
156    }
157    
158    
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    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    
205            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    static __inline void interpolate8x8_quarterpel(uint8_t * const cur,
238                                         uint8_t * const refn,
239                                             uint8_t * const refh,
240                                             uint8_t * const refv,
241                                             uint8_t * const refhv,
242                                         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            uint8_t *halfpel_h, *halfpel_v, *halfpel_hv;
252            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            halfpel_h = refh;
268            halfpel_v = refv;
269            halfpel_hv = refhv;
270    
271            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                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
281                    interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);
282                    break;
283    
284            case 2:
285                interpolate8x8_lowpass_h(dst, src, stride, rounding);
286                    break;
287    
288            case 3:
289                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
290                    interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);
291                    break;
292    
293            case 4:
294                    interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
295                    interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);
296                    break;
297    
298            case 5:
299                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
300                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
301                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
302                    interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
303                    break;
304    
305            case 6:
306                    interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
307                    interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);
308                    break;
309    
310            case 7:
311                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
312                    interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
313                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
314                    interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
315                    break;
316    
317            case 8:
318                interpolate8x8_lowpass_v(dst, src, stride, rounding);
319                    break;
320    
321            case 9:
322                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
323                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
324                    interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
325                    break;
326    
327            case 10:
328                    interpolate8x8_lowpass_hv(dst, halfpel_h, src, stride, rounding);
329                    break;
330    
331            case 11:
332                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
333                    interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
334                    interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
335                    break;
336    
337            case 12:
338                    interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
339                    interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);
340                    break;
341    
342            case 13:
343                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
344                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
345                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
346                    interpolate8x8_avg2(dst, halfpel_v+stride, halfpel_hv, stride, rounding, 8);
347                    break;
348    
349            case 14:
350                    interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
351                    interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);
352                    break;
353    
354            case 15:
355                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
356                    interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
357                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
358                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v + stride, stride, rounding, 8);
359                    break;
360            }
361    }
362    
363    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                    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                    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                    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                    break;
427    
428            case 4:
429                    interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
430                    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                    break;
435    
436            case 5:
437                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
438                    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    
443                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
444                    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                    break;
449    
450            case 6:
451                    interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
452                    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                    break;
457    
458            case 7:
459                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
460                    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    
465                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
466                    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                    break;
471    
472            case 8:
473                interpolate16x16_lowpass_v(dst, src, stride, rounding);
474                    break;
475    
476            case 9:
477                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
478                    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                    interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
483                    break;
484    
485            case 10:
486                    interpolate16x16_lowpass_hv(dst, halfpel_h, src, stride, rounding);
487                    break;
488    
489            case 11:
490                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
491                    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                    interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
496                    break;
497    
498            case 12:
499                    interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
500                    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                    break;
505    
506            case 13:
507                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
508                    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    
513                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
514                    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                    break;
519    
520            case 14:
521                    interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
522                    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                    break;
527    
528            case 15:
529                    interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
530                    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    
535                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
536                    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                  break;                  break;
541      }      }
542  }  }
543    #endif

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.5.2.8

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