--- sad.c 2003/09/10 22:19:00 1.13.2.6 +++ sad.c 2004/03/22 22:36:24 1.15 @@ -19,7 +19,7 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: sad.c,v 1.13.2.6 2003/09/10 22:19:00 edgomez Exp $ + * $Id: sad.c,v 1.15 2004/03/22 22:36:24 edgomez Exp $ * ****************************************************************************/ @@ -35,6 +35,7 @@ sad8biFuncPtr sad8bi; /* not really sad16, but no difference in prototype */ dev16FuncPtr dev16; sad16vFuncPtr sad16v; +sse8Func_16bitPtr sse8_16bit; sadInitFuncPtr sadInit; @@ -69,7 +70,7 @@ sad += abs(ptr_cur[14] - ptr_ref[14]); sad += abs(ptr_cur[15] - ptr_ref[15]); - if (sad >= best_sad) + if (sad >= best_sad) return sad; ptr_cur += stride; @@ -163,7 +164,7 @@ sad += abs(ptr_cur[5] - ptr_ref[5]); sad += abs(ptr_cur[6] - ptr_ref[6]); sad += abs(ptr_cur[7] - ptr_ref[7]); - + ptr_cur += stride; ptr_ref += stride; @@ -209,29 +210,29 @@ return dev; } -uint32_t sad16v_c(const uint8_t * const cur, - const uint8_t * const ref, - const uint32_t stride, +uint32_t sad16v_c(const uint8_t * const cur, + const uint8_t * const ref, + const uint32_t stride, int32_t *sad) { sad[0] = sad8(cur, ref, stride); sad[1] = sad8(cur + 8, ref + 8, stride); sad[2] = sad8(cur + 8*stride, ref + 8*stride, stride); sad[3] = sad8(cur + 8*stride + 8, ref + 8*stride + 8, stride); - + return sad[0]+sad[1]+sad[2]+sad[3]; } -uint32_t sad32v_c(const uint8_t * const cur, - const uint8_t * const ref, - const uint32_t stride, +uint32_t sad32v_c(const uint8_t * const cur, + const uint8_t * const ref, + const uint32_t stride, int32_t *sad) { sad[0] = sad16(cur, ref, stride, 256*4096); sad[1] = sad16(cur + 16, ref + 16, stride, 256*4096); sad[2] = sad16(cur + 16*stride, ref + 16*stride, stride, 256*4096); sad[3] = sad16(cur + 16*stride + 16, ref + 16*stride + 16, stride, 256*4096); - + return sad[0]+sad[1]+sad[2]+sad[3]; } @@ -277,3 +278,28 @@ return MRSAD16_CORRFACTOR * sad; } + +uint32_t +sse8_16bit_c(const int16_t * b1, + const int16_t * b2, + const uint32_t stride) +{ + int i; + int sse = 0; + + for (i=0; i<8; i++) { + sse += (b1[0] - b2[0])*(b1[0] - b2[0]); + sse += (b1[1] - b2[1])*(b1[1] - b2[1]); + sse += (b1[2] - b2[2])*(b1[2] - b2[2]); + sse += (b1[3] - b2[3])*(b1[3] - b2[3]); + sse += (b1[4] - b2[4])*(b1[4] - b2[4]); + sse += (b1[5] - b2[5])*(b1[5] - b2[5]); + sse += (b1[6] - b2[6])*(b1[6] - b2[6]); + sse += (b1[7] - b2[7])*(b1[7] - b2[7]); + + b1 = (const int16_t*)((int8_t*)b1+stride); + b2 = (const int16_t*)((int8_t*)b2+stride); + } + + return(sse); +}