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 "./vpx_config.h" 127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "./vpx_dsp_rtcd.h" 137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_dsp/vpx_dsp_common.h" 157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_mem/vpx_mem.h" 167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 177bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define DST(x, y) dst[(x) + (y)*stride] 187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2) 197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define AVG2(a, b) (((a) + (b) + 1) >> 1) 207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d207_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 247bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // first column 267bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (r = 0; r < bs - 1; ++r) dst[r * stride] = AVG2(left[r], left[r + 1]); 277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // second column 317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 2; ++r) 327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r], left[r + 1], left[r + 2]); 337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 2) * stride] = AVG3(left[bs - 2], left[bs - 1], left[bs - 1]); 347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // rest of last row 387bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 0; c < bs - 2; ++c) dst[(bs - 1) * stride + c] = left[bs - 1]; 397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = bs - 2; r >= 0; --r) 417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; ++c) 427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride + c] = dst[(r + 1) * stride + c - 2]; 437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d63_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int size; 497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; ++c) { 517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG2(above[c], above[c + 1]); 527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride + c] = AVG3(above[c], above[c + 1], above[c + 2]); 537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2, size = bs - 2; r < bs; r += 2, --size) { 557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst + (r + 0) * stride, dst + (r >> 1), size); 567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst + (r + 0) * stride + size, above[bs - 1], bs - size); 577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst + (r + 1) * stride, dst + stride + (r >> 1), size); 587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst + (r + 1) * stride + size, above[bs - 1], bs - size); 597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d45_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t above_right = above[bs - 1]; 657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *const dst_row0 = dst; 667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int x, size; 677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (x = 0; x < bs - 1; ++x) { 707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[x] = AVG3(above[x], above[x + 1], above[x + 2]); 717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[bs - 1] = above_right; 737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (x = 1, size = bs - 2; x < bs; ++x, --size) { 757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst, dst_row0 + x, size); 767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst + size, above_right, x + 1); 777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d117_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // first row 867bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 0; c < bs; c++) dst[c] = AVG2(above[c - 1], above[c]); 877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // second row 907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 917bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 1; c < bs; c++) dst[c] = AVG3(above[c - 2], above[c - 1], above[c]); 927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of first col 957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(above[-1], left[0], left[1]); 967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 3; r < bs; ++r) 977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(r - 2) * stride] = AVG3(left[r - 3], left[r - 2], left[r - 1]); 987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of the block 1007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; ++r) { 1017bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 1; c < bs; c++) dst[c] = dst[-2 * stride + c - 1]; 1027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d135_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 10868e1c830ade592be74773e249bf94e2bbfb50de7Johann int i; 10968e1c830ade592be74773e249bf94e2bbfb50de7Johann#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ > 7 11068e1c830ade592be74773e249bf94e2bbfb50de7Johann // silence a spurious -Warray-bounds warning, possibly related to: 11168e1c830ade592be74773e249bf94e2bbfb50de7Johann // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 11268e1c830ade592be74773e249bf94e2bbfb50de7Johann uint8_t border[69]; 11368e1c830ade592be74773e249bf94e2bbfb50de7Johann#else 11468e1c830ade592be74773e249bf94e2bbfb50de7Johann uint8_t border[32 + 32 - 1]; // outer border from bottom-left to top-right 11568e1c830ade592be74773e249bf94e2bbfb50de7Johann#endif 11668e1c830ade592be74773e249bf94e2bbfb50de7Johann 11768e1c830ade592be74773e249bf94e2bbfb50de7Johann // dst(bs, bs - 2)[0], i.e., border starting at bottom-left 11868e1c830ade592be74773e249bf94e2bbfb50de7Johann for (i = 0; i < bs - 2; ++i) { 11968e1c830ade592be74773e249bf94e2bbfb50de7Johann border[i] = AVG3(left[bs - 3 - i], left[bs - 2 - i], left[bs - 1 - i]); 12068e1c830ade592be74773e249bf94e2bbfb50de7Johann } 12168e1c830ade592be74773e249bf94e2bbfb50de7Johann border[bs - 2] = AVG3(above[-1], left[0], left[1]); 12268e1c830ade592be74773e249bf94e2bbfb50de7Johann border[bs - 1] = AVG3(left[0], above[-1], above[0]); 12368e1c830ade592be74773e249bf94e2bbfb50de7Johann border[bs - 0] = AVG3(above[-1], above[0], above[1]); 12468e1c830ade592be74773e249bf94e2bbfb50de7Johann // dst[0][2, size), i.e., remaining top border ascending 12568e1c830ade592be74773e249bf94e2bbfb50de7Johann for (i = 0; i < bs - 2; ++i) { 12668e1c830ade592be74773e249bf94e2bbfb50de7Johann border[bs + 1 + i] = AVG3(above[i], above[i + 1], above[i + 2]); 12768e1c830ade592be74773e249bf94e2bbfb50de7Johann } 1287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 12968e1c830ade592be74773e249bf94e2bbfb50de7Johann for (i = 0; i < bs; ++i) { 13068e1c830ade592be74773e249bf94e2bbfb50de7Johann memcpy(dst + i * stride, border + bs - 1 - i, bs); 1317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d153_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 1377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG2(above[-1], left[0]); 1387bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (r = 1; r < bs; r++) dst[r * stride] = AVG2(left[r - 1], left[r]); 1397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 1407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 1427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride] = AVG3(above[-1], left[0], left[1]); 1437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; r++) 1447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r - 2], left[r - 1], left[r]); 1457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 1467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; c++) 1487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 1], above[c], above[c + 1]); 1497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; ++r) { 1527bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 0; c < bs - 2; c++) dst[c] = dst[-stride + c - 2]; 1537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void v_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 1607bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 1617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst, above, bs); 1647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void h_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 1717bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 1727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, left[r], bs); 1757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void tm_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 1827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int ytop_left = above[-1]; 1837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; c++) 1867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = clip_pixel(left[r] + above[c] - ytop_left); 1877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_128_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 1947bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 1957bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, 128, bs); 1997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 2007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 2017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_left_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 2047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, 2057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *left) { 2067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 2077bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 2087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2097bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < bs; i++) sum += left[i]; 2107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 2117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 2137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, expected_dc, bs); 2147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 2157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 2167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_top_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 2197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 2217bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 2227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2237bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < bs; i++) sum += above[i]; 2247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 2257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 2277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, expected_dc, bs); 2287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 2297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 2307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 2337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 2357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int count = 2 * bs; 2367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) { 2387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += above[i]; 2397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += left[i]; 2407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 2417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (count >> 1)) / count; 2437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 2457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, expected_dc, bs); 2467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 2477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 2487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 250c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohannvoid vpx_he_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 251c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const uint8_t *above, const uint8_t *left) { 252c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int H = above[-1]; 253c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int I = left[0]; 254c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int J = left[1]; 255c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int K = left[2]; 256c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int L = left[3]; 257c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 258c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memset(dst + stride * 0, AVG3(H, I, J), 4); 259c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memset(dst + stride * 1, AVG3(I, J, K), 4); 260c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memset(dst + stride * 2, AVG3(J, K, L), 4); 261c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memset(dst + stride * 3, AVG3(K, L, L), 4); 262c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann} 263c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 264c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohannvoid vpx_ve_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 265c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const uint8_t *above, const uint8_t *left) { 266c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int H = above[-1]; 267c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int I = above[0]; 268c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int J = above[1]; 269c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int K = above[2]; 270c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int L = above[3]; 271c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int M = above[4]; 27268e1c830ade592be74773e249bf94e2bbfb50de7Johann (void)left; 273c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 274c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann dst[0] = AVG3(H, I, J); 275c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann dst[1] = AVG3(I, J, K); 276c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann dst[2] = AVG3(J, K, L); 277c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann dst[3] = AVG3(K, L, M); 278c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memcpy(dst + stride * 1, dst, 4); 279c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memcpy(dst + stride * 2, dst, 4); 280c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann memcpy(dst + stride * 3, dst, 4); 281c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann} 282c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 2837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d207_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 2847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 2867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 2877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 2887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int L = left[3]; 2897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)above; 2907bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 0) = AVG2(I, J); 2917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(0, 1) = AVG2(J, K); 2927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 1) = DST(0, 2) = AVG2(K, L); 2937bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(1, 0) = AVG3(I, J, K); 2947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = DST(1, 1) = AVG3(J, K, L); 2957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = DST(1, 2) = AVG3(K, L, L); 2967bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 2) = DST(2, 2) = DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; 2977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d63_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 3007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 3017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 3027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 3037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 3047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 3057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int E = above[4]; 3067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int F = above[5]; 3077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int G = above[6]; 3087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 3097bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 0) = AVG2(A, B); 3107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(0, 2) = AVG2(B, C); 3117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(1, 2) = AVG2(C, D); 3127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = DST(2, 2) = AVG2(D, E); 3137bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 2) = AVG2(E, F); // differs from vp8 3147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3157bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 1) = AVG3(A, B, C); 3167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 1) = DST(0, 3) = AVG3(B, C, D); 3177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 1) = DST(1, 3) = AVG3(C, D, E); 3187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = DST(2, 3) = AVG3(D, E, F); 3197bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 3) = AVG3(E, F, G); // differs from vp8 3207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 3217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3228b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_d63e_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 323c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const uint8_t *above, const uint8_t *left) { 324c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int A = above[0]; 325c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int B = above[1]; 326c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int C = above[2]; 327c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int D = above[3]; 328c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int E = above[4]; 329c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int F = above[5]; 330c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int G = above[6]; 331c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int H = above[7]; 332c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann (void)left; 3337bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 0) = AVG2(A, B); 334c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(1, 0) = DST(0, 2) = AVG2(B, C); 335c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(2, 0) = DST(1, 2) = AVG2(C, D); 336c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(3, 0) = DST(2, 2) = AVG2(D, E); 3377bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 2) = AVG3(E, F, G); 338c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 3397bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 1) = AVG3(A, B, C); 340c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(1, 1) = DST(0, 3) = AVG3(B, C, D); 341c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(2, 1) = DST(1, 3) = AVG3(C, D, E); 342c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(3, 1) = DST(2, 3) = AVG3(D, E, F); 3437bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 3) = AVG3(F, G, H); 344c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann} 345c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 3467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d45_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 3477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 3487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 3497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 3507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 3517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 3527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int E = above[4]; 3537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int F = above[5]; 3547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int G = above[6]; 3557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int H = above[7]; 3567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)stride; 3577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 3587bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 0) = AVG3(A, B, C); 3597bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(1, 0) = DST(0, 1) = AVG3(B, C, D); 3607bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(2, 0) = DST(1, 1) = DST(0, 2) = AVG3(C, D, E); 3617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F); 3627bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G); 3637bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 2) = DST(2, 3) = AVG3(F, G, H); 3647bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 3) = H; // differs from vp8 3657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 3667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 367c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohannvoid vpx_d45e_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 368c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const uint8_t *above, const uint8_t *left) { 369c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int A = above[0]; 370c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int B = above[1]; 371c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int C = above[2]; 372c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int D = above[3]; 373c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int E = above[4]; 374c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int F = above[5]; 375c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int G = above[6]; 376c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann const int H = above[7]; 377c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann (void)stride; 378c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann (void)left; 3797bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 0) = AVG3(A, B, C); 3807bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(1, 0) = DST(0, 1) = AVG3(B, C, D); 3817bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(2, 0) = DST(1, 1) = DST(0, 2) = AVG3(C, D, E); 382c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F); 3837bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G); 3847bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 2) = DST(2, 3) = AVG3(F, G, H); 3857bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 3) = AVG3(G, H, H); 386c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann} 387c927526be9a7b72fb5edb3f29c4e8ceabe0ec98aJohann 3887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d117_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 3897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 3907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 3917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 3927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 3937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int X = above[-1]; 3947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 3957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 3967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 3977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 3987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = DST(1, 2) = AVG2(X, A); 3997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(2, 2) = AVG2(A, B); 4007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(3, 2) = AVG2(B, C); 4017bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 0) = AVG2(C, D); 4027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4037bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 3) = AVG3(K, J, I); 4047bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 2) = AVG3(J, I, X); 4057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 1) = DST(1, 3) = AVG3(I, X, A); 4067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 1) = DST(2, 3) = AVG3(X, A, B); 4077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 1) = DST(3, 3) = AVG3(A, B, C); 4087bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 1) = AVG3(B, C, D); 4097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d135_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 4127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 4137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 4147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 4157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 4167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int L = left[3]; 4177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int X = above[-1]; 4187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 4197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 4207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 4217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 4227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)stride; 4237bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 3) = AVG3(J, K, L); 4247bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(1, 3) = DST(0, 2) = AVG3(I, J, K); 4257bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(2, 3) = DST(1, 2) = DST(0, 1) = AVG3(X, I, J); 4267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 3) = DST(2, 2) = DST(1, 1) = DST(0, 0) = AVG3(A, X, I); 4277bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 2) = DST(2, 1) = DST(1, 0) = AVG3(B, A, X); 4287bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 1) = DST(2, 0) = AVG3(C, B, A); 4297bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 0) = AVG3(D, C, B); 4307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d153_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 4337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 4347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 4357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 4367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 4377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int L = left[3]; 4387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int X = above[-1]; 4397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 4407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 4417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 4427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = DST(2, 1) = AVG2(I, X); 4447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 1) = DST(2, 2) = AVG2(J, I); 4457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 2) = DST(2, 3) = AVG2(K, J); 4467bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(0, 3) = AVG2(L, K); 4477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4487bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(3, 0) = AVG3(A, B, C); 4497bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(2, 0) = AVG3(X, A, B); 4507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(3, 1) = AVG3(I, X, A); 4517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 1) = DST(3, 2) = AVG3(J, I, X); 4527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 2) = DST(3, 3) = AVG3(K, J, I); 4537bc9febe8749e98a3812a0dc4380ceae75c29450Johann DST(1, 3) = AVG3(L, K, J); 4547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 4577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d207_predictor(uint16_t *dst, ptrdiff_t stride, 4587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 4597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4617bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 4627bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 4637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // First column. 4657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 1; ++r) { 4667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG2(left[r], left[r + 1]); 4677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 4697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 4707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // Second column. 4727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 2; ++r) { 4737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r], left[r + 1], left[r + 2]); 4747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 2) * stride] = AVG3(left[bs - 2], left[bs - 1], left[bs - 1]); 4767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 4777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 4787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // Rest of last row. 4807bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 0; c < bs - 2; ++c) dst[(bs - 1) * stride + c] = left[bs - 1]; 4817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = bs - 2; r >= 0; --r) { 4837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; ++c) 4847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride + c] = dst[(r + 1) * stride + c - 2]; 4857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4887bc9febe8749e98a3812a0dc4380ceae75c29450Johannstatic INLINE void highbd_d63_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 4897bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint16_t *above, 4907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4927bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 4937bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 4947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; ++r) { 4957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; ++c) { 4967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = r & 1 ? AVG3(above[(r >> 1) + c], above[(r >> 1) + c + 1], 4977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian above[(r >> 1) + c + 2]) 4987bc9febe8749e98a3812a0dc4380ceae75c29450Johann : AVG2(above[(r >> 1) + c], above[(r >> 1) + c + 1]); 4997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d45_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 5057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *above, 5067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 5087bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 5097bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 5107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; ++r) { 5117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; ++c) { 5127bc9febe8749e98a3812a0dc4380ceae75c29450Johann dst[c] = r + c + 2 < bs * 2 5137bc9febe8749e98a3812a0dc4380ceae75c29450Johann ? AVG3(above[r + c], above[r + c + 1], above[r + c + 2]) 5147bc9febe8749e98a3812a0dc4380ceae75c29450Johann : above[bs * 2 - 1]; 5157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d117_predictor(uint16_t *dst, ptrdiff_t stride, 5217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 5247bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 5257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // first row 5277bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 0; c < bs; c++) dst[c] = AVG2(above[c - 1], above[c]); 5287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // second row 5317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 5327bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 1; c < bs; c++) dst[c] = AVG3(above[c - 2], above[c - 1], above[c]); 5337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of first col 5367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(above[-1], left[0], left[1]); 5377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 3; r < bs; ++r) 5387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(r - 2) * stride] = AVG3(left[r - 3], left[r - 2], left[r - 1]); 5397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of the block 5417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; ++r) { 5427bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 1; c < bs; c++) dst[c] = dst[-2 * stride + c - 1]; 5437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d135_predictor(uint16_t *dst, ptrdiff_t stride, 5487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5508b92989c89bec8632aa47dc58dc162f199d62edcJames Zern int i; 5518b92989c89bec8632aa47dc58dc162f199d62edcJames Zern#if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ > 7 5528b92989c89bec8632aa47dc58dc162f199d62edcJames Zern // silence a spurious -Warray-bounds warning, possibly related to: 5538b92989c89bec8632aa47dc58dc162f199d62edcJames Zern // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 5548b92989c89bec8632aa47dc58dc162f199d62edcJames Zern uint16_t border[69]; 5558b92989c89bec8632aa47dc58dc162f199d62edcJames Zern#else 5568b92989c89bec8632aa47dc58dc162f199d62edcJames Zern uint16_t border[32 + 32 - 1]; // outer border from bottom-left to top-right 5578b92989c89bec8632aa47dc58dc162f199d62edcJames Zern#endif 5587bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 5597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5608b92989c89bec8632aa47dc58dc162f199d62edcJames Zern // dst(bs, bs - 2)[0], i.e., border starting at bottom-left 5618b92989c89bec8632aa47dc58dc162f199d62edcJames Zern for (i = 0; i < bs - 2; ++i) { 5628b92989c89bec8632aa47dc58dc162f199d62edcJames Zern border[i] = AVG3(left[bs - 3 - i], left[bs - 2 - i], left[bs - 1 - i]); 5638b92989c89bec8632aa47dc58dc162f199d62edcJames Zern } 5648b92989c89bec8632aa47dc58dc162f199d62edcJames Zern border[bs - 2] = AVG3(above[-1], left[0], left[1]); 5658b92989c89bec8632aa47dc58dc162f199d62edcJames Zern border[bs - 1] = AVG3(left[0], above[-1], above[0]); 5668b92989c89bec8632aa47dc58dc162f199d62edcJames Zern border[bs - 0] = AVG3(above[-1], above[0], above[1]); 5678b92989c89bec8632aa47dc58dc162f199d62edcJames Zern // dst[0][2, size), i.e., remaining top border ascending 5688b92989c89bec8632aa47dc58dc162f199d62edcJames Zern for (i = 0; i < bs - 2; ++i) { 5698b92989c89bec8632aa47dc58dc162f199d62edcJames Zern border[bs + 1 + i] = AVG3(above[i], above[i + 1], above[i + 2]); 5708b92989c89bec8632aa47dc58dc162f199d62edcJames Zern } 5717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5728b92989c89bec8632aa47dc58dc162f199d62edcJames Zern for (i = 0; i < bs; ++i) { 5738b92989c89bec8632aa47dc58dc162f199d62edcJames Zern memcpy(dst + i * stride, border + bs - 1 - i, bs * sizeof(dst[0])); 5747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d153_predictor(uint16_t *dst, ptrdiff_t stride, 5787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 5817bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 5827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG2(above[-1], left[0]); 5837bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (r = 1; r < bs; r++) dst[r * stride] = AVG2(left[r - 1], left[r]); 5847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 5857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 5877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride] = AVG3(above[-1], left[0], left[1]); 5887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; r++) 5897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r - 2], left[r - 1], left[r]); 5907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 5917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; c++) 5937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 1], above[c], above[c + 1]); 5947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; ++r) { 5977bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (c = 0; c < bs - 2; c++) dst[c] = dst[-stride + c - 2]; 5987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6027bc9febe8749e98a3812a0dc4380ceae75c29450Johannstatic INLINE void highbd_v_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 6037bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint16_t *above, 6047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 6067bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 6077bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 6087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst, above, bs * sizeof(uint16_t)); 6107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6147bc9febe8749e98a3812a0dc4380ceae75c29450Johannstatic INLINE void highbd_h_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 6157bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint16_t *above, 6167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 6187bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 6197bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 6207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, left[r], bs); 6227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6267bc9febe8749e98a3812a0dc4380ceae75c29450Johannstatic INLINE void highbd_tm_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 6277bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint16_t *above, 6287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 6307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int ytop_left = above[-1]; 6317bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 6327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; c++) 6357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = clip_pixel_highbd(left[r] + above[c] - ytop_left, bd); 6367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_128_predictor(uint16_t *dst, ptrdiff_t stride, 6417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 6427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 6447bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 6457bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 6467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, 128 << (bd - 8), bs); 6497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_left_predictor(uint16_t *dst, ptrdiff_t stride, 6547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 6557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 6577bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)above; 6587bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 6597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6607bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < bs; i++) sum += left[i]; 6617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 6627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, expected_dc, bs); 6657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_top_predictor(uint16_t *dst, ptrdiff_t stride, 6707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 6717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 6737bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)left; 6747bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 6757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6767bc9febe8749e98a3812a0dc4380ceae75c29450Johann for (i = 0; i < bs; i++) sum += above[i]; 6777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 6787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, expected_dc, bs); 6817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6857bc9febe8749e98a3812a0dc4380ceae75c29450Johannstatic INLINE void highbd_dc_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 6867bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint16_t *above, 6877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 6897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int count = 2 * bs; 6907bc9febe8749e98a3812a0dc4380ceae75c29450Johann (void)bd; 6917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) { 6937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += above[i]; 6947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += left[i]; 6957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (count >> 1)) / count; 6987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 7007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, expected_dc, bs); 7017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 7027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 7037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 7048b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7058b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_highbd_d207_predictor_4x4_c(uint16_t *dst, ptrdiff_t stride, 7068b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *above, 7078b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *left, int bd) { 7088b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int I = left[0]; 7098b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int J = left[1]; 7108b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int K = left[2]; 7118b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int L = left[3]; 7128b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)above; 7138b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)bd; 7148b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 0) = AVG2(I, J); 7158b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 0) = DST(0, 1) = AVG2(J, K); 7168b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 1) = DST(0, 2) = AVG2(K, L); 7178b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 0) = AVG3(I, J, K); 7188b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 0) = DST(1, 1) = AVG3(J, K, L); 7198b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 1) = DST(1, 2) = AVG3(K, L, L); 7208b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 2) = DST(2, 2) = DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; 7218b92989c89bec8632aa47dc58dc162f199d62edcJames Zern} 7228b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7238b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_highbd_d63_predictor_4x4_c(uint16_t *dst, ptrdiff_t stride, 7248b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *above, const uint16_t *left, 7258b92989c89bec8632aa47dc58dc162f199d62edcJames Zern int bd) { 7268b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int A = above[0]; 7278b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int B = above[1]; 7288b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int C = above[2]; 7298b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int D = above[3]; 7308b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int E = above[4]; 7318b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int F = above[5]; 7328b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int G = above[6]; 7338b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)left; 7348b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)bd; 7358b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 0) = AVG2(A, B); 7368b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 0) = DST(0, 2) = AVG2(B, C); 7378b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 0) = DST(1, 2) = AVG2(C, D); 7388b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 0) = DST(2, 2) = AVG2(D, E); 7398b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 2) = AVG2(E, F); // differs from vp8 7408b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7418b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 1) = AVG3(A, B, C); 7428b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 1) = DST(0, 3) = AVG3(B, C, D); 7438b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 1) = DST(1, 3) = AVG3(C, D, E); 7448b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 1) = DST(2, 3) = AVG3(D, E, F); 7458b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 3) = AVG3(E, F, G); // differs from vp8 7468b92989c89bec8632aa47dc58dc162f199d62edcJames Zern} 7478b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7488b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_highbd_d45_predictor_4x4_c(uint16_t *dst, ptrdiff_t stride, 7498b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *above, const uint16_t *left, 7508b92989c89bec8632aa47dc58dc162f199d62edcJames Zern int bd) { 7518b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int A = above[0]; 7528b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int B = above[1]; 7538b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int C = above[2]; 7548b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int D = above[3]; 7558b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int E = above[4]; 7568b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int F = above[5]; 7578b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int G = above[6]; 7588b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int H = above[7]; 7598b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)left; 7608b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)bd; 7618b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 0) = AVG3(A, B, C); 7628b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 0) = DST(0, 1) = AVG3(B, C, D); 7638b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 0) = DST(1, 1) = DST(0, 2) = AVG3(C, D, E); 7648b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F); 7658b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G); 7668b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 2) = DST(2, 3) = AVG3(F, G, H); 7678b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 3) = H; // differs from vp8 7688b92989c89bec8632aa47dc58dc162f199d62edcJames Zern} 7698b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7708b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_highbd_d117_predictor_4x4_c(uint16_t *dst, ptrdiff_t stride, 7718b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *above, 7728b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *left, int bd) { 7738b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int I = left[0]; 7748b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int J = left[1]; 7758b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int K = left[2]; 7768b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int X = above[-1]; 7778b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int A = above[0]; 7788b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int B = above[1]; 7798b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int C = above[2]; 7808b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int D = above[3]; 7818b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)bd; 7828b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 0) = DST(1, 2) = AVG2(X, A); 7838b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 0) = DST(2, 2) = AVG2(A, B); 7848b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 0) = DST(3, 2) = AVG2(B, C); 7858b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 0) = AVG2(C, D); 7868b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7878b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 3) = AVG3(K, J, I); 7888b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 2) = AVG3(J, I, X); 7898b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 1) = DST(1, 3) = AVG3(I, X, A); 7908b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 1) = DST(2, 3) = AVG3(X, A, B); 7918b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 1) = DST(3, 3) = AVG3(A, B, C); 7928b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 1) = AVG3(B, C, D); 7938b92989c89bec8632aa47dc58dc162f199d62edcJames Zern} 7948b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 7958b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_highbd_d135_predictor_4x4_c(uint16_t *dst, ptrdiff_t stride, 7968b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *above, 7978b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *left, int bd) { 7988b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int I = left[0]; 7998b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int J = left[1]; 8008b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int K = left[2]; 8018b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int L = left[3]; 8028b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int X = above[-1]; 8038b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int A = above[0]; 8048b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int B = above[1]; 8058b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int C = above[2]; 8068b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int D = above[3]; 8078b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)bd; 8088b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 3) = AVG3(J, K, L); 8098b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 3) = DST(0, 2) = AVG3(I, J, K); 8108b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 3) = DST(1, 2) = DST(0, 1) = AVG3(X, I, J); 8118b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 3) = DST(2, 2) = DST(1, 1) = DST(0, 0) = AVG3(A, X, I); 8128b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 2) = DST(2, 1) = DST(1, 0) = AVG3(B, A, X); 8138b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 1) = DST(2, 0) = AVG3(C, B, A); 8148b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 0) = AVG3(D, C, B); 8158b92989c89bec8632aa47dc58dc162f199d62edcJames Zern} 8168b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 8178b92989c89bec8632aa47dc58dc162f199d62edcJames Zernvoid vpx_highbd_d153_predictor_4x4_c(uint16_t *dst, ptrdiff_t stride, 8188b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *above, 8198b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const uint16_t *left, int bd) { 8208b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int I = left[0]; 8218b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int J = left[1]; 8228b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int K = left[2]; 8238b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int L = left[3]; 8248b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int X = above[-1]; 8258b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int A = above[0]; 8268b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int B = above[1]; 8278b92989c89bec8632aa47dc58dc162f199d62edcJames Zern const int C = above[2]; 8288b92989c89bec8632aa47dc58dc162f199d62edcJames Zern (void)bd; 8298b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 8308b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 0) = DST(2, 1) = AVG2(I, X); 8318b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 1) = DST(2, 2) = AVG2(J, I); 8328b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 2) = DST(2, 3) = AVG2(K, J); 8338b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(0, 3) = AVG2(L, K); 8348b92989c89bec8632aa47dc58dc162f199d62edcJames Zern 8358b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(3, 0) = AVG3(A, B, C); 8368b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(2, 0) = AVG3(X, A, B); 8378b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 0) = DST(3, 1) = AVG3(I, X, A); 8388b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 1) = DST(3, 2) = AVG3(J, I, X); 8398b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 2) = DST(3, 3) = AVG3(K, J, I); 8408b92989c89bec8632aa47dc58dc162f199d62edcJames Zern DST(1, 3) = AVG3(L, K, J); 8418b92989c89bec8632aa47dc58dc162f199d62edcJames Zern} 8427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif // CONFIG_VP9_HIGHBITDEPTH 8437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// This serves as a wrapper function, so that all the prediction functions 8457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// can be unified and accessed as a pointer array. Note that the boundary 8467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// above and left are not necessarily used all the time. 8477bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define intra_pred_sized(type, size) \ 8487bc9febe8749e98a3812a0dc4380ceae75c29450Johann void vpx_##type##_predictor_##size##x##size##_c( \ 8497bc9febe8749e98a3812a0dc4380ceae75c29450Johann uint8_t *dst, ptrdiff_t stride, const uint8_t *above, \ 8507bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint8_t *left) { \ 8517bc9febe8749e98a3812a0dc4380ceae75c29450Johann type##_predictor(dst, stride, size, above, left); \ 8527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 8537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 8557bc9febe8749e98a3812a0dc4380ceae75c29450Johann#define intra_pred_highbd_sized(type, size) \ 8567bc9febe8749e98a3812a0dc4380ceae75c29450Johann void vpx_highbd_##type##_predictor_##size##x##size##_c( \ 8577bc9febe8749e98a3812a0dc4380ceae75c29450Johann uint16_t *dst, ptrdiff_t stride, const uint16_t *above, \ 8587bc9febe8749e98a3812a0dc4380ceae75c29450Johann const uint16_t *left, int bd) { \ 8597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian highbd_##type##_predictor(dst, stride, size, above, left, bd); \ 8607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 8617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8627bc9febe8749e98a3812a0dc4380ceae75c29450Johann/* clang-format off */ 8637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_allsizes(type) \ 8647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 4) \ 8657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 8667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 8677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) \ 8687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 4) \ 8697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 8) \ 8707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 16) \ 8717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 32) 8727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_no_4x4(type) \ 8747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 8757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 8767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) \ 8777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 8) \ 8787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 16) \ 8797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 32) 8807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#else 8827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_allsizes(type) \ 8837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 4) \ 8847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 8857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 8867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) 8877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_no_4x4(type) \ 8897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 8907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 8917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) 8927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif // CONFIG_VP9_HIGHBITDEPTH 8937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 8947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d207) 8957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d63) 8967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d45) 8977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d117) 8987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d135) 8997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d153) 9007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(v) 9017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(h) 9027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(tm) 9037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc_128) 9047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc_left) 9057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc_top) 9067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc) 9077bc9febe8749e98a3812a0dc4380ceae75c29450Johann/* clang-format on */ 9087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#undef intra_pred_allsizes 909