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

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

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

revision 1.4.2.1, Sat Oct 5 21:30:59 2002 UTC revision 1.10.2.3, Mon Jun 9 13:54:02 2003 UTC
# Line 1  Line 1 
1  /**************************************************************************  /*****************************************************************************
2   *   *
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) 2001-2003 Peter Ross <pross@xvid.org>
7   *   *
8   *      This program is free software; you can redistribute it and/or modify   *      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   *      it under the terms of the GNU General Public License as published by
# Line 15  Line 17 
17   *   *
18   *      You should have received a copy of the GNU General Public License   *      You should have received a copy of the GNU General Public License
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., 675 Mass Ave, Cambridge, MA 02139, USA.   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  *  
  *************************************************************************/  
   
 /**************************************************************************  
21   *   *
22   *      History:   * $Id$
23   *   *
24   *  05.10.2002  new bilinear and qpel interpolation code - Isibaar   ****************************************************************************/
  *      27.12.2001      modified "compensate_halfpel"  
  *      05.11.2001      initial version; (c)2001 peter ross <pross@cs.rmit.edu.au>  
  *  
  *************************************************************************/  
   
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;
# Line 41  Line 35 
35  INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;  INTERPOLATE8X8_AVG2_PTR interpolate8x8_avg2;
36  INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;  INTERPOLATE8X8_AVG4_PTR interpolate8x8_avg4;
37    
38  INTERPOLATE8X8_LOWPASS_PTR interpolate8x8_lowpass_h;  INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_h;
39  INTERPOLATE8X8_LOWPASS_PTR interpolate8x8_lowpass_v;  INTERPOLATE_LOWPASS_PTR interpolate8x8_lowpass_v;
40  INTERPOLATE8X8_LOWPASS_HV_PTR interpolate8x8_lowpass_hv;  
41    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;  INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_h;
48  INTERPOLATE8X8_6TAP_LOWPASS_PTR interpolate8x8_6tap_lowpass_v;  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)  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      int32_t i;      uint32_t i;
53          const int32_t round = 1 - rounding;          const int32_t round = 1 - rounding;
54    
55      for(i = 0; i < 8; i++)      for(i = 0; i < height; i++)
56      {      {
57          dst[0] = (src1[0] + src2[0] + round) >> 1;          dst[0] = (src1[0] + src2[0] + round) >> 1;
58          dst[1] = (src1[1] + src2[1] + round) >> 1;          dst[1] = (src1[1] + src2[1] + round) >> 1;
# Line 94  Line 93 
93      }      }
94  }  }
95    
96  // dst = interpolate(src)  /* 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 102  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;          intptr_t j;
105    
106          for (j = 0; j < 8; j++) {          if (rounding)
107                  for (i = 0; i < 8; i++) {                  for (j = 7*stride; j >= 0; j-=stride)
108                    {
109                          int16_t tot =                                  dst[j + 0] = (uint8_t)((src[j + 0] + src[j + 1] )>>1);
110                                  (int32_t) src[j * stride + i] + (int32_t) src[j * stride + i +                                  dst[j + 1] = (uint8_t)((src[j + 1] + src[j + 2] )>>1);
111                                                                                                                            1];                                  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                          tot = (int32_t) ((tot + 1 - rounding) >> 1);                                  dst[j + 4] = (uint8_t)((src[j + 4] + src[j + 5] )>>1);
114                          dst[j * stride + i] = (uint8_t) tot;                                  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 125  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;          intptr_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 144  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;          intptr_t j;
177    
178          for (j = 0; j < 8; j++) {          if (rounding)
179                  for (i = 0; i < 8; i++) {                  for (j = 7*stride; j >= 0; j-=stride)
180                          int16_t tot =                  {
181                                  src[j * stride + i] + src[j * stride + i + 1] +                                  dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +1)>>2);
182                                  src[j * stride + i + stride] + src[j * stride + i + stride +                                  dst[j + 1] = (uint8_t)((src[j+1] + src[j+2] + src[j+stride+1] + src[j+stride+2] +1)>>2);
183                                                                                                     1];                                  dst[j + 2] = (uint8_t)((src[j+2] + src[j+3] + src[j+stride+2] + src[j+stride+3] +1)>>2);
184                          tot = ((tot + 2 - rounding) >> 2);                                  dst[j + 3] = (uint8_t)((src[j+3] + src[j+4] + src[j+stride+3] + src[j+stride+4] +1)>>2);
185                          dst[j * stride + i] = (uint8_t) tot;                                  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                                    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                    }
190            else
191                    for (j = 7*stride; j >= 0; j-=stride)
192                    {
193                                    dst[j + 0] = (uint8_t)((src[j+0] + src[j+1] + src[j+stride+0] + src[j+stride+1] +2)>>2);
194                                    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 162  Line 205 
205   * QPEL STUFF STARTS HERE                                    *   * QPEL STUFF STARTS HERE                                    *
206   *************************************************************/   *************************************************************/
207    
 #define CLIP(X,A,B) (X < A) ? (A) : ((X > B) ? (B) : (X))  
   
208  void interpolate8x8_6tap_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)  void interpolate8x8_6tap_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
209  {  {
210      int32_t i;      int32_t i;
# Line 186  Line 227 
227      }      }
228  }  }
229    
230    void interpolate16x16_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
231    {
232        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)  void interpolate8x8_lowpass_h_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
263  {  {
264      int32_t i;      int32_t i;
265          uint8_t round_add = 16 - rounding;          uint8_t round_add = 16 - rounding;
266    
267      for(i = 0; i < 8; i++)      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);          dst[0] = CLIP(((7 * ((src[0]<<1) - src[2]) + 23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255);
# Line 243  Line 316 
316      }      }
317  }  }
318    
319    void interpolate16x16_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
320    {
321        int32_t i;
322            uint8_t round_add = 16 - rounding;
323    
324        for(i = 0; i < 17; i++)
325        {
326            int32_t src0 = src[0];
327            int32_t src1 = src[stride];
328            int32_t src2 = src[2 * stride];
329            int32_t src3 = src[3 * stride];
330            int32_t src4 = src[4 * stride];
331            int32_t src5 = src[5 * stride];
332            int32_t src6 = src[6 * stride];
333            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                    dst++;
365            src++;
366        }
367    }
368    
369  void interpolate8x8_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)  void interpolate8x8_lowpass_v_c(uint8_t *dst, uint8_t *src, int32_t stride, int32_t rounding)
370  {  {
371      int32_t i;      int32_t i;
372          uint8_t round_add = 16 - rounding;          uint8_t round_add = 16 - rounding;
373    
374      for(i = 0; i < 8; i++)      for(i = 0; i < 9; i++)
375      {      {
376          int32_t src0 = src[0];          int32_t src0 = src[0];
377          int32_t src1 = src[stride];          int32_t src1 = src[stride];
# Line 274  Line 397 
397      }      }
398  }  }
399    
400    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;
403            uint8_t round_add = 16 - rounding;
404            uint8_t *h_ptr = dst2;
405    
406        for(i = 0; i < 17; i++)
407        {
408    
409            h_ptr[0] = CLIP(((7 * ((src[0]<<1) - src[2]) +  23 * src[1] + 3 * src[3] - src[4] + round_add) >> 5), 0, 255);
410            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            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    
413            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            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            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            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            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            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_lowpass_hv_c(uint8_t *dst1, uint8_t *dst2, uint8_t *src, 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;

Legend:
Removed from v.1.4.2.1  
changed lines
  Added in v.1.10.2.3

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