17ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian/* 27ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * Copyright (c) 2015 The WebM project authors. All Rights Reserved. 37ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * 47ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 57ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 67ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 77ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 87ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 97ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian */ 107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include <stdlib.h> 127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "./vpx_config.h" 147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "./vpx_dsp_rtcd.h" 157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx/vpx_integer.h" 177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_ports/mem.h" 187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian/* Sum the difference between every corresponding element of the buffers. */ 207bc9febe8749e98a3812a0dc4380ceae75c29450Johannstatic INLINE unsigned int sad(const uint8_t *a, int a_stride, const uint8_t *b, 217bc9febe8749e98a3812a0dc4380ceae75c29450Johann int b_stride, int width, int height) { 227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int y, x; 237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian unsigned int sad = 0; 247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (y = 0; y < height; y++) { 267bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (x = 0; x < width; x++) sad += abs(a[x] - b[x]); 277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian a += a_stride; 297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian b += b_stride; 307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian return sad; 327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 347bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define sadMxN(m, n) \ 357bc9febe8749e98a3812a0dc4380ceae75c29450Johann unsigned int vpx_sad##m##x##n##_c(const uint8_t *src, int src_stride, \ 367bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *ref, int ref_stride) { \ 377bc9febe8749e98a3812a0dc4380ceae75c29450Johann return sad(src, src_stride, ref, ref_stride, m, n); \ 387bc9febe8749e98a3812a0dc4380ceae75c29450Johann } \ 397bc9febe8749e98a3812a0dc4380ceae75c29450Johann unsigned int vpx_sad##m##x##n##_avg_c(const uint8_t *src, int src_stride, \ 407bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *ref, int ref_stride, \ 417bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *second_pred) { \ 428b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DECLARE_ALIGNED(16, uint8_t, comp_pred[m * n]); \ 437bc9febe8749e98a3812a0dc4380ceae75c29450Johann vpx_comp_avg_pred_c(comp_pred, second_pred, m, n, ref, ref_stride); \ 447bc9febe8749e98a3812a0dc4380ceae75c29450Johann return sad(src, src_stride, comp_pred, m, m, n); \ 457bc9febe8749e98a3812a0dc4380ceae75c29450Johann } 467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// depending on call sites, pass **ref_array to avoid & in subsequent call and 487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// de-dup with 4D below. 497bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define sadMxNxK(m, n, k) \ 507bc9febe8749e98a3812a0dc4380ceae75c29450Johann void vpx_sad##m##x##n##x##k##_c(const uint8_t *src, int src_stride, \ 517bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *ref_array, int ref_stride, \ 527bc9febe8749e98a3812a0dc4380ceae75c29450Johann uint32_t *sad_array) { \ 537bc9febe8749e98a3812a0dc4380ceae75c29450Johann int i; \ 547bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < k; ++i) \ 557bc9febe8749e98a3812a0dc4380ceae75c29450Johann sad_array[i] = \ 567bc9febe8749e98a3812a0dc4380ceae75c29450Johann vpx_sad##m##x##n##_c(src, src_stride, &ref_array[i], ref_stride); \ 577bc9febe8749e98a3812a0dc4380ceae75c29450Johann } 587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// This appears to be equivalent to the above when k == 4 and refs is const 607bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define sadMxNx4D(m, n) \ 617bc9febe8749e98a3812a0dc4380ceae75c29450Johann void vpx_sad##m##x##n##x4d_c(const uint8_t *src, int src_stride, \ 627bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *const ref_array[], \ 637bc9febe8749e98a3812a0dc4380ceae75c29450Johann int ref_stride, uint32_t *sad_array) { \ 647bc9febe8749e98a3812a0dc4380ceae75c29450Johann int i; \ 657bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < 4; ++i) \ 667bc9febe8749e98a3812a0dc4380ceae75c29450Johann sad_array[i] = \ 677bc9febe8749e98a3812a0dc4380ceae75c29450Johann vpx_sad##m##x##n##_c(src, src_stride, ref_array[i], ref_stride); \ 687bc9febe8749e98a3812a0dc4380ceae75c29450Johann } 697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 707bc9febe8749e98a3812a0dc4380ceae75c29450Johann/* clang-format off */ 717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 64x64 727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(64, 64) 737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(64, 64, 3) 747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(64, 64, 8) 757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(64, 64) 767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 64x32 787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(64, 32) 797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(64, 32) 807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 32x64 827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(32, 64) 837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(32, 64) 847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 32x32 867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(32, 32) 877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(32, 32, 3) 887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(32, 32, 8) 897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(32, 32) 907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 32x16 927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(32, 16) 937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(32, 16) 947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 16x32 967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(16, 32) 977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(16, 32) 987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 16x16 1007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(16, 16) 1017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(16, 16, 3) 1027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(16, 16, 8) 1037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(16, 16) 1047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 16x8 1067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(16, 8) 1077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(16, 8, 3) 1087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(16, 8, 8) 1097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(16, 8) 1107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 8x16 1127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(8, 16) 1137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(8, 16, 3) 1147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(8, 16, 8) 1157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(8, 16) 1167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 8x8 1187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(8, 8) 1197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(8, 8, 3) 1207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(8, 8, 8) 1217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(8, 8) 1227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 8x4 1247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(8, 4) 1257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(8, 4, 8) 1267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(8, 4) 1277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 4x8 1297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(4, 8) 1307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(4, 8, 8) 1317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(4, 8) 1327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 4x4 1347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxN(4, 4) 1357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(4, 4, 3) 1367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNxK(4, 4, 8) 1377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramaniansadMxNx4D(4, 4) 1387bc9febe8749e98a3812a0dc4380ceae75c29450Johann/* clang-format on */ 1397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 1417bc9febe8749e98a3812a0dc4380ceae75c29450Johann static INLINE 1427bc9febe8749e98a3812a0dc4380ceae75c29450Johann unsigned int highbd_sad(const uint8_t *a8, int a_stride, const uint8_t *b8, 1437bc9febe8749e98a3812a0dc4380ceae75c29450Johann int b_stride, int width, int height) { 1447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int y, x; 1457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian unsigned int sad = 0; 1467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *a = CONVERT_TO_SHORTPTR(a8); 1477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *b = CONVERT_TO_SHORTPTR(b8); 1487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (y = 0; y < height; y++) { 1497bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (x = 0; x < width; x++) sad += abs(a[x] - b[x]); 1507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian a += a_stride; 1527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian b += b_stride; 1537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian return sad; 1557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE unsigned int highbd_sadb(const uint8_t *a8, int a_stride, 1587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *b, int b_stride, 1597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int width, int height) { 1607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int y, x; 1617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian unsigned int sad = 0; 1627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *a = CONVERT_TO_SHORTPTR(a8); 1637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (y = 0; y < height; y++) { 1647bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (x = 0; x < width; x++) sad += abs(a[x] - b[x]); 1657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian a += a_stride; 1677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian b += b_stride; 1687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian return sad; 1707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1727bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define highbd_sadMxN(m, n) \ 1737bc9febe8749e98a3812a0dc4380ceae75c29450Johann unsigned int vpx_highbd_sad##m##x##n##_c(const uint8_t *src, int src_stride, \ 1747bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *ref, \ 1757bc9febe8749e98a3812a0dc4380ceae75c29450Johann int ref_stride) { \ 1767bc9febe8749e98a3812a0dc4380ceae75c29450Johann return highbd_sad(src, src_stride, ref, ref_stride, m, n); \ 1777bc9febe8749e98a3812a0dc4380ceae75c29450Johann } \ 1787bc9febe8749e98a3812a0dc4380ceae75c29450Johann unsigned int vpx_highbd_sad##m##x##n##_avg_c( \ 1797bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *src, int src_stride, const uint8_t *ref, int ref_stride, \ 1807bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *second_pred) { \ 1818b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DECLARE_ALIGNED(16, uint16_t, comp_pred[m * n]); \ 1827bc9febe8749e98a3812a0dc4380ceae75c29450Johann vpx_highbd_comp_avg_pred_c(comp_pred, second_pred, m, n, ref, ref_stride); \ 1837bc9febe8749e98a3812a0dc4380ceae75c29450Johann return highbd_sadb(src, src_stride, comp_pred, m, m, n); \ 1847bc9febe8749e98a3812a0dc4380ceae75c29450Johann } 1857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1867bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define highbd_sadMxNxK(m, n, k) \ 1877bc9febe8749e98a3812a0dc4380ceae75c29450Johann void vpx_highbd_sad##m##x##n##x##k##_c( \ 1887bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *src, int src_stride, const uint8_t *ref_array, \ 1897bc9febe8749e98a3812a0dc4380ceae75c29450Johann int ref_stride, uint32_t *sad_array) { \ 1907bc9febe8749e98a3812a0dc4380ceae75c29450Johann int i; \ 1917bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < k; ++i) { \ 1927bc9febe8749e98a3812a0dc4380ceae75c29450Johann sad_array[i] = vpx_highbd_sad##m##x##n##_c(src, src_stride, \ 1937bc9febe8749e98a3812a0dc4380ceae75c29450Johann &ref_array[i], ref_stride); \ 1947bc9febe8749e98a3812a0dc4380ceae75c29450Johann } \ 1957bc9febe8749e98a3812a0dc4380ceae75c29450Johann } 1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1977bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define highbd_sadMxNx4D(m, n) \ 1987bc9febe8749e98a3812a0dc4380ceae75c29450Johann void vpx_highbd_sad##m##x##n##x4d_c(const uint8_t *src, int src_stride, \ 1997bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *const ref_array[], \ 2007bc9febe8749e98a3812a0dc4380ceae75c29450Johann int ref_stride, uint32_t *sad_array) { \ 2017bc9febe8749e98a3812a0dc4380ceae75c29450Johann int i; \ 2027bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < 4; ++i) { \ 2037bc9febe8749e98a3812a0dc4380ceae75c29450Johann sad_array[i] = vpx_highbd_sad##m##x##n##_c(src, src_stride, \ 2047bc9febe8749e98a3812a0dc4380ceae75c29450Johann ref_array[i], ref_stride); \ 2057bc9febe8749e98a3812a0dc4380ceae75c29450Johann } \ 2067bc9febe8749e98a3812a0dc4380ceae75c29450Johann } 2077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2087bc9febe8749e98a3812a0dc4380ceae75c29450Johann/* clang-format off */ 2097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 64x64 2107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(64, 64) 2117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(64, 64, 3) 2127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(64, 64, 8) 2137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(64, 64) 2147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 64x32 2167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(64, 32) 2177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(64, 32) 2187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 32x64 2207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(32, 64) 2217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(32, 64) 2227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 32x32 2247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(32, 32) 2257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(32, 32, 3) 2267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(32, 32, 8) 2277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(32, 32) 2287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 32x16 2307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(32, 16) 2317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(32, 16) 2327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 16x32 2347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(16, 32) 2357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(16, 32) 2367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 16x16 2387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(16, 16) 2397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(16, 16, 3) 2407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(16, 16, 8) 2417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(16, 16) 2427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 16x8 2447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(16, 8) 2457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(16, 8, 3) 2467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(16, 8, 8) 2477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(16, 8) 2487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 8x16 2507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(8, 16) 2517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(8, 16, 3) 2527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(8, 16, 8) 2537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(8, 16) 2547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 8x8 2567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(8, 8) 2577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(8, 8, 3) 2587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(8, 8, 8) 2597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(8, 8) 2607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 8x4 2627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(8, 4) 2637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(8, 4, 8) 2647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(8, 4) 2657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 4x8 2677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(4, 8) 2687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(4, 8, 8) 2697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(4, 8) 2707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// 4x4 2727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxN(4, 4) 2737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(4, 4, 3) 2747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNxK(4, 4, 8) 2757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianhighbd_sadMxNx4D(4, 4) 2767bc9febe8749e98a3812a0dc4380ceae75c29450Johann/* clang-format on */ 2777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif // CONFIG_VP9_HIGHBITDEPTH 279