[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, Wed Jul 24 00:50:10 2002 UTC revision 1.5.2.7, Wed Nov 20 20:11:49 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 30  Line 87 
87  INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;
88  INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;
89    
90  void interpolate8x8_lowpass_h(uint8_t *dst, uint8_t *src, int32_t dst_stride, int32_t src_stride, int32_t rounding);  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_c;
91  void interpolate8x8_lowpass_v(uint8_t *dst, uint8_t *src, int32_t dst_stride, int32_t src_stride, int32_t rounding);  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_c;
 void interpolate8x8_lowpass_hv(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t dst1_stride, int32_t dst2_stride, int32_t src_stride, int32_t rounding);  
 void interpolate8x8_bilinear2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int32_t dst_stride, int32_t src_stride, int32_t rounding);  
 void interpolate8x8_bilinear4(uint8_t *dst, uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int32_t stride, int32_t rounding);  
92    
93  void interpolate8x8_c(uint8_t * const dst,  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;
94                                            const uint8_t * const src,  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;
95                                            const uint32_t x,  
96                                            const uint32_t y,  INTERPOLATE_LOWPASS interpolate8x8_lowpass_h_c;
97                                            const uint32_t stride);  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  static __inline void
112  interpolate8x8_switch(uint8_t * const cur,  interpolate8x8_switch(uint8_t * const cur,
# Line 89  Line 155 
155          }          }
156  }  }
157    
158    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    
170            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  static __inline void interpolate8x8_quarterpel(uint8_t * const cur,  static __inline void interpolate8x8_quarterpel(uint8_t * const cur,
203                                       uint8_t * const refn,                                       uint8_t * const refn,
204                                             uint8_t * const refh,
205                                             uint8_t * const refv,
206                                             uint8_t * const refhv,
207                                       const uint32_t x, const uint32_t y,                                       const uint32_t x, const uint32_t y,
208                                           const int32_t dx,  const int dy,                                           const int32_t dx,  const int dy,
209                                           const uint32_t stride,                                           const uint32_t stride,
# Line 101  Line 213 
213          const int32_t yRef = y*4 + dy;          const int32_t yRef = y*4 + dy;
214    
215          uint8_t *src, *dst;          uint8_t *src, *dst;
216            uint8_t *halfpel_h, *halfpel_v, *halfpel_hv;
217          int32_t x_int, y_int, x_frac, y_frac;          int32_t x_int, y_int, x_frac, y_frac;
218    
219          uint8_t halfpel_h[72];          x_int = xRef/4;
220          uint8_t halfpel_v[64];          if (xRef < 0 && xRef % 4)
221          uint8_t halfpel_hv[64];                  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            halfpel_h = refh;
233            halfpel_v = refv;
234            halfpel_hv = refhv;
235    
236            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                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
246                    interpolate8x8_avg2(dst, src, halfpel_h, stride, rounding, 8);
247                    break;
248    
249            case 2:
250                interpolate8x8_lowpass_h(dst, src, stride, rounding);
251                    break;
252    
253            case 3:
254                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
255                    interpolate8x8_avg2(dst, src + 1, halfpel_h, stride, rounding, 8);
256                    break;
257    
258            case 4:
259                    interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
260                    interpolate8x8_avg2(dst, src, halfpel_v, stride, rounding, 8);
261                    break;
262    
263            case 5:
264                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
265                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
266                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
267                    interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
268                    break;
269    
270            case 6:
271                    interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
272                    interpolate8x8_avg2(dst, halfpel_h, halfpel_hv, stride, rounding, 8);
273                    break;
274    
275            case 7:
276                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
277                    interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
278                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
279                    interpolate8x8_avg2(dst, halfpel_v, halfpel_hv, stride, rounding, 8);
280                    break;
281    
282            case 8:
283                interpolate8x8_lowpass_v(dst, src, stride, rounding);
284                    break;
285    
286            case 9:
287                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
288                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
289                    interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
290                    break;
291    
292            case 10:
293                    interpolate8x8_lowpass_hv(dst, halfpel_h, src, stride, rounding);
294                    break;
295    
296            case 11:
297                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
298                    interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
299                    interpolate8x8_lowpass_v(dst, halfpel_v, stride, rounding);
300                    break;
301    
302            case 12:
303                    interpolate8x8_lowpass_v(halfpel_v, src, stride, rounding);
304                    interpolate8x8_avg2(dst, src+stride, halfpel_v, stride, rounding, 8);
305                    break;
306    
307            case 13:
308                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
309                    interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
310                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
311                    interpolate8x8_avg2(dst, halfpel_v+stride, halfpel_hv, stride, rounding, 8);
312                    break;
313    
314            case 14:
315                    interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
316                    interpolate8x8_avg2(dst, halfpel_h+stride, halfpel_hv, stride, rounding, 8);
317                    break;
318    
319            case 15:
320                    interpolate8x8_lowpass_h(halfpel_h, src, stride, rounding);
321                    interpolate8x8_avg2(halfpel_v, src + 1, halfpel_h, stride, rounding, 9);
322                    interpolate8x8_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
323                    interpolate8x8_avg2(dst, halfpel_hv, halfpel_v + stride, stride, rounding, 8);
324                    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;          x_int = xRef/4;
346          if (xRef < 0 && xRef % 4)          if (xRef < 0 && xRef % 4)
# Line 120  Line 355 
355          y_frac = yRef - (4*y_int);          y_frac = yRef - (4*y_int);
356    
357          src = refn + y_int * stride + x_int;          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;          dst = cur + y * stride + x;
363    
364          switch((y_frac << 2) | (x_frac)) {          switch((y_frac << 2) | (x_frac)) {
365    
366          case 0:          case 0:
367                  transfer8x8_copy(dst, src, stride);                  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;                  break;
372    
373          case 1:          case 1:
374                  interpolate8x8_lowpass_h(halfpel_h, src, 8, stride, rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
375                  interpolate8x8_bilinear2(dst, src, halfpel_h, stride, stride, rounding);                  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                  break;                  break;
380    
381          case 2:          case 2:
382              interpolate8x8_lowpass_h(dst, src, stride, stride, rounding);              interpolate16x16_lowpass_h(dst, src, stride, rounding);
383                  break;                  break;
384    
385          case 3:          case 3:
386                  interpolate8x8_lowpass_h(halfpel_h, src, 8, stride, rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
387                  interpolate8x8_bilinear2(dst, src+1, halfpel_h, stride, stride, rounding);                  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                  break;                  break;
392    
393          case 4:          case 4:
394                  interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding);                  interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
395                  interpolate8x8_bilinear2(dst, src, halfpel_v, stride, stride, rounding);                  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                  break;                  break;
400    
401          case 5:          case 5:
402                  interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
403                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
404                  interpolate8x8_bilinear4(dst, src, halfpel_h, halfpel_v, halfpel_hv, stride, rounding);                  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    
408                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
409                    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                  break;                  break;
414    
415          case 6:          case 6:
416                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
417                  interpolate8x8_bilinear2(dst, halfpel_h, halfpel_hv, stride, 8, 1-rounding);                  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                  break;                  break;
422    
423          case 7:          case 7:
424                  interpolate8x8_lowpass_v(halfpel_v, src+1, 8, stride, 16-rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
425                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
426                  interpolate8x8_bilinear4(dst, src+1, halfpel_h, halfpel_v, halfpel_hv, stride, rounding);                  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    
430                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
431                    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                  break;                  break;
436    
437          case 8:          case 8:
438              interpolate8x8_lowpass_v(dst, src, stride, stride, rounding);              interpolate16x16_lowpass_v(dst, src, stride, rounding);
439                  break;                  break;
440    
441          case 9:          case 9:
442                  interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, 16-rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
443                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
444                  interpolate8x8_bilinear2(dst, halfpel_v, halfpel_hv, stride, 8, rounding);                  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                    interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
448                  break;                  break;
449    
450          case 10:          case 10:
451                  interpolate8x8_lowpass_hv(dst, halfpel_h, src, stride, 8, stride, rounding);                  interpolate16x16_lowpass_hv(dst, halfpel_h, src, stride, rounding);
452                  break;                  break;
453    
454          case 11:          case 11:
455                  interpolate8x8_lowpass_v(halfpel_v, src+1, 8, stride, 16-rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
456                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
457                  interpolate8x8_bilinear2(dst, halfpel_v, halfpel_hv, stride, 8, rounding);                  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                    interpolate16x16_lowpass_v(dst, halfpel_v, stride, rounding);
461                  break;                  break;
462    
463          case 12:          case 12:
464                  interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding);                  interpolate16x16_lowpass_v(halfpel_v, src, stride, rounding);
465                  interpolate8x8_bilinear2(dst, src+stride, halfpel_v, stride, stride, rounding);                  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                  break;                  break;
470    
471          case 13:          case 13:
472                  interpolate8x8_lowpass_v(halfpel_v, src, 8, stride, rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
473                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src, halfpel_h, stride, rounding, 9);
474                  interpolate8x8_bilinear4(dst, src+stride, halfpel_h+8, halfpel_v, halfpel_hv, stride, rounding);                  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    
478                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
479                    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                  break;                  break;
484    
485          case 14:          case 14:
486                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate16x16_lowpass_hv(halfpel_hv, halfpel_h, src, stride, rounding);
487                  interpolate8x8_bilinear2(dst, halfpel_h+8, halfpel_hv, stride, 8, rounding);                  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                  break;                  break;
492    
493          case 15:          case 15:
494                  interpolate8x8_lowpass_v(halfpel_v, src+1, 8, stride, rounding);                  interpolate16x16_lowpass_h(halfpel_h, src, stride, rounding);
495                  interpolate8x8_lowpass_hv(halfpel_hv, halfpel_h, src, 8, 8, stride, rounding);                  interpolate8x8_avg2(halfpel_v, src+1, halfpel_h, stride, rounding, 9);
496                  interpolate8x8_bilinear4(dst, src+stride+1, halfpel_h+8, halfpel_v, halfpel_hv, stride, rounding);                  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    
500                    interpolate16x16_lowpass_v(halfpel_hv, halfpel_v, stride, rounding);
501                    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                  break;                  break;
506          }          }
507  }  }
508    #endif

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.5.2.7

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