[cvs] / xvidcore / src / motion / sad.c Repository:
ViewVC logotype

Diff of /xvidcore/src/motion/sad.c

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

revision 1.13.2.6, Wed Sep 10 22:19:00 2003 UTC revision 1.14, Fri Mar 28 08:43:28 2003 UTC
# Line 1  Line 1 
1  /*****************************************************************************  /**************************************************************************
2   *   *
3   *  XVID MPEG-4 VIDEO CODEC   *  XVID MPEG-4 VIDEO CODEC
4   *  - Sum Of Absolute Difference related code -   *      sum of absolute difference
5   *   *
6   *  Copyright(C) 2001-2003 Peter Ross <pross@xvid.org>   *      This program is an implementation of a part of one or more MPEG-4
7     *      Video tools as specified in ISO/IEC 14496-2 standard.  Those intending
8     *      to use this software module in hardware or software products are
9     *      advised that its use may infringe existing patents or copyrights, and
10     *      any such use would be at such party's own risk.  The original
11     *      developer of this software module and his/her company, and subsequent
12     *      editors and their companies, will have no liability for use of this
13     *      software or modifications or derivatives thereof.
14   *   *
15   *  This program is free software ; you can redistribute it and/or modify   *  This program is free software ; you can redistribute it and/or modify
16   *  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 17  Line 24 
24   *   *
25   *  You should have received a copy of the GNU General Public License   *  You should have received a copy of the GNU General Public License
26   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
27   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28   *   *
29   * $Id$   *************************************************************************/
30    
31    /**************************************************************************
32     *
33     *      History:
34   *   *
35   ****************************************************************************/   *      14.02.2002      added sad16bi_c()
36     *      10.11.2001      initial version; (c)2001 peter ross <pross@cs.rmit.edu.au>
37     *
38     *************************************************************************/
39    
40    
41  #include "../portab.h"  #include "../portab.h"
42  #include "../global.h"  #include "../global.h"
43  #include "sad.h"  #include "sad.h"
44    
 #include <stdlib.h>  
   
45  sad16FuncPtr sad16;  sad16FuncPtr sad16;
46  sad8FuncPtr sad8;  sad8FuncPtr sad8;
47  sad16biFuncPtr sad16bi;  sad16biFuncPtr sad16bi;
48  sad8biFuncPtr sad8bi;           /* not really sad16, but no difference in prototype */  sad8biFuncPtr sad8bi;           // not really sad16, but no difference in prototype
49  dev16FuncPtr dev16;  dev16FuncPtr dev16;
50  sad16vFuncPtr sad16v;  sad16vFuncPtr sad16v;
51    
# Line 52  Line 65 
65          uint8_t const *ptr_ref = ref;          uint8_t const *ptr_ref = ref;
66    
67          for (j = 0; j < 16; j++) {          for (j = 0; j < 16; j++) {
68                          sad += abs(ptr_cur[0] - ptr_ref[0]);                          sad += ABS(ptr_cur[0] - ptr_ref[0]);
69                          sad += abs(ptr_cur[1] - ptr_ref[1]);                          sad += ABS(ptr_cur[1] - ptr_ref[1]);
70                          sad += abs(ptr_cur[2] - ptr_ref[2]);                          sad += ABS(ptr_cur[2] - ptr_ref[2]);
71                          sad += abs(ptr_cur[3] - ptr_ref[3]);                          sad += ABS(ptr_cur[3] - ptr_ref[3]);
72                          sad += abs(ptr_cur[4] - ptr_ref[4]);                          sad += ABS(ptr_cur[4] - ptr_ref[4]);
73                          sad += abs(ptr_cur[5] - ptr_ref[5]);                          sad += ABS(ptr_cur[5] - ptr_ref[5]);
74                          sad += abs(ptr_cur[6] - ptr_ref[6]);                          sad += ABS(ptr_cur[6] - ptr_ref[6]);
75                          sad += abs(ptr_cur[7] - ptr_ref[7]);                          sad += ABS(ptr_cur[7] - ptr_ref[7]);
76                          sad += abs(ptr_cur[8] - ptr_ref[8]);                          sad += ABS(ptr_cur[8] - ptr_ref[8]);
77                          sad += abs(ptr_cur[9] - ptr_ref[9]);                          sad += ABS(ptr_cur[9] - ptr_ref[9]);
78                          sad += abs(ptr_cur[10] - ptr_ref[10]);                          sad += ABS(ptr_cur[10] - ptr_ref[10]);
79                          sad += abs(ptr_cur[11] - ptr_ref[11]);                          sad += ABS(ptr_cur[11] - ptr_ref[11]);
80                          sad += abs(ptr_cur[12] - ptr_ref[12]);                          sad += ABS(ptr_cur[12] - ptr_ref[12]);
81                          sad += abs(ptr_cur[13] - ptr_ref[13]);                          sad += ABS(ptr_cur[13] - ptr_ref[13]);
82                          sad += abs(ptr_cur[14] - ptr_ref[14]);                          sad += ABS(ptr_cur[14] - ptr_ref[14]);
83                          sad += abs(ptr_cur[15] - ptr_ref[15]);                          sad += ABS(ptr_cur[15] - ptr_ref[15]);
84    
85                          if (sad >= best_sad)                          if (sad >= best_sad)
86                                  return sad;                                  return sad;
# Line 98  Line 111 
111    
112                  for (i = 0; i < 16; i++) {                  for (i = 0; i < 16; i++) {
113                          int pixel = (ptr_ref1[i] + ptr_ref2[i] + 1) / 2;                          int pixel = (ptr_ref1[i] + ptr_ref2[i] + 1) / 2;
114                          sad += abs(ptr_cur[i] - pixel);                          sad += ABS(ptr_cur[i] - pixel);
115                  }                  }
116    
117                  ptr_cur += stride;                  ptr_cur += stride;
# Line 128  Line 141 
141    
142                  for (i = 0; i < 8; i++) {                  for (i = 0; i < 8; i++) {
143                          int pixel = (ptr_ref1[i] + ptr_ref2[i] + 1) / 2;                          int pixel = (ptr_ref1[i] + ptr_ref2[i] + 1) / 2;
144                          sad += abs(ptr_cur[i] - pixel);                          sad += ABS(ptr_cur[i] - pixel);
145                  }                  }
146    
147                  ptr_cur += stride;                  ptr_cur += stride;
# Line 155  Line 168 
168    
169          for (j = 0; j < 8; j++) {          for (j = 0; j < 8; j++) {
170    
171                  sad += abs(ptr_cur[0] - ptr_ref[0]);                  sad += ABS(ptr_cur[0] - ptr_ref[0]);
172                  sad += abs(ptr_cur[1] - ptr_ref[1]);                  sad += ABS(ptr_cur[1] - ptr_ref[1]);
173                  sad += abs(ptr_cur[2] - ptr_ref[2]);                  sad += ABS(ptr_cur[2] - ptr_ref[2]);
174                  sad += abs(ptr_cur[3] - ptr_ref[3]);                  sad += ABS(ptr_cur[3] - ptr_ref[3]);
175                  sad += abs(ptr_cur[4] - ptr_ref[4]);                  sad += ABS(ptr_cur[4] - ptr_ref[4]);
176                  sad += abs(ptr_cur[5] - ptr_ref[5]);                  sad += ABS(ptr_cur[5] - ptr_ref[5]);
177                  sad += abs(ptr_cur[6] - ptr_ref[6]);                  sad += ABS(ptr_cur[6] - ptr_ref[6]);
178                  sad += abs(ptr_cur[7] - ptr_ref[7]);                  sad += ABS(ptr_cur[7] - ptr_ref[7]);
179    
180                  ptr_cur += stride;                  ptr_cur += stride;
181                  ptr_ref += stride;                  ptr_ref += stride;
# Line 200  Line 213 
213          for (j = 0; j < 16; j++) {          for (j = 0; j < 16; j++) {
214    
215                  for (i = 0; i < 16; i++)                  for (i = 0; i < 16; i++)
216                          dev += abs(*(ptr_cur + i) - (int32_t) mean);                          dev += ABS(*(ptr_cur + i) - (int32_t) mean);
217    
218                  ptr_cur += stride;                  ptr_cur += stride;
219    
# Line 228  Line 241 
241                             int32_t *sad)                             int32_t *sad)
242  {  {
243          sad[0] = sad16(cur, ref, stride, 256*4096);          sad[0] = sad16(cur, ref, stride, 256*4096);
244          sad[1] = sad16(cur + 16, ref + 16, stride, 256*4096);          sad[1] = sad16(cur + 8, ref + 8, stride, 256*4096);
245          sad[2] = sad16(cur + 16*stride, ref + 16*stride, stride, 256*4096);          sad[2] = sad16(cur + 8*stride, ref + 8*stride, stride, 256*4096);
246          sad[3] = sad16(cur + 16*stride + 16, ref + 16*stride + 16, stride, 256*4096);          sad[3] = sad16(cur + 8*stride + 8, ref + 8*stride + 8, stride, 256*4096);
247    
248          return sad[0]+sad[1]+sad[2]+sad[3];          return sad[0]+sad[1]+sad[2]+sad[3];
249  }  }
# Line 268  Line 281 
281    
282                  for (i = 0; i < 16; i++) {                  for (i = 0; i < 16; i++) {
283    
284                          sad += abs(*(ptr_cur + i) - *(ptr_ref + i) - mean);                          sad += ABS(*(ptr_cur + i) - *(ptr_ref + i) - mean);
285                          if (sad >= best_sad) {                          if (sad >= best_sad) {
286                                  return MRSAD16_CORRFACTOR * sad;                                  return MRSAD16_CORRFACTOR * sad;
287                          }                          }
# Line 276  Line 289 
289          }          }
290    
291          return MRSAD16_CORRFACTOR * sad;          return MRSAD16_CORRFACTOR * sad;
292    
293  }  }
294    
295    

Legend:
Removed from v.1.13.2.6  
changed lines
  Added in v.1.14

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