[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.10.2.2, Mon Jun 9 13:54:07 2003 UTC revision 1.10.2.4, Wed Aug 13 11:43:57 2003 UTC
# Line 96  Line 96 
96  INTERPOLATE8X8 interpolate8x8_halfpel_v_c;  INTERPOLATE8X8 interpolate8x8_halfpel_v_c;
97  INTERPOLATE8X8 interpolate8x8_halfpel_hv_c;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_c;
98    
99    #ifdef ARCH_IS_IA32
100  INTERPOLATE8X8 interpolate8x8_halfpel_h_mmx;  INTERPOLATE8X8 interpolate8x8_halfpel_h_mmx;
101  INTERPOLATE8X8 interpolate8x8_halfpel_v_mmx;  INTERPOLATE8X8 interpolate8x8_halfpel_v_mmx;
102  INTERPOLATE8X8 interpolate8x8_halfpel_hv_mmx;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_mmx;
# Line 111  Line 112 
112  INTERPOLATE8X8 interpolate8x8_halfpel_h_3dne;  INTERPOLATE8X8 interpolate8x8_halfpel_h_3dne;
113  INTERPOLATE8X8 interpolate8x8_halfpel_v_3dne;  INTERPOLATE8X8 interpolate8x8_halfpel_v_3dne;
114  INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dne;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_3dne;
115    #endif
116    
117    #ifdef ARCH_IS_IA64
118  INTERPOLATE8X8 interpolate8x8_halfpel_h_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_h_ia64;
119  INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_v_ia64;
120  INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;  INTERPOLATE8X8 interpolate8x8_halfpel_hv_ia64;
121    #endif
122    
123  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_c;  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_c;
124  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_c;  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_c;
125    
126    #ifdef ARCH_IS_IA32
127  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;  INTERPOLATE8X8_AVG2 interpolate8x8_avg2_mmx;
128  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;  INTERPOLATE8X8_AVG4 interpolate8x8_avg4_mmx;
129    #endif
130    
131  INTERPOLATE_LOWPASS interpolate8x8_lowpass_h_c;  INTERPOLATE_LOWPASS interpolate8x8_lowpass_h_c;
132  INTERPOLATE_LOWPASS interpolate8x8_lowpass_v_c;  INTERPOLATE_LOWPASS interpolate8x8_lowpass_v_c;
# Line 134  Line 140 
140  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_c;  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_c;
141  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_c;  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_c;
142    
143    #ifdef ARCH_IS_IA32
144  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_mmx;  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_h_mmx;
145  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_mmx;  INTERPOLATE8X8_6TAP_LOWPASS interpolate8x8_6tap_lowpass_v_mmx;
146    #endif
147    
148  static __inline void  static __inline void
149  interpolate8x8_switch(uint8_t * const cur,  interpolate8x8_switch(uint8_t * const cur,
# Line 147  Line 155 
155                                            const uint32_t stride,                                            const uint32_t stride,
156                                            const uint32_t rounding)                                            const uint32_t rounding)
157  {  {
         int32_t ddx, ddy;  
158    
159          switch (((dx & 1) << 1) + (dy & 1))     /* ((dx%2)?2:0)+((dy%2)?1:0) */          const uint8_t * const src = refn + (y + (dy>>1)) * stride + x + (dx>>1);
160          {          uint8_t * const dst = cur + y * stride + x;
161    
162            switch (((dx & 1) << 1) + (dy & 1))     { /* ((dx%2)?2:0)+((dy%2)?1:0) */
163          case 0:          case 0:
164                  ddx = dx / 2;                  transfer8x8_copy(dst, src, stride);
                 ddy = dy / 2;  
                 transfer8x8_copy(cur + y * stride + x,  
                                                  refn + (int)((y + ddy) * stride + x + ddx), stride);  
165                  break;                  break;
   
166          case 1:          case 1:
167                  ddx = dx / 2;                  interpolate8x8_halfpel_v(dst, src, stride, rounding);
                 ddy = (dy - 1) / 2;  
                 interpolate8x8_halfpel_v(cur + y * stride + x,  
                                                                  refn + (int)((y + ddy) * stride + x + ddx), stride,  
                                                                  rounding);  
168                  break;                  break;
   
169          case 2:          case 2:
170                  ddx = (dx - 1) / 2;                  interpolate8x8_halfpel_h(dst, src, stride, rounding);
                 ddy = dy / 2;  
                 interpolate8x8_halfpel_h(cur + y * stride + x,  
                                                                  refn + (int)((y + ddy) * stride + x + ddx), stride,  
                                                                  rounding);  
171                  break;                  break;
   
172          default:          default:
173                  ddx = (dx - 1) / 2;                  interpolate8x8_halfpel_hv(dst, src, stride, rounding);
                 ddy = (dy - 1) / 2;  
                 interpolate8x8_halfpel_hv(cur + y * stride + x,  
                                                                  refn + (int)((y + ddy) * stride + x + ddx), stride,  
                                                                   rounding);  
174                  break;                  break;
175          }          }
176  }  }
# Line 222  Line 213 
213  static __inline uint8_t *  static __inline uint8_t *
214  interpolate8x8_switch2(uint8_t * const buffer,  interpolate8x8_switch2(uint8_t * const buffer,
215                                            const uint8_t * const refn,                                            const uint8_t * const refn,
216                                            const uint32_t x,                                            const int x,
217                                            const uint32_t y,                                            const int y,
218                                            const int32_t dx,                                            const int dx,
219                                            const int dy,                                            const int dy,
220                                            const uint32_t stride,                                            const uint32_t stride,
221                                            const uint32_t rounding)                                            const uint32_t rounding)
222  {  {
         int32_t ddx, ddy;  
223    
224          switch (((dx & 1) << 1) + (dy & 1))     /* ((dx%2)?2:0)+((dy%2)?1:0) */          const uint8_t * const src = refn + (y + (dy>>1)) * stride + x + (dx>>1);
         {  
         case 0:  
                 return (uint8_t *)refn + (int)((y + dy/2) * stride + x + dx/2);  
225    
226            switch (((dx & 1) << 1) + (dy & 1))     { /* ((dx%2)?2:0)+((dy%2)?1:0) */
227            case 0:
228                    return (uint8_t *)src;
229          case 1:          case 1:
230                  ddx = dx / 2;                  interpolate8x8_halfpel_v(buffer, src, stride, rounding);
                 ddy = (dy - 1) / 2;  
                 interpolate8x8_halfpel_v(buffer,  
                                                                  refn + (int)((y + ddy) * stride + x + ddx), stride,  
                                                                  rounding);  
231                  break;                  break;
   
232          case 2:          case 2:
233                  ddx = (dx - 1) / 2;                  interpolate8x8_halfpel_h(buffer, src, stride, rounding);
                 ddy = dy / 2;  
                 interpolate8x8_halfpel_h(buffer,  
                                                                  refn + (int)((y + ddy) * stride + x + ddx), stride,  
                                                                  rounding);  
234                  break;                  break;
   
235          default:          default:
236                  ddx = (dx - 1) / 2;                  interpolate8x8_halfpel_hv(buffer, src, stride, rounding);
                 ddy = (dy - 1) / 2;  
                 interpolate8x8_halfpel_hv(buffer,  
                                                                  refn + (int)((y + ddy) * stride + x + ddx), stride,  
                                                                   rounding);  
237                  break;                  break;
238          }          }
239          return buffer;          return buffer;

Legend:
Removed from v.1.10.2.2  
changed lines
  Added in v.1.10.2.4

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