29                                     const uint8_t *src2, ptrdiff_t stride2,
 
   34     for (y = 0; y < h; y++) {
 
   35         for (x = 0; x < w; x++)
 
   36             sum += abs(src1[x] - src2[x]);
 
   43 #define DECLARE_BLOCK_FUNCTIONS(size)                                               \ 
   44 static int block_sad_##size##x##size##_c(const uint8_t *src1, ptrdiff_t stride1,    \ 
   45                                          const uint8_t *src2, ptrdiff_t stride2)    \ 
   47     return sad_wxh(src1, stride1, src2, stride2, size, size);                       \ 
   50 DECLARE_BLOCK_FUNCTIONS(2)
 
   51 DECLARE_BLOCK_FUNCTIONS(4)
 
   52 DECLARE_BLOCK_FUNCTIONS(8)
 
   53 DECLARE_BLOCK_FUNCTIONS(16)
 
   66 #if !CONFIG_PIXELUTILS 
   68            "but libavutil is not compiled with it\n");
 
   73     memcpy(sad, sad_c, 
sizeof(sad));
 
   85     return sad[w_bits - 1];
 
   95 static int run_single_test(
const char *
test,
 
   97                            const uint8_t *block2, ptrdiff_t stride2,
 
  105     case 0: block1++; block2++; 
break;
 
  106     case 1:           block2++; 
break;
 
  110     out = f_out(block1, stride1, block2, stride2);
 
  111     ref = f_ref(block1, stride1, block2, stride2);
 
  112     printf(
"[%s] [%c%c] SAD [%s] %dx%d=%d ref=%d\n",
 
  113            out == ref ? 
"OK" : 
"FAIL",
 
  114            align ? 
'A' : 
'U', align == 2 ? 
'A' : 
'U',
 
  115            test, 1<<n, 1<<n, out, ref);
 
  119 static int run_test(
const char *test,
 
  124     for (a = 0; a < 3; a++) {
 
  129         case 0: block1++; block2++; 
break;
 
  130         case 1:           block2++; 
break;
 
  134             int r = run_single_test(test, b1, 
W1, b2, 
W2, a, i);
 
  149     if (!buf1 || !buf2) {
 
  150         fprintf(stderr, 
"malloc failure\n");
 
  157 #define RANDOM_INIT(buf, size) do {             \ 
  159     for (k = 0; k < size; k++) {                \ 
  160         state = state * 1664525 + 1013904223;   \ 
  161         buf[k] = state>>24;                     \ 
  166     RANDOM_INIT(buf1, 
W1*H1);
 
  167     RANDOM_INIT(buf2, 
W2*H2);
 
  168     ret = run_test(
"random", buf1, buf2);
 
  173     memset(buf1, 0xff, 
W1*H1);
 
  174     memset(buf2, 0x00, 
W2*H2);
 
  175     ret = run_test(
"max", buf1, buf2);
 
  180     memset(buf1, 0x90, 
W1*H1);
 
  181     memset(buf2, 0x90, 
W2*H2);
 
  182     ret = run_test(
"min", buf1, buf2);
 
  187     for (i = 1; i <= 4; i++) {
 
  188         for (align = 0; align < 3; align++) {
 
  194             size1 = size2 = 1 << (i << 1);
 
  197             case 0: size1++; size2++; 
break;
 
  198             case 1:          size2++; 
break;
 
  204             if (!buf1 || !buf2) {
 
  205                 fprintf(stderr, 
"malloc failure\n");
 
  209             RANDOM_INIT(buf1, size1);
 
  210             RANDOM_INIT(buf2, size2);
 
  211             ret = run_single_test(
"small", buf1, 1<<i, buf2, 1<<i, align, i);