11b362b15af34006e6a11974088a46d42b903418eJohann/* 21b362b15af34006e6a11974088a46d42b903418eJohann * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 31b362b15af34006e6a11974088a46d42b903418eJohann * 41b362b15af34006e6a11974088a46d42b903418eJohann * Use of this source code is governed by a BSD-style license 51b362b15af34006e6a11974088a46d42b903418eJohann * that can be found in the LICENSE file in the root of the source 61b362b15af34006e6a11974088a46d42b903418eJohann * tree. An additional intellectual property rights grant can be found 71b362b15af34006e6a11974088a46d42b903418eJohann * in the file PATENTS. All contributing project authors may 81b362b15af34006e6a11974088a46d42b903418eJohann * be found in the AUTHORS file in the root of the source tree. 91b362b15af34006e6a11974088a46d42b903418eJohann */ 101b362b15af34006e6a11974088a46d42b903418eJohann 111b362b15af34006e6a11974088a46d42b903418eJohann 121b362b15af34006e6a11974088a46d42b903418eJohann#include <limits.h> 131b362b15af34006e6a11974088a46d42b903418eJohann#include <stdlib.h> 141b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx_config.h" 151b362b15af34006e6a11974088a46d42b903418eJohann#include "vpx/vpx_integer.h" 161b362b15af34006e6a11974088a46d42b903418eJohann 171b362b15af34006e6a11974088a46d42b903418eJohannstatic unsigned int sad_mx_n_c(const unsigned char *src_ptr, int src_stride, 181b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 191b362b15af34006e6a11974088a46d42b903418eJohann unsigned int max_sad, int m, int n) 201b362b15af34006e6a11974088a46d42b903418eJohann{ 211b362b15af34006e6a11974088a46d42b903418eJohann int r, c; 221b362b15af34006e6a11974088a46d42b903418eJohann unsigned int sad = 0; 231b362b15af34006e6a11974088a46d42b903418eJohann 241b362b15af34006e6a11974088a46d42b903418eJohann for (r = 0; r < n; r++) 251b362b15af34006e6a11974088a46d42b903418eJohann { 261b362b15af34006e6a11974088a46d42b903418eJohann for (c = 0; c < m; c++) 271b362b15af34006e6a11974088a46d42b903418eJohann { 281b362b15af34006e6a11974088a46d42b903418eJohann sad += abs(src_ptr[c] - ref_ptr[c]); 291b362b15af34006e6a11974088a46d42b903418eJohann } 301b362b15af34006e6a11974088a46d42b903418eJohann 311b362b15af34006e6a11974088a46d42b903418eJohann if (sad > max_sad) 321b362b15af34006e6a11974088a46d42b903418eJohann break; 331b362b15af34006e6a11974088a46d42b903418eJohann 341b362b15af34006e6a11974088a46d42b903418eJohann src_ptr += src_stride; 351b362b15af34006e6a11974088a46d42b903418eJohann ref_ptr += ref_stride; 361b362b15af34006e6a11974088a46d42b903418eJohann } 371b362b15af34006e6a11974088a46d42b903418eJohann 381b362b15af34006e6a11974088a46d42b903418eJohann return sad; 391b362b15af34006e6a11974088a46d42b903418eJohann} 401b362b15af34006e6a11974088a46d42b903418eJohann 411b362b15af34006e6a11974088a46d42b903418eJohann/* max_sad is provided as an optional optimization point. Alternative 421b362b15af34006e6a11974088a46d42b903418eJohann * implementations of these functions are not required to check it. 431b362b15af34006e6a11974088a46d42b903418eJohann */ 441b362b15af34006e6a11974088a46d42b903418eJohann 451b362b15af34006e6a11974088a46d42b903418eJohannunsigned int vp8_sad16x16_c(const unsigned char *src_ptr, int src_stride, 461b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 471b362b15af34006e6a11974088a46d42b903418eJohann unsigned int max_sad) 481b362b15af34006e6a11974088a46d42b903418eJohann{ 491b362b15af34006e6a11974088a46d42b903418eJohann return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 16, 16); 501b362b15af34006e6a11974088a46d42b903418eJohann} 511b362b15af34006e6a11974088a46d42b903418eJohann 521b362b15af34006e6a11974088a46d42b903418eJohannunsigned int vp8_sad8x8_c(const unsigned char *src_ptr, int src_stride, 531b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 541b362b15af34006e6a11974088a46d42b903418eJohann unsigned int max_sad) 551b362b15af34006e6a11974088a46d42b903418eJohann{ 561b362b15af34006e6a11974088a46d42b903418eJohann return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 8, 8); 571b362b15af34006e6a11974088a46d42b903418eJohann} 581b362b15af34006e6a11974088a46d42b903418eJohann 591b362b15af34006e6a11974088a46d42b903418eJohannunsigned int vp8_sad16x8_c(const unsigned char *src_ptr, int src_stride, 601b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 611b362b15af34006e6a11974088a46d42b903418eJohann unsigned int max_sad) 621b362b15af34006e6a11974088a46d42b903418eJohann{ 631b362b15af34006e6a11974088a46d42b903418eJohann return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 16, 8); 641b362b15af34006e6a11974088a46d42b903418eJohann 651b362b15af34006e6a11974088a46d42b903418eJohann} 661b362b15af34006e6a11974088a46d42b903418eJohann 671b362b15af34006e6a11974088a46d42b903418eJohannunsigned int vp8_sad8x16_c(const unsigned char *src_ptr, int src_stride, 681b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 691b362b15af34006e6a11974088a46d42b903418eJohann unsigned int max_sad) 701b362b15af34006e6a11974088a46d42b903418eJohann{ 711b362b15af34006e6a11974088a46d42b903418eJohann return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 8, 16); 721b362b15af34006e6a11974088a46d42b903418eJohann} 731b362b15af34006e6a11974088a46d42b903418eJohann 741b362b15af34006e6a11974088a46d42b903418eJohannunsigned int vp8_sad4x4_c(const unsigned char *src_ptr, int src_stride, 751b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 761b362b15af34006e6a11974088a46d42b903418eJohann unsigned int max_sad) 771b362b15af34006e6a11974088a46d42b903418eJohann{ 781b362b15af34006e6a11974088a46d42b903418eJohann return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 4, 4); 791b362b15af34006e6a11974088a46d42b903418eJohann} 801b362b15af34006e6a11974088a46d42b903418eJohann 811b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad16x16x3_c(const unsigned char *src_ptr, int src_stride, 821b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 831b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 841b362b15af34006e6a11974088a46d42b903418eJohann{ 851b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 861b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 871b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 881b362b15af34006e6a11974088a46d42b903418eJohann} 891b362b15af34006e6a11974088a46d42b903418eJohann 901b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad16x16x8_c(const unsigned char *src_ptr, int src_stride, 911b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 921b362b15af34006e6a11974088a46d42b903418eJohann unsigned short *sad_array) 931b362b15af34006e6a11974088a46d42b903418eJohann{ 941b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 951b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 961b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 971b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX); 981b362b15af34006e6a11974088a46d42b903418eJohann sad_array[4] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX); 991b362b15af34006e6a11974088a46d42b903418eJohann sad_array[5] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX); 1001b362b15af34006e6a11974088a46d42b903418eJohann sad_array[6] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX); 1011b362b15af34006e6a11974088a46d42b903418eJohann sad_array[7] = (unsigned short)vp8_sad16x16_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX); 1021b362b15af34006e6a11974088a46d42b903418eJohann} 1031b362b15af34006e6a11974088a46d42b903418eJohann 1041b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad16x8x3_c(const unsigned char *src_ptr, int src_stride, 1051b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1061b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 1071b362b15af34006e6a11974088a46d42b903418eJohann{ 1081b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1091b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1101b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1111b362b15af34006e6a11974088a46d42b903418eJohann} 1121b362b15af34006e6a11974088a46d42b903418eJohann 1131b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad16x8x8_c(const unsigned char *src_ptr, int src_stride, 1141b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1151b362b15af34006e6a11974088a46d42b903418eJohann unsigned short *sad_array) 1161b362b15af34006e6a11974088a46d42b903418eJohann{ 1171b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1181b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1191b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1201b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX); 1211b362b15af34006e6a11974088a46d42b903418eJohann sad_array[4] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX); 1221b362b15af34006e6a11974088a46d42b903418eJohann sad_array[5] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX); 1231b362b15af34006e6a11974088a46d42b903418eJohann sad_array[6] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX); 1241b362b15af34006e6a11974088a46d42b903418eJohann sad_array[7] = (unsigned short)vp8_sad16x8_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX); 1251b362b15af34006e6a11974088a46d42b903418eJohann} 1261b362b15af34006e6a11974088a46d42b903418eJohann 1271b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad8x8x3_c(const unsigned char *src_ptr, int src_stride, 1281b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1291b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 1301b362b15af34006e6a11974088a46d42b903418eJohann{ 1311b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1321b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1331b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1341b362b15af34006e6a11974088a46d42b903418eJohann} 1351b362b15af34006e6a11974088a46d42b903418eJohann 1361b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad8x8x8_c(const unsigned char *src_ptr, int src_stride, 1371b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1381b362b15af34006e6a11974088a46d42b903418eJohann unsigned short *sad_array) 1391b362b15af34006e6a11974088a46d42b903418eJohann{ 1401b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1411b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1421b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1431b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX); 1441b362b15af34006e6a11974088a46d42b903418eJohann sad_array[4] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX); 1451b362b15af34006e6a11974088a46d42b903418eJohann sad_array[5] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX); 1461b362b15af34006e6a11974088a46d42b903418eJohann sad_array[6] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX); 1471b362b15af34006e6a11974088a46d42b903418eJohann sad_array[7] = (unsigned short)vp8_sad8x8_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX); 1481b362b15af34006e6a11974088a46d42b903418eJohann} 1491b362b15af34006e6a11974088a46d42b903418eJohann 1501b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad8x16x3_c(const unsigned char *src_ptr, int src_stride, 1511b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1521b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 1531b362b15af34006e6a11974088a46d42b903418eJohann{ 1541b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1551b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1561b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1571b362b15af34006e6a11974088a46d42b903418eJohann} 1581b362b15af34006e6a11974088a46d42b903418eJohann 1591b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad8x16x8_c(const unsigned char *src_ptr, int src_stride, 1601b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1611b362b15af34006e6a11974088a46d42b903418eJohann unsigned short *sad_array) 1621b362b15af34006e6a11974088a46d42b903418eJohann{ 1631b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1641b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1651b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1661b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX); 1671b362b15af34006e6a11974088a46d42b903418eJohann sad_array[4] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX); 1681b362b15af34006e6a11974088a46d42b903418eJohann sad_array[5] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX); 1691b362b15af34006e6a11974088a46d42b903418eJohann sad_array[6] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX); 1701b362b15af34006e6a11974088a46d42b903418eJohann sad_array[7] = (unsigned short)vp8_sad8x16_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX); 1711b362b15af34006e6a11974088a46d42b903418eJohann} 1721b362b15af34006e6a11974088a46d42b903418eJohann 1731b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad4x4x3_c(const unsigned char *src_ptr, int src_stride, 1741b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1751b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 1761b362b15af34006e6a11974088a46d42b903418eJohann{ 1771b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1781b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1791b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1801b362b15af34006e6a11974088a46d42b903418eJohann} 1811b362b15af34006e6a11974088a46d42b903418eJohann 1821b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad4x4x8_c(const unsigned char *src_ptr, int src_stride, 1831b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char *ref_ptr, int ref_stride, 1841b362b15af34006e6a11974088a46d42b903418eJohann unsigned short *sad_array) 1851b362b15af34006e6a11974088a46d42b903418eJohann{ 1861b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 0, ref_stride, UINT_MAX); 1871b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 1, ref_stride, UINT_MAX); 1881b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 2, ref_stride, UINT_MAX); 1891b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 3, ref_stride, UINT_MAX); 1901b362b15af34006e6a11974088a46d42b903418eJohann sad_array[4] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 4, ref_stride, UINT_MAX); 1911b362b15af34006e6a11974088a46d42b903418eJohann sad_array[5] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 5, ref_stride, UINT_MAX); 1921b362b15af34006e6a11974088a46d42b903418eJohann sad_array[6] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 6, ref_stride, UINT_MAX); 1931b362b15af34006e6a11974088a46d42b903418eJohann sad_array[7] = (unsigned short)vp8_sad4x4_c(src_ptr, src_stride, ref_ptr + 7, ref_stride, UINT_MAX); 1941b362b15af34006e6a11974088a46d42b903418eJohann} 1951b362b15af34006e6a11974088a46d42b903418eJohann 1961b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad16x16x4d_c(const unsigned char *src_ptr, int src_stride, 1971b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char * const ref_ptr[], int ref_stride, 1981b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 1991b362b15af34006e6a11974088a46d42b903418eJohann{ 2001b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX); 2011b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX); 2021b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX); 2031b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = vp8_sad16x16_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX); 2041b362b15af34006e6a11974088a46d42b903418eJohann} 2051b362b15af34006e6a11974088a46d42b903418eJohann 2061b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad16x8x4d_c(const unsigned char *src_ptr, int src_stride, 2071b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char * const ref_ptr[], int ref_stride, 2081b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 2091b362b15af34006e6a11974088a46d42b903418eJohann{ 2101b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX); 2111b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX); 2121b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX); 2131b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = vp8_sad16x8_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX); 2141b362b15af34006e6a11974088a46d42b903418eJohann} 2151b362b15af34006e6a11974088a46d42b903418eJohann 2161b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad8x8x4d_c(const unsigned char *src_ptr, int src_stride, 2171b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char * const ref_ptr[], int ref_stride, 2181b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 2191b362b15af34006e6a11974088a46d42b903418eJohann{ 2201b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX); 2211b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX); 2221b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX); 2231b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = vp8_sad8x8_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX); 2241b362b15af34006e6a11974088a46d42b903418eJohann} 2251b362b15af34006e6a11974088a46d42b903418eJohann 2261b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad8x16x4d_c(const unsigned char *src_ptr, int src_stride, 2271b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char * const ref_ptr[], int ref_stride, 2281b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 2291b362b15af34006e6a11974088a46d42b903418eJohann{ 2301b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX); 2311b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX); 2321b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX); 2331b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = vp8_sad8x16_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX); 2341b362b15af34006e6a11974088a46d42b903418eJohann} 2351b362b15af34006e6a11974088a46d42b903418eJohann 2361b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_sad4x4x4d_c(const unsigned char *src_ptr, int src_stride, 2371b362b15af34006e6a11974088a46d42b903418eJohann const unsigned char * const ref_ptr[], int ref_stride, 2381b362b15af34006e6a11974088a46d42b903418eJohann unsigned int *sad_array) 2391b362b15af34006e6a11974088a46d42b903418eJohann{ 2401b362b15af34006e6a11974088a46d42b903418eJohann sad_array[0] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[0], ref_stride, UINT_MAX); 2411b362b15af34006e6a11974088a46d42b903418eJohann sad_array[1] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[1], ref_stride, UINT_MAX); 2421b362b15af34006e6a11974088a46d42b903418eJohann sad_array[2] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[2], ref_stride, UINT_MAX); 2431b362b15af34006e6a11974088a46d42b903418eJohann sad_array[3] = vp8_sad4x4_c(src_ptr, src_stride, ref_ptr[3], ref_stride, UINT_MAX); 2441b362b15af34006e6a11974088a46d42b903418eJohann} 2451b362b15af34006e6a11974088a46d42b903418eJohann 2461b362b15af34006e6a11974088a46d42b903418eJohann/* Copy 2 macroblocks to a buffer */ 2471b362b15af34006e6a11974088a46d42b903418eJohannvoid vp8_copy32xn_c(unsigned char *src_ptr, int src_stride, 2481b362b15af34006e6a11974088a46d42b903418eJohann unsigned char *dst_ptr, int dst_stride, 2491b362b15af34006e6a11974088a46d42b903418eJohann int height) 2501b362b15af34006e6a11974088a46d42b903418eJohann{ 2511b362b15af34006e6a11974088a46d42b903418eJohann int r; 2521b362b15af34006e6a11974088a46d42b903418eJohann 2531b362b15af34006e6a11974088a46d42b903418eJohann for (r = 0; r < height; r++) 2541b362b15af34006e6a11974088a46d42b903418eJohann { 2551b362b15af34006e6a11974088a46d42b903418eJohann#if !(CONFIG_FAST_UNALIGNED) 2561b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[0] = src_ptr[0]; 2571b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[1] = src_ptr[1]; 2581b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[2] = src_ptr[2]; 2591b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[3] = src_ptr[3]; 2601b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[4] = src_ptr[4]; 2611b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[5] = src_ptr[5]; 2621b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[6] = src_ptr[6]; 2631b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[7] = src_ptr[7]; 2641b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[8] = src_ptr[8]; 2651b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[9] = src_ptr[9]; 2661b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[10] = src_ptr[10]; 2671b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[11] = src_ptr[11]; 2681b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[12] = src_ptr[12]; 2691b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[13] = src_ptr[13]; 2701b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[14] = src_ptr[14]; 2711b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[15] = src_ptr[15]; 2721b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[16] = src_ptr[16]; 2731b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[17] = src_ptr[17]; 2741b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[18] = src_ptr[18]; 2751b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[19] = src_ptr[19]; 2761b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[20] = src_ptr[20]; 2771b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[21] = src_ptr[21]; 2781b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[22] = src_ptr[22]; 2791b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[23] = src_ptr[23]; 2801b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[24] = src_ptr[24]; 2811b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[25] = src_ptr[25]; 2821b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[26] = src_ptr[26]; 2831b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[27] = src_ptr[27]; 2841b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[28] = src_ptr[28]; 2851b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[29] = src_ptr[29]; 2861b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[30] = src_ptr[30]; 2871b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr[31] = src_ptr[31]; 2881b362b15af34006e6a11974088a46d42b903418eJohann#else 2891b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[0] = ((uint32_t *)src_ptr)[0] ; 2901b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[1] = ((uint32_t *)src_ptr)[1] ; 2911b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[2] = ((uint32_t *)src_ptr)[2] ; 2921b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[3] = ((uint32_t *)src_ptr)[3] ; 2931b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[4] = ((uint32_t *)src_ptr)[4] ; 2941b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[5] = ((uint32_t *)src_ptr)[5] ; 2951b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[6] = ((uint32_t *)src_ptr)[6] ; 2961b362b15af34006e6a11974088a46d42b903418eJohann ((uint32_t *)dst_ptr)[7] = ((uint32_t *)src_ptr)[7] ; 2971b362b15af34006e6a11974088a46d42b903418eJohann#endif 2981b362b15af34006e6a11974088a46d42b903418eJohann src_ptr += src_stride; 2991b362b15af34006e6a11974088a46d42b903418eJohann dst_ptr += dst_stride; 3001b362b15af34006e6a11974088a46d42b903418eJohann 3011b362b15af34006e6a11974088a46d42b903418eJohann } 3021b362b15af34006e6a11974088a46d42b903418eJohann} 303