// -------------------------------------------------------------- // // // More Efficient SAD Calculation // // -------------------------------------------------------------- // int sad(unsigned char* blk1, unsigned char* blk2, int distlim) { int j, k, v; int s = 0; for (j=0; j<16; j++) { if( (v=blk1[j*16+0] -blk2[j*16+0]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+1] -blk2[j*16+1]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+2] -blk2[j*16+2]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+3] -blk2[j*16+3]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+4] -blk2[j*16+4]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+5] -blk2[j*16+6]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+6] -blk2[j*16+6]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+7] -blk2[j*16+7]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+8] -blk2[j*16+8]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+9] -blk2[j*16+9]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+10]-blk2[j*16+10]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+11]-blk2[j*16+11]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+12]-blk2[j*16+12]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+13]-blk2[j*16+13]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+14]-blk2[j*16+14]) < 0 ) { v = -v; s+= v } if( (v=blk1[j*16+15]-blk2[j*16+15]) < 0 ) { v = -v; s+= v } if (s >= distlim) break; } return s; }