[svn] / trunk / xvidcore / src / image / interpolate8x8.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/interpolate8x8.c

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

revision 651, Sun Nov 17 00:20:30 2002 UTC revision 1382, Mon Mar 22 22:36:25 2004 UTC
# Line 3  Line 3 
3   *  XVID MPEG-4 VIDEO CODEC   *  XVID MPEG-4 VIDEO CODEC
4   *  - 8x8 block-based halfpel interpolation -   *  - 8x8 block-based halfpel interpolation -
5   *   *
6   *  Copyright(C) 2002 Peter Ross <pross@xvid.org>   *  Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>
  *  Copyright(C) 2002 MinChen <chenm002@163.com>  
7   *   *
8   *  This file is part of XviD, a free MPEG-4 video encoder/decoder   *  This program is free software ; you can redistribute it and/or modify
9   *   *  it under the terms of the GNU General Public License as published by
  *  XviD is free software; you can redistribute it and/or modify it  
  *  under the terms of the GNU General Public License as published by  
10   *  the Free Software Foundation; either version 2 of the License, or   *  the Free Software Foundation; either version 2 of the License, or
11   *  (at your option) any later version.   *  (at your option) any later version.
12   *   *
# Line 22  Line 19 
19   *  along with this program; if not, write to the Free Software   *  along with this program; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   *  Under section 8 of the GNU General Public License, the copyright   * $Id: interpolate8x8.c,v 1.12 2004-03-22 22:36:23 edgomez Exp $
  *  holders of XVID explicitly forbid distribution in the following  
  *  countries:  
  *  
  *    - Japan  
  *    - United States of America  
  *  
  *  Linking XviD statically or dynamically with other modules is making a  
  *  combined work based on XviD.  Thus, the terms and conditions of the  
  *  GNU General Public License cover the whole combination.  
  *  
  *  As a special exception, the copyright holders of XviD give you  
  *  permission to link XviD with independent modules that communicate with  
  *  XviD solely through the VFW1.1 and DShow interfaces, regardless of the  
  *  license terms of these independent modules, and to copy and distribute  
  *  the resulting combined work under terms of your choice, provided that  
  *  every copy of the combined work is accompanied by a complete copy of  
  *  the source code of XviD (the version of XviD used to produce the  
  *  combined work), being distributed under the terms of the GNU General  
  *  Public License plus this exception.  An independent module is a module  
  *  which is not derived from or based on XviD.  
  *  
  *  Note that people who make modified versions of XviD are not obligated  
  *  to grant this special exception for their modified versions; it is  
  *  their choice whether to do so.  The GNU General Public License gives  
  *  permission to release a modified version without this exception; this  
  *  exception also makes it possible to release a modified version which  
  *  carries forward this exception.  
  *  
  * $Id: interpolate8x8.c,v 1.6 2002-11-17 00:20:30 edgomez Exp $  
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
26  #include "../portab.h"  #include "../portab.h"
27    #include "../global.h"
28  #include "interpolate8x8.h"  #include "interpolate8x8.h"
29    
30  // function pointers  /* function pointers */
31  INTERPOLATE8X8_PTR interpolate8x8_halfpel_h;  INTERPOLATE8X8_PTR interpolate8x8_halfpel_h;
32  INTERPOLATE8X8_PTR interpolate8x8_halfpel_v;  INTERPOLATE8X8_PTR interpolate8x8_halfpel_v;
33  INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv;  INTERPOLATE8X8_PTR interpolate8x8_halfpel_hv;
34    
35    INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;
36    INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;
37    
38    INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_h;
39    INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_v;
40    
41  // dst = interpolate(src)  INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_h;
42    INTERPOLATE_LOWPASS_PTR interpolate16x16_lowpass_v;
43    
44    INTERPOLATE_LOWPASS_HV_PTR interpolate8x8_lowpass_hv;
45    INTERPOLATE_LOWPASS_HV_PTR interpolate16x16_lowpass_hv;
46    
47    INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h;
48    INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v;
49    
50    void interpolate8x8_avg2_c(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, const uint32_t stride, const uint32_t rounding, const uint32_t height)
51    {
52        uint32_t i;
53            const int32_t round = 1 - rounding;
54    
55        for(i = 0; i < height; i++)
56        {
57            dst[0] = (src1[0] + src2[0] + round) >> 1;
58            dst[1] = (src1[1] + src2[1] + round) >> 1;
59            dst[2] = (src1[2] + src2[2] + round) >> 1;
60            dst[3] = (src1[3] + src2[3] + round) >> 1;
61            dst[4] = (src1[4] + src2[4] + round) >> 1;
62            dst[5] = (src1[5] + src2[5] + round) >> 1;
63            dst[6] = (src1[6] + src2[6] + round) >> 1;
64            dst[7] = (src1[7] + src2[7] + round) >> 1;
65    
66            dst += stride;
67            src1 += stride;
68            src2 += stride;
69        }
70    }
71    
72    void interpolate8x8_avg4_c(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, const uint8_t *src4, const uint32_t stride, const uint32_t rounding)
73    {
74        int32_t i;
75            const int32_t round = 2 - rounding;
76    
77        for(i = 0; i < 8; i++)
78        {
79            dst[0] = (src1[0] + src2[0] + src3[0] + src4[0] + round) >> 2;
80            dst[1] = (src1[1] + src2[1] + src3[1] + src4[1] + round) >> 2;
81            dst[2] = (src1[2] + src2[2] + src3[2] + src4[2] + round) >> 2;
82            dst[3] = (src1[3] + src2[3] + src3[3] + src4[3] + round) >> 2;
83            dst[4] = (src1[4] + src2[4] + src3[4] + src4[4] + round) >> 2;
84            dst[5] = (src1[5] + src2[5] + src3[5] + src4[5] + round) >> 2;
85            dst[6] = (src1[6] + src2[6] + src3[6] + src4[6] + round) >> 2;
86            dst[7] = (src1[7] + src2[7] + src3[7] + src4[7] + round) >> 2;
87    
88                    dst += stride;
89            src1 += stride;
90            src2 += stride;
91            src3 += stride;
92            src4 += stride;
93        }
94    }
95    
96    /* dst = interpolate(src) */
97    
98  void  void
99  interpolate8x8_halfpel_h_c(uint8_t * const dst,  interpolate8x8_halfpel_h_c(uint8_t * const dst,
# Line 72  Line 101 
101                                                     const uint32_t stride,                                                     const uint32_t stride,
102                                                     const uint32_t rounding)                                                     const uint32_t rounding)
103  {  {
104          uint32_t i, j;          uintptr_t j;
   
         for (j = 0; j < 8; j++) {  
                 for (i = 0; i < 8; i++) {  
105    
106                          int16_t tot =          if (rounding)
107                                  (int32_t) src[j * stride + i] + (int32_t) src[j * stride + i +                  for (j = 0; j < 8*stride; j+=stride)
108                                                                                                                            1];                  {
109                                    dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] )>>1);
110                          tot = (int32_t) ((tot + 1 - rounding) >> 1);                                  dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] )>>1);
111                          dst[j * stride + i] = (uint8_t) tot;                                  dst[j + 2] = (uint8_t)((src[j + 2] + src[j + 3] )>>1);
112                  }                                  dst[j + 3] = (uint8_t)((src[j + 3] + src[j + 4] )>>1);
113                                    dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] )>>1);
114                                    dst[j + 5] = (uint8_t)((src[j + 5] + src[j + 6] )>>1);
115                                    dst[j + 6] = (uint8_t)((src[j + 6] + src[j + 7] )>>1);
116                                    dst[j + 7] = (uint8_t)((src[j + 7] + src[j + 8] )>>1);
117                    }
118            else
119                    for (j = 0; j < 8*stride; j+=stride)            /* forward or backwards? Who knows ... */
120                    {
121                                    dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] + 1)>>1);
122                                    dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] + 1)>>1);
123                                    dst[j + 2] = (uint8_t)((src[j + 2] + src[j + 3] + 1)>>1);
124                                    dst[j + 3] = (uint8_t)((src[j + 3] + src[j + 4] + 1)>>1);
125                                    dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] + 1)>>1);
126                                    dst[j + 5] = (uint8_t)((src[j + 5] + src[j + 6] + 1)>>1);
127                                    dst[j + 6] = (uint8_t)((src[j + 6] + src[j + 7] + 1)>>1);
128                                    dst[j + 7] = (uint8_t)((src[j + 7] + src[j + 8] + 1)>>1);
129          }          }
130  }  }
131    
# Line 95  Line 137 
137                                                     const uint32_t stride,                                                     const uint32_t stride,
138                                                     const uint32_t rounding)                                                     const uint32_t rounding)
139  {  {
140          uint32_t i, j;          uintptr_t j;
141    
         for (j = 0; j < 8; j++) {  
                 for (i = 0; i < 8; i++) {  
                         int16_t tot = src[j * stride + i] + src[j * stride + i + stride];  
142    
143                          tot = ((tot + 1 - rounding) >> 1);          if (rounding)
144                          dst[j * stride + i] = (uint8_t) tot;                  for (j = 0; j < 8*stride; j+=stride)            /* forward is better. Some automatic prefetch perhaps. */
145                  }                  {
146                                    dst[j + 0] = (uint8_t)((src[j + 0] + src[j + stride + 0] )>>1);
147                                    dst[j + 1] = (uint8_t)((src[j + 1] + src[j + stride + 1] )>>1);
148                                    dst[j + 2] = (uint8_t)((src[j + 2] + src[j + stride + 2] )>>1);
149                                    dst[j + 3] = (uint8_t)((src[j + 3] + src[j + stride + 3] )>>1);
150                                    dst[j + 4] = (uint8_t)((src[j + 4] + src[j + stride + 4] )>>1);
151                                    dst[j + 5] = (uint8_t)((src[j + 5] + src[j + stride + 5] )>>1);
152                                    dst[j + 6] = (uint8_t)((src[j + 6] + src[j + stride + 6] )>>1);
153                                    dst[j + 7] = (uint8_t)((src[j + 7] + src[j + stride + 7] )>>1);
154                    }
155            else
156                    for (j = 0; j < 8*stride; j+=stride)
157                    {
158                                    dst[j + 0] = (uint8_t)((src[j + 0] + src[j + stride + 0] + 1)>>1);
159                                    dst[j + 1] = (uint8_t)((src[j + 1] + src[j + stride + 1] + 1)>>1);
160                                    dst[j + 2] = (uint8_t)((src[j + 2] + src[j + stride + 2] + 1)>>1);
161                                    dst[j + 3] = (uint8_t)((src[j + 3] + src[j + stride + 3] + 1)>>1);
162                                    dst[j + 4] = (uint8_t)((src[j + 4] + src[j + stride + 4] + 1)>>1);
163                                    dst[j + 5] = (uint8_t)((src[j + 5] + src[j + stride + 5] + 1)>>1);
164                                    dst[j + 6] = (uint8_t)((src[j + 6] + src[j + stride + 6] + 1)>>1);
165                                    dst[j + 7] = (uint8_t)((src[j + 7] + src[j + stride + 7] + 1)>>1);
166          }          }
167  }  }
168    
# Line 114  Line 173 
173                                                          const uint32_t stride,                                                          const uint32_t stride,
174                                                          const uint32_t rounding)                                                          const uint32_t rounding)
175  {  {
176          uint32_t i, j;          uintptr_t j;
   
         for (j = 0; j < 8; j++) {  
                 for (i = 0; i < 8; i++) {  
                         int16_t tot =  
                                 src[j * stride + i] + src[j * stride + i + 1] +  
                                 src[j * stride + i + stride] + src[j * stride + i + stride +  
                                                                                                    1];  
                         tot = ((tot + 2 - rounding) >> 2);  
                         dst[j * stride + i] = (uint8_t) tot;  
                 }  
         }  
 }  
177    
178  // add by MinChen <chenm001@163.com>          if (rounding)
179  // interpolate8x8 two pred block                  for (j = 0; j < 8*stride; j+=stride)
180  void                  {
181  interpolate8x8_c(uint8_t * const dst,                                  dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +1)>>2);
182                                   const uint8_t * const src,                                  dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +1)>>2);
183                                   const uint32_t x,                                  dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +1)>>2);
184                                   const uint32_t y,                                  dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +1)>>2);
185                                   const uint32_t stride)                                  dst[j + 4] = (uint8_t)((src[j+4] + src[j+5] + src[j+stride+4] + src[j+stride+5] +1)>>2);
186  {                                  dst[j + 5] = (uint8_t)((src[j+5] + src[j+6] + src[j+stride+5] + src[j+stride+6] +1)>>2);
187          uint32_t i, j;                                  dst[j + 6] = (uint8_t)((src[j+6] + src[j+7] + src[j+stride+6] + src[j+stride+7] +1)>>2);
188                                    dst[j + 7] = (uint8_t)((src[j+7] + src[j+8] + src[j+stride+7] + src[j+stride+8] +1)>>2);
189          for (j = 0; j < 8; j++) {                  }
190                  for (i = 0; i < 8; i++) {          else
191                          int32_t tot =                  for (j = 0; j < 8*stride; j+=stride)
192                                  ((src[(y + j) * stride + x + i] +                  {
193                                    dst[(y + j) * stride + x + i] + 1) >> 1);                                  dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +2)>>2);
194                          dst[(y + j) * stride + x + i] = (uint8_t) tot;                                  dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +2)>>2);
195                  }                                  dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +2)>>2);
196                                    dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +2)>>2);
197                                    dst[j + 4] = (uint8_t)((src[j+4] + src[j+5] + src[j+stride+4] + src[j+stride+5] +2)>>2);
198                                    dst[j + 5] = (uint8_t)((src[j+5] + src[j+6] + src[j+stride+5] + src[j+stride+6] +2)>>2);
199                                    dst[j + 6] = (uint8_t)((src[j+6] + src[j+7] + src[j+stride+6] + src[j+stride+7] +2)>>2);
200                                    dst[j + 7] = (uint8_t)((src[j+7] + src[j+8] + src[j+stride+7] + src[j+stride+8] +2)>>2);
201          }          }
202  }  }
203    
# Line 153  Line 205 
205   * QPEL STUFF STARTS HERE                                    *   * QPEL STUFF STARTS HERE                                    *
206   *************************************************************/   *************************************************************/
207    
208  #define CLIP(X,A,B) (X < A) ? (A) : ((X > B) ? (B) : (X))  void interpolate8x8_6tap_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
   
 void interpolate8x8_lowpass_h(uint8_t *dst, uint8_t *src, int32_t dst_stride, int32_t src_stride, int32_t rounding)  
209  {  {
210      int32_t i;      int32_t i;
211            uint8_t round_add = 16 - rounding;
212    
213      for(i = 0; i < 8; i++)      for(i = 0; i < 8; i++)
214      {      {
         dst[0] = CLIP((((src[0] + src[1]) * 160 - (src[0] + src[2]) * 48 + (src[1] + src[3]) * 24 - (src[2] + src[4]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[1] = CLIP((((src[1] + src[2]) * 160 - (src[0] + src[3]) * 48 + (src[0] + src[4]) * 24 - (src[1] + src[5]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[2] = CLIP((((src[2] + src[3]) * 160 - (src[1] + src[4]) * 48 + (src[0] + src[5]) * 24 - (src[0] + src[6]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[3] = CLIP((((src[3] + src[4]) * 160 - (src[2] + src[5]) * 48 + (src[1] + src[6]) * 24 - (src[0] + src[7]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[4] = CLIP((((src[4] + src[5]) * 160 - (src[3] + src[6]) * 48 + (src[2] + src[7]) * 24 - (src[1] + src[8]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[5] = CLIP((((src[5] + src[6]) * 160 - (src[4] + src[7]) * 48 + (src[3] + src[8]) * 24 - (src[2] + src[8]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[6] = CLIP((((src[6] + src[7]) * 160 - (src[5] + src[8]) * 48 + (src[4] + src[8]) * 24 - (src[3] + src[7]) * 8 + (128 - rounding)) / 256), 0, 255);  
         dst[7] = CLIP((((src[7] + src[8]) * 160 - (src[6] + src[8]) * 48 + (src[5] + src[7]) * 24 - (src[4] + src[6]) * 8 + (128 - rounding)) / 256), 0, 255);  
215    
216          dst += dst_stride;          dst[0] = CLIP((((src[-2] + src[3]) + 5 * (((src[0] + src[1])<<2) - (src[-1] + src[2])) + round_add) >> 5), 0, 255);
217          src += src_stride;          dst[1] = CLIP((((src[-1] + src[4]) + 5 * (((src[1] + src[2])<<2) - (src[0] + src[3])) + round_add) >> 5), 0, 255);
218            dst[2] = CLIP((((src[0] + src[5]) + 5 * (((src[2] + src[3])<<2) - (src[1] + src[4])) + round_add) >> 5), 0, 255);
219            dst[3] = CLIP((((src[1] + src[6]) + 5 * (((src[3] + src[4])<<2) - (src[2] + src[5])) + round_add) >> 5), 0, 255);
220            dst[4] = CLIP((((src[2] + src[7]) + 5 * (((src[4] + src[5])<<2) - (src[3] + src[6])) + round_add) >> 5), 0, 255);
221            dst[5] = CLIP((((src[3] + src[8]) + 5 * (((src[5] + src[6])<<2) - (src[4] + src[7])) + round_add) >> 5), 0, 255);
222            dst[6] = CLIP((((src[4] + src[9]) + 5 * (((src[6] + src[7])<<2) - (src[5] + src[8])) + round_add) >> 5), 0, 255);
223            dst[7] = CLIP((((src[5] + src[10]) + 5 * (((src[7] + src[8])<<2) - (src[6] + src[9])) + round_add) >> 5), 0, 255);
224    
225            dst += stride;
226            src += stride;
227      }      }
228  }  }
229    
230  void interpolate8x8_lowpass_v(uint8_t *dst, uint8_t *src, int32_t dst_stride, int32_t src_stride, int32_t rounding)  void interpolate16x16_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
231  {  {
232      int32_t i;      int32_t i;
233            uint8_t round_add = 16 - rounding;
234    
235        for(i = 0; i < 17; i++)
236        {
237    
238            dst[0] = CLIP(((7 * ((src[0]<<1) - src[2]) +  23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255);
239            dst[1] = CLIP(((19 * src[1] + 20 * src[2] - src[5] + 3 * (src[4] - src[0] - (src[3]<<1)) + round_add) >> 5), 0, 255);
240            dst[2] = CLIP(((20 * (src[2] + src[3]) + (src[0]<<1) + 3 * (src[5] - ((src[1] + src[4])<<1)) - src[6] + round_add) >> 5), 0, 255);
241    
242            dst[3] = CLIP(((20 * (src[3] + src[4]) + 3 * ((src[6] + src[1]) - ((src[2] + src[5])<<1)) - (src[0] + src[7]) + round_add) >> 5), 0, 255);
243            dst[4] = CLIP(((20 * (src[4] + src[5]) - 3 * (((src[3] + src[6])<<1) - (src[2] + src[7])) - (src[1] + src[8]) + round_add) >> 5), 0, 255);
244            dst[5] = CLIP(((20 * (src[5] + src[6]) - 3 * (((src[4] + src[7])<<1) - (src[3] + src[8])) - (src[2] + src[9]) + round_add) >> 5), 0, 255);
245            dst[6] = CLIP(((20 * (src[6] + src[7]) - 3 * (((src[5] + src[8])<<1) - (src[4] + src[9])) - (src[3] + src[10]) + round_add) >> 5), 0, 255);
246            dst[7] = CLIP(((20 * (src[7] + src[8]) - 3 * (((src[6] + src[9])<<1) - (src[5] + src[10])) - (src[4] + src[11]) + round_add) >> 5), 0, 255);
247            dst[8] = CLIP(((20 * (src[8] + src[9]) - 3 * (((src[7] + src[10])<<1) - (src[6] + src[11])) - (src[5] + src[12]) + round_add) >> 5), 0, 255);
248            dst[9] = CLIP(((20 * (src[9] + src[10]) - 3 * (((src[8] + src[11])<<1) - (src[7] + src[12])) - (src[6] + src[13]) + round_add) >> 5), 0, 255);
249            dst[10] = CLIP(((20 * (src[10] + src[11]) - 3 * (((src[9] + src[12])<<1) - (src[8] + src[13])) - (src[7] + src[14]) + round_add) >> 5), 0, 255);
250            dst[11] = CLIP(((20 * (src[11] + src[12]) - 3 * (((src[10] + src[13])<<1) - (src[9] + src[14])) - (src[8] + src[15]) + round_add) >> 5), 0, 255);
251            dst[12] = CLIP(((20 * (src[12] + src[13]) - 3 * (((src[11] + src[14])<<1) - (src[10] + src[15])) - (src[9] + src[16]) + round_add) >> 5), 0, 255);
252    
253            dst[13] = CLIP(((20 * (src[13] + src[14]) + (src[16]<<1) + 3 * (src[11] - ((src[12] + src[15]) << 1)) - src[10] + round_add) >> 5), 0, 255);
254            dst[14] = CLIP(((19 * src[15] + 20 * src[14] + 3 * (src[12] - src[16] - (src[13] << 1)) - src[11] + round_add) >> 5), 0, 255);
255            dst[15] = CLIP(((23 * src[15] + 7 * ((src[16]<<1) - src[14]) + 3 * src[13] - src[12] + round_add) >> 5), 0, 255);
256    
257            dst += stride;
258            src += stride;
259        }
260    }
261    
262    void interpolate8x8_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
263    {
264        int32_t i;
265            uint8_t round_add = 16 - rounding;
266    
267        for(i = 0; i < 9; i++)
268        {
269    
270            dst[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255);
271            dst[1] = CLIP(((19 * src[1] + 20 * src[2] - src[5] + 3 * (src[4] - src[0] - (src[3]<<1)) + round_add) >> 5), 0, 255);
272            dst[2] = CLIP(((20 * (src[2] + src[3]) + (src[0]<<1) + 3 * (src[5] - ((src[1] + src[4])<<1)) - src[6] + round_add) >> 5), 0, 255);
273            dst[3] = CLIP(((20 * (src[3] + src[4]) + 3 * ((src[6] + src[1]) - ((src[2] + src[5])<<1)) - (src[0] + src[7]) + round_add) >> 5), 0, 255);
274            dst[4] = CLIP(((20 * (src[4] + src[5]) - 3 * (((src[3] + src[6])<<1) - (src[2] + src[7])) - (src[1] + src[8]) + round_add) >> 5), 0, 255);
275            dst[5] = CLIP(((20 * (src[5] + src[6]) + (src[8]<<1) + 3 * (src[3] - ((src[4] + src[7]) << 1)) - src[2] + round_add) >> 5), 0, 255);
276            dst[6] = CLIP(((19 * src[7] + 20 * src[6] + 3 * (src[4] - src[8] - (src[5] << 1)) - src[3] + round_add) >> 5), 0, 255);
277            dst[7] = CLIP(((23 * src[7] + 7 * ((src[8]<<1) - src[6]) + 3 * src[5] - src[4] + round_add) >> 5), 0, 255);
278    
279            dst += stride;
280            src += stride;
281        }
282    }
283    
284    void interpolate8x8_6tap_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
285    {
286        int32_t i;
287            uint8_t round_add = 16 - rounding;
288    
289      for(i = 0; i < 8; i++)      for(i = 0; i < 8; i++)
290      {      {
291            int32_t src_2 = src[-2*stride];
292            int32_t src_1 = src[-stride];
293          int32_t src0 = src[0];          int32_t src0 = src[0];
294          int32_t src1 = src[src_stride];          int32_t src1 = src[stride];
295          int32_t src2 = src[2 * src_stride];          int32_t src2 = src[2 * stride];
296          int32_t src3 = src[3 * src_stride];          int32_t src3 = src[3 * stride];
297          int32_t src4 = src[4 * src_stride];          int32_t src4 = src[4 * stride];
298          int32_t src5 = src[5 * src_stride];          int32_t src5 = src[5 * stride];
299          int32_t src6 = src[6 * src_stride];          int32_t src6 = src[6 * stride];
300          int32_t src7 = src[7 * src_stride];          int32_t src7 = src[7 * stride];
301          int32_t src8 = src[8 * src_stride];          int32_t src8 = src[8 * stride];
302            int32_t src9 = src[9 * stride];
303                  dst[0] = CLIP((((src0 + src1) * 160 - (src0 + src2) * 48 + (src1 + src3) * 24 - (src2 + src4) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src10 = src[10 * stride];
304          dst[dst_stride] = CLIP((((src1 + src2) * 160 - (src0 + src3) * 48 + (src0 + src4) * 24 - (src1 + src5) * 8 + (128 - rounding)) / 256), 0, 255);  
305          dst[2 * dst_stride] = CLIP((((src2 + src3) * 160 - (src1 + src4) * 48 + (src0 + src5) * 24 - (src0 + src6) * 8 + (128 - rounding)) / 256), 0, 255);          dst[0]                  = CLIP((((src_2 + src3) + 5 * (((src0 + src1)<<2) - (src_1 + src2)) + round_add) >> 5), 0, 255);
306          dst[3 * dst_stride] = CLIP((((src3 + src4) * 160 - (src2 + src5) * 48 + (src1 + src6) * 24 - (src0 + src7) * 8 + (128 - rounding)) / 256), 0, 255);          dst[stride]             = CLIP((((src_1 + src4) + 5 * (((src1 + src2)<<2) - (src0 + src3)) + round_add) >> 5), 0, 255);
307          dst[4 * dst_stride] = CLIP((((src4 + src5) * 160 - (src3 + src6) * 48 + (src2 + src7) * 24 - (src1 + src8) * 8 + (128 - rounding)) / 256), 0, 255);          dst[2 * stride] = CLIP((((src0 + src5) + 5 * (((src2 + src3)<<2) - (src1 + src4)) + round_add) >> 5), 0, 255);
308          dst[5 * dst_stride] = CLIP((((src5 + src6) * 160 - (src4 + src7) * 48 + (src3 + src8) * 24 - (src2 + src8) * 8 + (128 - rounding)) / 256), 0, 255);          dst[3 * stride] = CLIP((((src1 + src6) + 5 * (((src3 + src4)<<2) - (src2 + src5)) + round_add) >> 5), 0, 255);
309          dst[6 * dst_stride] = CLIP((((src6 + src7) * 160 - (src5 + src8) * 48 + (src4 + src8) * 24 - (src3 + src7) * 8 + (128 - rounding)) / 256), 0, 255);          dst[4 * stride] = CLIP((((src2 + src7) + 5 * (((src4 + src5)<<2) - (src3 + src6)) + round_add) >> 5), 0, 255);
310          dst[7 * dst_stride] = CLIP((((src7 + src8) * 160 - (src6 + src8) * 48 + (src5 + src7) * 24 - (src4 + src6) * 8 + (128 - rounding)) / 256), 0, 255);          dst[5 * stride] = CLIP((((src3 + src8) + 5 * (((src5 + src6)<<2) - (src4 + src7)) + round_add) >> 5), 0, 255);
311            dst[6 * stride] = CLIP((((src4 + src9) + 5 * (((src6 + src7)<<2) - (src5 + src8)) + round_add) >> 5), 0, 255);
312            dst[7 * stride] = CLIP((((src5 + src10) + 5 * (((src7 + src8)<<2) - (src6 + src9)) + round_add) >> 5), 0, 255);
313    
314                  dst++;                  dst++;
315          src++;          src++;
316      }      }
317  }  }
318    
319  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 interpolate16x16_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
320  {  {
     uint8_t data[72];  
   
321          int32_t i;          int32_t i;
322            uint8_t round_add = 16 - rounding;
323    
324        for(i = 0; i < 17; i++)
     for(i = 0; i < 9; i++)  
325      {      {
326          dst2[0] = data[8 * i + 0] = CLIP((((src[0] + src[1]) * 160 - (src[0] + src[2]) * 48 + (src[1] + src[3]) * 24 - (src[2] + src[4]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src0 = src[0];
327          dst2[1] = data[8 * i + 1] = CLIP((((src[1] + src[2]) * 160 - (src[0] + src[3]) * 48 + (src[0] + src[4]) * 24 - (src[1] + src[5]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src1 = src[stride];
328          dst2[2] = data[8 * i + 2] = CLIP((((src[2] + src[3]) * 160 - (src[1] + src[4]) * 48 + (src[0] + src[5]) * 24 - (src[0] + src[6]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src2 = src[2 * stride];
329          dst2[3] = data[8 * i + 3] = CLIP((((src[3] + src[4]) * 160 - (src[2] + src[5]) * 48 + (src[1] + src[6]) * 24 - (src[0] + src[7]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src3 = src[3 * stride];
330          dst2[4] = data[8 * i + 4] = CLIP((((src[4] + src[5]) * 160 - (src[3] + src[6]) * 48 + (src[2] + src[7]) * 24 - (src[1] + src[8]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src4 = src[4 * stride];
331          dst2[5] = data[8 * i + 5] = CLIP((((src[5] + src[6]) * 160 - (src[4] + src[7]) * 48 + (src[3] + src[8]) * 24 - (src[2] + src[8]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src5 = src[5 * stride];
332          dst2[6] = data[8 * i + 6] = CLIP((((src[6] + src[7]) * 160 - (src[5] + src[8]) * 48 + (src[4] + src[8]) * 24 - (src[3] + src[7]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src6 = src[6 * stride];
333          dst2[7] = data[8 * i + 7] = CLIP((((src[7] + src[8]) * 160 - (src[6] + src[8]) * 48 + (src[5] + src[7]) * 24 - (src[4] + src[6]) * 8 + (128 - rounding)) / 256), 0, 255);          int32_t src7 = src[7 * stride];
334            int32_t src8 = src[8 * stride];
335            int32_t src9 = src[9 * stride];
336            int32_t src10 = src[10 * stride];
337            int32_t src11 = src[11 * stride];
338            int32_t src12 = src[12 * stride];
339            int32_t src13 = src[13 * stride];
340            int32_t src14 = src[14 * stride];
341            int32_t src15 = src[15 * stride];
342            int32_t src16 = src[16 * stride];
343    
344    
345            dst[0] = CLIP(((7 * ((src0<<1) - src2) +  23 * src1 + 3 * src3 - src4 + round_add) >> 5), 0, 255);
346            dst[stride] = CLIP(((19 * src1 + 20 * src2 - src5 + 3 * (src4 - src0 - (src3<<1)) + round_add) >> 5), 0, 255);
347            dst[2*stride] = CLIP(((20 * (src2 + src3) + (src0<<1) + 3 * (src5 - ((src1 + src4)<<1)) - src6 + round_add) >> 5), 0, 255);
348    
349            dst[3*stride] = CLIP(((20 * (src3 + src4) + 3 * ((src6 + src1) - ((src2 + src5)<<1)) - (src0 + src7) + round_add) >> 5), 0, 255);
350            dst[4*stride] = CLIP(((20 * (src4 + src5) - 3 * (((src3 + src6)<<1) - (src2 + src7)) - (src1 + src8) + round_add) >> 5), 0, 255);
351            dst[5*stride] = CLIP(((20 * (src5 + src6) - 3 * (((src4 + src7)<<1) - (src3 + src8)) - (src2 + src9) + round_add) >> 5), 0, 255);
352            dst[6*stride] = CLIP(((20 * (src6 + src7) - 3 * (((src5 + src8)<<1) - (src4 + src9)) - (src3 + src10) + round_add) >> 5), 0, 255);
353            dst[7*stride] = CLIP(((20 * (src7 + src8) - 3 * (((src6 + src9)<<1) - (src5 + src10)) - (src4 + src11) + round_add) >> 5), 0, 255);
354            dst[8*stride] = CLIP(((20 * (src8 + src9) - 3 * (((src7 + src10)<<1) - (src6 + src11)) - (src5 + src12) + round_add) >> 5), 0, 255);
355            dst[9*stride] = CLIP(((20 * (src9 + src10) - 3 * (((src8 + src11)<<1) - (src7 + src12)) - (src6 + src13) + round_add) >> 5), 0, 255);
356            dst[10*stride] = CLIP(((20 * (src10 + src11) - 3 * (((src9 + src12)<<1) - (src8 + src13)) - (src7 + src14) + round_add) >> 5), 0, 255);
357            dst[11*stride] = CLIP(((20 * (src11 + src12) - 3 * (((src10 + src13)<<1) - (src9 + src14)) - (src8 + src15) + round_add) >> 5), 0, 255);
358            dst[12*stride] = CLIP(((20 * (src12 + src13) - 3 * (((src11 + src14)<<1) - (src10 + src15)) - (src9 + src16) + round_add) >> 5), 0, 255);
359    
360            dst[13*stride] = CLIP(((20 * (src13 + src14) + (src16<<1) + 3 * (src11 - ((src12 + src15) << 1)) - src10 + round_add) >> 5), 0, 255);
361            dst[14*stride] = CLIP(((19 * src15 + 20 * src14 + 3 * (src12 - src16 - (src13 << 1)) - src11 + round_add) >> 5), 0, 255);
362            dst[15*stride] = CLIP(((23 * src15 + 7 * ((src16<<1) - src14) + 3 * src13 - src12 + round_add) >> 5), 0, 255);
363    
364          src += src_stride;                  dst++;
365                  dst2 += dst2_stride;          src++;
366        }
367      }      }
368    
369      for(i = 0; i < 8; i++)  void interpolate8x8_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
370    {
371        int32_t i;
372            uint8_t round_add = 16 - rounding;
373    
374        for(i = 0; i < 9; i++)
375      {      {
376          int32_t src0 = data[i];          int32_t src0 = src[0];
377          int32_t src1 = data[8 + i];          int32_t src1 = src[stride];
378          int32_t src2 = data[2 * 8 + i];          int32_t src2 = src[2 * stride];
379          int32_t src3 = data[3 * 8 + i];          int32_t src3 = src[3 * stride];
380          int32_t src4 = data[4 * 8 + i];          int32_t src4 = src[4 * stride];
381          int32_t src5 = data[5 * 8 + i];          int32_t src5 = src[5 * stride];
382          int32_t src6 = data[6 * 8 + i];          int32_t src6 = src[6 * stride];
383          int32_t src7 = data[7 * 8 + i];          int32_t src7 = src[7 * stride];
384          int32_t src8 = data[8 * 8 + i];          int32_t src8 = src[8 * stride];
385    
386                  dst1[0] = CLIP((((src0 + src1) * 160 - (src0 + src2) * 48 + (src1 + src3) * 24 - (src2 + src4) * 8 + (128 - rounding)) / 256), 0, 255);          dst[0]                  = CLIP(((7 * ((src0<<1) - src2) + 23 * src1 + 3 * src3 - src4 + round_add) >> 5), 0, 255);
387          dst1[dst1_stride] = CLIP((((src1 + src2) * 160 - (src0 + src3) * 48 + (src0 + src4) * 24 - (src1 + src5) * 8 + (128 - rounding)) / 256), 0, 255);          dst[stride]             = CLIP(((19 * src1 + 20 * src2 - src5 + 3 * (src4 - src0 - (src3 << 1)) + round_add) >> 5), 0, 255);
388          dst1[2 * dst1_stride] = CLIP((((src2 + src3) * 160 - (src1 + src4) * 48 + (src0 + src5) * 24 - (src0 + src6) * 8 + (128 - rounding)) / 256), 0, 255);          dst[2 * stride] = CLIP(((20 * (src2 + src3) + (src0<<1) + 3 * (src5 - ((src1 + src4) <<1 )) - src6 + round_add) >> 5), 0, 255);
389          dst1[3 * dst1_stride] = CLIP((((src3 + src4) * 160 - (src2 + src5) * 48 + (src1 + src6) * 24 - (src0 + src7) * 8 + (128 - rounding)) / 256), 0, 255);          dst[3 * stride] = CLIP(((20 * (src3 + src4) + 3 * ((src6 + src1) - ((src2 + src5)<<1)) - (src0 + src7) + round_add) >> 5), 0, 255);
390          dst1[4 * dst1_stride] = CLIP((((src4 + src5) * 160 - (src3 + src6) * 48 + (src2 + src7) * 24 - (src1 + src8) * 8 + (128 - rounding)) / 256), 0, 255);          dst[4 * stride] = CLIP(((20 * (src4 + src5) + 3 * ((src2 + src7) - ((src3 + src6)<<1)) - (src1 + src8) + round_add) >> 5), 0, 255);
391          dst1[5 * dst1_stride] = CLIP((((src5 + src6) * 160 - (src4 + src7) * 48 + (src3 + src8) * 24 - (src2 + src8) * 8 + (128 - rounding)) / 256), 0, 255);          dst[5 * stride] = CLIP(((20 * (src5 + src6) + (src8<<1) + 3 * (src3 - ((src4 + src7) << 1)) - src2 + round_add) >> 5), 0, 255);
392          dst1[6 * dst1_stride] = CLIP((((src6 + src7) * 160 - (src5 + src8) * 48 + (src4 + src8) * 24 - (src3 + src7) * 8 + (128 - rounding)) / 256), 0, 255);          dst[6 * stride] = CLIP(((19 * src7 + 20 * src6 - src3 + 3 * (src4 - src8 - (src5 << 1)) + round_add) >> 5), 0, 255);
393          dst1[7 * dst1_stride] = CLIP((((src7 + src8) * 160 - (src6 + src8) * 48 + (src5 + src7) * 24 - (src4 + src6) * 8 + (128 - rounding)) / 256), 0, 255);          dst[7 * stride] = CLIP(((7 * ((src8<<1) - src6) + 23 * src7 + 3 * src5 - src4 + round_add) >> 5), 0, 255);
394    
395                  dst1++;                  dst++;
396            src++;
397      }      }
398  }  }
399    
400  void interpolate8x8_bilinear2(uint8_t *dst, uint8_t *src1, uint8_t *src2, int32_t dst_stride, int32_t src_stride, int32_t rounding)  void interpolate16x16_lowpass_hv_c(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t stride, int32_t rounding)
401  {  {
402      int32_t i;      int32_t i;
403            uint8_t round_add = 16 - rounding;
404            uint8_t *h_ptr = dst2;
405    
406      for(i = 0; i < 8; i++)      for(i = 0; i < 17; i++)
407      {      {
408          dst[0] = (src1[0] + src2[0] + (1 - rounding)) >> 1;  
409          dst[1] = (src1[1] + src2[1] + (1 - rounding)) >> 1;          h_ptr[0] = CLIP(((7 * ((src[0]<<1) - src[2]) +  23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255);
410          dst[2] = (src1[2] + src2[2] + (1 - rounding)) >> 1;          h_ptr[1] = CLIP(((19 * src[1] + 20 * src[2] - src[5] + 3 * (src[4] - src[0] - (src[3]<<1)) + round_add) >> 5), 0, 255);
411          dst[3] = (src1[3] + src2[3] + (1 - rounding)) >> 1;          h_ptr[2] = CLIP(((20 * (src[2] + src[3]) + (src[0]<<1) + 3 * (src[5] - ((src[1] + src[4])<<1)) - src[6] + round_add) >> 5), 0, 255);
412          dst[4] = (src1[4] + src2[4] + (1 - rounding)) >> 1;  
413          dst[5] = (src1[5] + src2[5] + (1 - rounding)) >> 1;          h_ptr[3] = CLIP(((20 * (src[3] + src[4]) + 3 * ((src[6] + src[1]) - ((src[2] + src[5])<<1)) - (src[0] + src[7]) + round_add) >> 5), 0, 255);
414          dst[6] = (src1[6] + src2[6] + (1 - rounding)) >> 1;          h_ptr[4] = CLIP(((20 * (src[4] + src[5]) - 3 * (((src[3] + src[6])<<1) - (src[2] + src[7])) - (src[1] + src[8]) + round_add) >> 5), 0, 255);
415          dst[7] = (src1[7] + src2[7] + (1 - rounding)) >> 1;          h_ptr[5] = CLIP(((20 * (src[5] + src[6]) - 3 * (((src[4] + src[7])<<1) - (src[3] + src[8])) - (src[2] + src[9]) + round_add) >> 5), 0, 255);
416            h_ptr[6] = CLIP(((20 * (src[6] + src[7]) - 3 * (((src[5] + src[8])<<1) - (src[4] + src[9])) - (src[3] + src[10]) + round_add) >> 5), 0, 255);
417          dst += dst_stride;          h_ptr[7] = CLIP(((20 * (src[7] + src[8]) - 3 * (((src[6] + src[9])<<1) - (src[5] + src[10])) - (src[4] + src[11]) + round_add) >> 5), 0, 255);
418          src1 += src_stride;          h_ptr[8] = CLIP(((20 * (src[8] + src[9]) - 3 * (((src[7] + src[10])<<1) - (src[6] + src[11])) - (src[5] + src[12]) + round_add) >> 5), 0, 255);
419          src2 += 8;          h_ptr[9] = CLIP(((20 * (src[9] + src[10]) - 3 * (((src[8] + src[11])<<1) - (src[7] + src[12])) - (src[6] + src[13]) + round_add) >> 5), 0, 255);
420            h_ptr[10] = CLIP(((20 * (src[10] + src[11]) - 3 * (((src[9] + src[12])<<1) - (src[8] + src[13])) - (src[7] + src[14]) + round_add) >> 5), 0, 255);
421            h_ptr[11] = CLIP(((20 * (src[11] + src[12]) - 3 * (((src[10] + src[13])<<1) - (src[9] + src[14])) - (src[8] + src[15]) + round_add) >> 5), 0, 255);
422            h_ptr[12] = CLIP(((20 * (src[12] + src[13]) - 3 * (((src[11] + src[14])<<1) - (src[10] + src[15])) - (src[9] + src[16]) + round_add) >> 5), 0, 255);
423    
424            h_ptr[13] = CLIP(((20 * (src[13] + src[14]) + (src[16]<<1) + 3 * (src[11] - ((src[12] + src[15]) << 1)) - src[10] + round_add) >> 5), 0, 255);
425            h_ptr[14] = CLIP(((19 * src[15] + 20 * src[14] + 3 * (src[12] - src[16] - (src[13] << 1)) - src[11] + round_add) >> 5), 0, 255);
426            h_ptr[15] = CLIP(((23 * src[15] + 7 * ((src[16]<<1) - src[14]) + 3 * src[13] - src[12] + round_add) >> 5), 0, 255);
427    
428            h_ptr += stride;
429            src += stride;
430      }      }
431    
432            interpolate16x16_lowpass_v_c(dst1, dst2, stride, rounding);
433    
434  }  }
435    
436  void interpolate8x8_bilinear4(uint8_t *dst, uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int32_t stride, int32_t rounding)  void interpolate8x8_lowpass_hv_c(uint8_t *dst1, uint8_t *dst2, uint8_t *src, int32_t stride, int32_t rounding)
437  {  {
438      int32_t i;      int32_t i;
439            uint8_t round_add = 16 - rounding;
440            uint8_t *h_ptr = dst2;
441    
442      for(i = 0; i < 8; i++)      for(i = 0; i < 9; i++)
443      {      {
         dst[0] = (src1[0] + src2[0] + src3[0] + src4[0] + (2 - rounding)) >> 2;  
         dst[1] = (src1[1] + src2[1] + src3[1] + src4[1] + (2 - rounding)) >> 2;  
         dst[2] = (src1[2] + src2[2] + src3[2] + src4[2] + (2 - rounding)) >> 2;  
         dst[3] = (src1[3] + src2[3] + src3[3] + src4[3] + (2 - rounding)) >> 2;  
         dst[4] = (src1[4] + src2[4] + src3[4] + src4[4] + (2 - rounding)) >> 2;  
         dst[5] = (src1[5] + src2[5] + src3[5] + src4[5] + (2 - rounding)) >> 2;  
         dst[6] = (src1[6] + src2[6] + src3[6] + src4[6] + (2 - rounding)) >> 2;  
         dst[7] = (src1[7] + src2[7] + src3[7] + src4[7] + (2 - rounding)) >> 2;  
444    
445                  dst += stride;          h_ptr[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255);
446          src1 += stride;          h_ptr[1] = CLIP(((19 * src[1] + 20 * src[2] - src[5] + 3 * (src[4] - src[0] - (src[3]<<1)) + round_add) >> 5), 0, 255);
447          src2 += 8;          h_ptr[2] = CLIP(((20 * (src[2] + src[3]) + (src[0]<<1) + 3 * (src[5] - ((src[1] + src[4])<<1)) - src[6] + round_add) >> 5), 0, 255);
448          src3 += 8;          h_ptr[3] = CLIP(((20 * (src[3] + src[4]) + 3 * ((src[6] + src[1]) - ((src[2] + src[5])<<1)) - (src[0] + src[7]) + round_add) >> 5), 0, 255);
449          src4 += 8;          h_ptr[4] = CLIP(((20 * (src[4] + src[5]) - 3 * (((src[3] + src[6])<<1) - (src[2] + src[7])) - (src[1] + src[8]) + round_add) >> 5), 0, 255);
450            h_ptr[5] = CLIP(((20 * (src[5] + src[6]) + (src[8]<<1) + 3 * (src[3] - ((src[4] + src[7]) << 1)) - src[2] + round_add) >> 5), 0, 255);
451            h_ptr[6] = CLIP(((19 * src[7] + 20 * src[6] + 3 * (src[4] - src[8] - (src[5] << 1)) - src[3] + round_add) >> 5), 0, 255);
452            h_ptr[7] = CLIP(((23 * src[7] + 7 * ((src[8]<<1) - src[6]) + 3 * src[5] - src[4] + round_add) >> 5), 0, 255);
453    
454            h_ptr += stride;
455            src += stride;
456      }      }
457    
458            interpolate8x8_lowpass_v_c(dst1, dst2, stride, rounding);
459    
460  }  }

Legend:
Removed from v.651  
changed lines
  Added in v.1382

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