[svn] / branches / dev-api-3 / xvidcore / src / image / reduced.c Repository:
ViewVC logotype

Diff of /branches/dev-api-3/xvidcore/src/image/reduced.c

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

revision 759, Sat Jan 4 04:28:48 2003 UTC revision 760, Sat Jan 4 06:14:33 2003 UTC
# Line 50  Line 50 
50   *  exception also makes it possible to release a modified version which   *  exception also makes it possible to release a modified version which
51   *  carries forward this exception.   *  carries forward this exception.
52   *   *
53   * $Id: reduced.c,v 1.1.2.2 2002-12-09 10:47:05 suxen_drol Exp $   * $Id: reduced.c,v 1.1.2.3 2003-01-04 06:14:33 suxen_drol Exp $
54   *   *
55   ****************************************************************************/   ****************************************************************************/
56    
57  #include "../portab.h"  #include "../portab.h"
58    #include "../global.h"
59  #include "reduced.h"  #include "reduced.h"
60    
61  // function pointers  // function pointers
# Line 68  Line 69 
69  //////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////
70  // Upsampling (1/3/3/1) filter  // Upsampling (1/3/3/1) filter
71    
72  #define CLIP(x) ((x)<0 ? 0 : (x)>255 ? 255 : (x))  #define ADD(dst,src)  (dst) = CLIP((dst)+(src), 0, 255)
 #define ADD(dst,src)  (dst) = CLIP((dst)+(src))  
73    
74  static __inline void Filter_31(uint8_t *Dst1, uint8_t *Dst2,  static __inline void Filter_31(uint8_t *Dst1, uint8_t *Dst2,
75                               const int16_t *Src1, const int16_t *Src2)                               const int16_t *Src1, const int16_t *Src2)
# Line 77  Line 77 
77      /* Src[] is assumed to be >=0. So we can use ">>2" instead of "/2" */      /* Src[] is assumed to be >=0. So we can use ">>2" instead of "/2" */
78    int16_t a = (3*Src1[0]+  Src2[0]+2) >> 2;    int16_t a = (3*Src1[0]+  Src2[0]+2) >> 2;
79    int16_t b = (  Src1[0]+3*Src2[0]+2) >> 2;    int16_t b = (  Src1[0]+3*Src2[0]+2) >> 2;
80    Dst1[0] = CLIP(a);    Dst1[0] = CLIP(a, 0, 255);
81    Dst2[0] = CLIP(b);    Dst2[0] = CLIP(b, 0, 255);
82  }  }
83    
84  static __inline void Filter_9331(uint8_t *Dst1, uint8_t *Dst2,  static __inline void Filter_9331(uint8_t *Dst1, uint8_t *Dst2,
# Line 89  Line 89 
89    int16_t b = (3*Src1[0]+  9*Src1[1]+ 1*Src2[0] + 3*Src2[1] + 8) >> 4;    int16_t b = (3*Src1[0]+  9*Src1[1]+ 1*Src2[0] + 3*Src2[1] + 8) >> 4;
90    int16_t c = (3*Src1[0]+  1*Src1[1]+ 9*Src2[0] + 3*Src2[1] + 8) >> 4;    int16_t c = (3*Src1[0]+  1*Src1[1]+ 9*Src2[0] + 3*Src2[1] + 8) >> 4;
91    int16_t d = (1*Src1[0]+  3*Src1[1]+ 3*Src2[0] + 9*Src2[1] + 8) >> 4;    int16_t d = (1*Src1[0]+  3*Src1[1]+ 3*Src2[0] + 9*Src2[1] + 8) >> 4;
92    Dst1[0] = CLIP(a);    Dst1[0] = CLIP(a, 0, 255);
93    Dst1[1] = CLIP(b);    Dst1[1] = CLIP(b, 0, 255);
94    Dst2[0] = CLIP(c);    Dst2[0] = CLIP(c, 0, 255);
95    Dst2[1] = CLIP(d);    Dst2[1] = CLIP(d, 0, 255);
96  }  }
97    
98  void xvid_Copy_Upsampled_8x8_16To8_C(uint8_t *Dst, const int16_t *Src, const int BpS)  void xvid_Copy_Upsampled_8x8_16To8_C(uint8_t *Dst, const int16_t *Src, const int BpS)
99  {  {
100    int x, y;    int x, y;
101    
102    Dst[0] = CLIP(Src[0]);    Dst[0] = CLIP(Src[0], 0, 255);
103    for(x=0; x<7; ++x) Filter_31(Dst+2*x+1, Dst+2*x+2, Src+x, Src+x+1);    for(x=0; x<7; ++x) Filter_31(Dst+2*x+1, Dst+2*x+2, Src+x, Src+x+1);
104    Dst[15] = CLIP(Src[7]);    Dst[15] = CLIP(Src[7], 0, 255);
105    Dst += BpS;    Dst += BpS;
106    for(y=0; y<7; ++y) {    for(y=0; y<7; ++y) {
107      uint8_t *const Dst2 = Dst + BpS;      uint8_t *const Dst2 = Dst + BpS;
# Line 112  Line 112 
112      Src += 8;      Src += 8;
113      Dst += 2*BpS;      Dst += 2*BpS;
114    }    }
115    Dst[0] = CLIP(Src[0]);    Dst[0] = CLIP(Src[0], 0, 255);
116    for(x=0; x<7; ++x) Filter_31(Dst+2*x+1, Dst+2*x+2, Src+x, Src+x+1);    for(x=0; x<7; ++x) Filter_31(Dst+2*x+1, Dst+2*x+2, Src+x, Src+x+1);
117    Dst[15] = CLIP(Src[7]);    Dst[15] = CLIP(Src[7], 0, 255);
118  }  }
119    
120  static __inline void Filter_Add_31(uint8_t *Dst1, uint8_t *Dst2,  static __inline void Filter_Add_31(uint8_t *Dst1, uint8_t *Dst2,
# Line 161  Line 161 
161    for(x=0; x<7; ++x) Filter_Add_31(Dst+2*x+1, Dst+2*x+2, Src+x, Src+x+1);    for(x=0; x<7; ++x) Filter_Add_31(Dst+2*x+1, Dst+2*x+2, Src+x, Src+x+1);
162    ADD(Dst[15], Src[7]);    ADD(Dst[15], Src[7]);
163  }  }
 #undef CLIP  
164  #undef ADD  #undef ADD
165    
166  //////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////

Legend:
Removed from v.759  
changed lines
  Added in v.760

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