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 177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#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; 247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // first column 267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 1; ++r) 277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG2(left[r], left[r + 1]); 287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // second column 327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 2; ++r) 337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r], left[r + 1], left[r + 2]); 347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 2) * stride] = AVG3(left[bs - 2], left[bs - 1], left[bs - 1]); 357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // rest of last row 397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; ++c) 407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride + c] = left[bs - 1]; 417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = bs - 2; r >= 0; --r) 437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; ++c) 447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride + c] = dst[(r + 1) * stride + c - 2]; 457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d63_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int size; 517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; ++c) { 537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG2(above[c], above[c + 1]); 547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride + c] = AVG3(above[c], above[c + 1], above[c + 2]); 557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2, size = bs - 2; r < bs; r += 2, --size) { 577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst + (r + 0) * stride, dst + (r >> 1), size); 587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst + (r + 0) * stride + size, above[bs - 1], bs - size); 597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst + (r + 1) * stride, dst + stride + (r >> 1), size); 607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst + (r + 1) * stride + size, above[bs - 1], bs - size); 617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d45_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t above_right = above[bs - 1]; 677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *const dst_row0 = dst; 687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int x, size; 697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (x = 0; x < bs - 1; ++x) { 727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[x] = AVG3(above[x], above[x + 1], above[x + 2]); 737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[bs - 1] = above_right; 757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (x = 1, size = bs - 2; x < bs; ++x, --size) { 777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst, dst_row0 + x, size); 787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst + size, above_right, x + 1); 797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d117_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // first row 887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; c++) 897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG2(above[c - 1], above[c]); 907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // second row 937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 2], above[c - 1], above[c]); 967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of first col 997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(above[-1], left[0], left[1]); 1007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 3; r < bs; ++r) 1017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(r - 2) * stride] = AVG3(left[r - 3], left[r - 2], left[r - 1]); 1027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of the block 1047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; ++r) { 1057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 1067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = dst[-2 * stride + c - 1]; 1077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d135_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 1147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 1157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 1167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 2], above[c - 1], above[c]); 1177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride] = AVG3(above[-1], left[0], left[1]); 1197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; ++r) 1207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r - 2], left[r - 1], left[r]); 1217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; ++r) { 1247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 1257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = dst[-stride + c - 1]; 1267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void d153_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 1337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG2(above[-1], left[0]); 1347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; r++) 1357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG2(left[r - 1], left[r]); 1367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 1377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 1397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride] = AVG3(above[-1], left[0], left[1]); 1407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; r++) 1417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r - 2], left[r - 1], left[r]); 1427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 1437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; c++) 1457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 1], above[c], above[c + 1]); 1467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; ++r) { 1497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; c++) 1507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = dst[-stride + c - 2]; 1517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void v_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 1587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 1597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst, above, bs); 1627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void h_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 1697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 1707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, left[r], bs); 1737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void tm_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 1807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int ytop_left = above[-1]; 1817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; c++) 1847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = clip_pixel(left[r] + above[c] - ytop_left); 1857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 1887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_128_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 1907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 1917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 1927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 1937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 1947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 1957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, 128, bs); 1977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 1987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 1997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_left_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 2027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, 2037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *left) { 2047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 2057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 2067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) 2087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += left[i]; 2097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 2107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 2127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memset(dst, expected_dc, bs); 2137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 2147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 2157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void dc_top_predictor(uint8_t *dst, ptrdiff_t stride, int bs, 2187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 2207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 2217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) 2237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 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 2507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d207_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 2517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 2537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 2547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 2557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int L = left[3]; 2567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)above; 2577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = AVG2(I, J); 2587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(0, 1) = AVG2(J, K); 2597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 1) = DST(0, 2) = AVG2(K, L); 2607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = AVG3(I, J, K); 2617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = DST(1, 1) = AVG3(J, K, L); 2627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = DST(1, 2) = AVG3(K, L, L); 2637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 2) = DST(2, 2) = 2647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 3) = DST(1, 3) = DST(2, 3) = DST(3, 3) = L; 2657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d63_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 2687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 2707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 2717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 2727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 2737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int E = above[4]; 2747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int F = above[5]; 2757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int G = above[6]; 2767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 2777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = AVG2(A, B); 2787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(0, 2) = AVG2(B, C); 2797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(1, 2) = AVG2(C, D); 2807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = DST(2, 2) = AVG2(D, E); 2817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 2) = AVG2(E, F); // differs from vp8 2827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 1) = AVG3(A, B, C); 2847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 1) = DST(0, 3) = AVG3(B, C, D); 2857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 1) = DST(1, 3) = AVG3(C, D, E); 2867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = DST(2, 3) = AVG3(D, E, F); 2877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 3) = AVG3(E, F, G); // differs from vp8 2887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 2897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 2907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d45_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 2917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 2927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 2937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 2947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 2957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 2967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int E = above[4]; 2977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int F = above[5]; 2987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int G = above[6]; 2997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int H = above[7]; 3007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)stride; 3017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)left; 3027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = AVG3(A, B, C); 3037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(0, 1) = AVG3(B, C, D); 3047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(1, 1) = DST(0, 2) = AVG3(C, D, E); 3057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = DST(2, 1) = DST(1, 2) = DST(0, 3) = AVG3(D, E, F); 3067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = DST(2, 2) = DST(1, 3) = AVG3(E, F, G); 3077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 2) = DST(2, 3) = AVG3(F, G, H); 3087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 3) = H; // differs from vp8 3097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 3107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d117_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 3127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 3137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 3147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 3157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 3167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int X = above[-1]; 3177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 3187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 3197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 3207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 3217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = DST(1, 2) = AVG2(X, A); 3227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(2, 2) = AVG2(A, B); 3237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = DST(3, 2) = AVG2(B, C); 3247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = AVG2(C, D); 3257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 3) = AVG3(K, J, I); 3277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 2) = AVG3(J, I, X); 3287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 1) = DST(1, 3) = AVG3(I, X, A); 3297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 1) = DST(2, 3) = AVG3(X, A, B); 3307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 1) = DST(3, 3) = AVG3(A, B, C); 3317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = AVG3(B, C, D); 3327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 3337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d135_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 3357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 3367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 3377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 3387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 3397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int L = left[3]; 3407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int X = above[-1]; 3417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 3427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 3437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 3447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int D = above[3]; 3457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void)stride; 3467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 3) = AVG3(J, K, L); 3477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 3) = DST(0, 2) = AVG3(I, J, K); 3487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 3) = DST(1, 2) = DST(0, 1) = AVG3(X, I, J); 3497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 3) = DST(2, 2) = DST(1, 1) = DST(0, 0) = AVG3(A, X, I); 3507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 2) = DST(2, 1) = DST(1, 0) = AVG3(B, A, X); 3517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 1) = DST(2, 0) = AVG3(C, B, A); 3527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = AVG3(D, C, B); 3537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 3547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianvoid vpx_d153_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, 3567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, const uint8_t *left) { 3577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int I = left[0]; 3587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int J = left[1]; 3597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int K = left[2]; 3607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int L = left[3]; 3617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int X = above[-1]; 3627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int A = above[0]; 3637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int B = above[1]; 3647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int C = above[2]; 3657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 0) = DST(2, 1) = AVG2(I, X); 3677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 1) = DST(2, 2) = AVG2(J, I); 3687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 2) = DST(2, 3) = AVG2(K, J); 3697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(0, 3) = AVG2(L, K); 3707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(3, 0) = AVG3(A, B, C); 3727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(2, 0) = AVG3(X, A, B); 3737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 0) = DST(3, 1) = AVG3(I, X, A); 3747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 1) = DST(3, 2) = AVG3(J, I, X); 3757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 2) = DST(3, 3) = AVG3(K, J, I); 3767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian DST(1, 3) = AVG3(L, K, J); 3777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 3787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 3807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d207_predictor(uint16_t *dst, ptrdiff_t stride, 3817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 3827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 3837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 3847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 3857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 3867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // First column. 3887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 1; ++r) { 3897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG2(left[r], left[r + 1]); 3907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 3917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 3927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 3937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 3947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // Second column. 3957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs - 2; ++r) { 3967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r], left[r + 1], left[r + 2]); 3977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 3987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 2) * stride] = AVG3(left[bs - 2], left[bs - 1], left[bs - 1]); 3997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride] = left[bs - 1]; 4007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 4017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // Rest of last row. 4037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; ++c) 4047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(bs - 1) * stride + c] = left[bs - 1]; 4057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = bs - 2; r >= 0; --r) { 4077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; ++c) 4087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride + c] = dst[(r + 1) * stride + c - 2]; 4097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d63_predictor(uint16_t *dst, ptrdiff_t stride, 4137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 4147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 4177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 4187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; ++r) { 4197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; ++c) { 4207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = r & 1 ? AVG3(above[(r >> 1) + c], above[(r >> 1) + c + 1], 4217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian above[(r >> 1) + c + 2]) 4227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian : AVG2(above[(r >> 1) + c], above[(r >> 1) + c + 1]); 4237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d45_predictor(uint16_t *dst, ptrdiff_t stride, int bs, 4297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *above, 4307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 4337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 4347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; ++r) { 4357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; ++c) { 4367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = r + c + 2 < bs * 2 ? AVG3(above[r + c], above[r + c + 1], 4377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian above[r + c + 2]) 4387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian : above[bs * 2 - 1]; 4397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d117_predictor(uint16_t *dst, ptrdiff_t stride, 4457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 4467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 4497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // first row 4517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; c++) 4527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG2(above[c - 1], above[c]); 4537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // second row 4567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 4577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 4587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 2], above[c - 1], above[c]); 4597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of first col 4627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(above[-1], left[0], left[1]); 4637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 3; r < bs; ++r) 4647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[(r - 2) * stride] = AVG3(left[r - 3], left[r - 2], left[r - 1]); 4657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian // the rest of the block 4677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; ++r) { 4687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 4697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = dst[-2 * stride + c - 1]; 4707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d135_predictor(uint16_t *dst, ptrdiff_t stride, 4757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 4767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 4797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 4807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 4817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 2], above[c - 1], above[c]); 4827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride] = AVG3(above[-1], left[0], left[1]); 4847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; ++r) 4857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r - 2], left[r - 1], left[r]); 4867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; ++r) { 4897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 1; c < bs; c++) 4907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = dst[-stride + c - 1]; 4917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 4927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 4937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 4947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 4957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_d153_predictor(uint16_t *dst, ptrdiff_t stride, 4967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 4977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 4987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 4997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 5007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG2(above[-1], left[0]); 5017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; r++) 5027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG2(left[r - 1], left[r]); 5037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 5047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[0] = AVG3(left[0], above[-1], above[0]); 5067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[stride] = AVG3(above[-1], left[0], left[1]); 5077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 2; r < bs; r++) 5087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[r * stride] = AVG3(left[r - 2], left[r - 1], left[r]); 5097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst++; 5107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; c++) 5127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = AVG3(above[c - 1], above[c], above[c + 1]); 5137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 1; r < bs; ++r) { 5167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs - 2; c++) 5177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = dst[-stride + c - 2]; 5187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_v_predictor(uint16_t *dst, ptrdiff_t stride, 5237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 5267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 5277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 5287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 5297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian memcpy(dst, above, bs * sizeof(uint16_t)); 5307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_h_predictor(uint16_t *dst, ptrdiff_t stride, 5357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 5387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 5397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 5407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 5417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, left[r], bs); 5427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_tm_predictor(uint16_t *dst, ptrdiff_t stride, 5477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r, c; 5507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int ytop_left = above[-1]; 5517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 5527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 5547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (c = 0; c < bs; c++) 5557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst[c] = clip_pixel_highbd(left[r] + above[c] - ytop_left, bd); 5567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_128_predictor(uint16_t *dst, ptrdiff_t stride, 5617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int r; 5647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 5657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 5667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 5687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, 128 << (bd - 8), bs); 5697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_left_predictor(uint16_t *dst, ptrdiff_t stride, 5747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 5777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) above; 5787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 5797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) 5817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += left[i]; 5827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 5837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 5857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, expected_dc, bs); 5867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 5877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 5887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 5897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_top_predictor(uint16_t *dst, ptrdiff_t stride, 5917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 5927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 5937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 5947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) left; 5957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 5967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 5977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) 5987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += above[i]; 5997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (bs >> 1)) / bs; 6007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, expected_dc, bs); 6037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianstatic INLINE void highbd_dc_predictor(uint16_t *dst, ptrdiff_t stride, 6087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int bs, const uint16_t *above, 6097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { 6107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian int i, r, expected_dc, sum = 0; 6117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const int count = 2 * bs; 6127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian (void) bd; 6137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (i = 0; i < bs; i++) { 6157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += above[i]; 6167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian sum += left[i]; 6177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian expected_dc = (sum + (count >> 1)) / count; 6207ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian for (r = 0; r < bs; r++) { 6227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian vpx_memset16(dst, expected_dc, bs); 6237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian dst += stride; 6247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian} 6267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif // CONFIG_VP9_HIGHBITDEPTH 6277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6287ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// This serves as a wrapper function, so that all the prediction functions 6297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// can be unified and accessed as a pointer array. Note that the boundary 6307ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// above and left are not necessarily used all the time. 6317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_sized(type, size) \ 6327ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian void vpx_##type##_predictor_##size##x##size##_c(uint8_t *dst, \ 6337ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian ptrdiff_t stride, \ 6347ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *above, \ 6357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint8_t *left) { \ 6367ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian type##_predictor(dst, stride, size, above, left); \ 6377ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH 6407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_highbd_sized(type, size) \ 6417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian void vpx_highbd_##type##_predictor_##size##x##size##_c( \ 6427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian uint16_t *dst, ptrdiff_t stride, const uint16_t *above, \ 6437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian const uint16_t *left, int bd) { \ 6447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian highbd_##type##_predictor(dst, stride, size, above, left, bd); \ 6457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian } 6467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6477ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_allsizes(type) \ 6487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 4) \ 6497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 6507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 6517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) \ 6527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 4) \ 6537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 8) \ 6547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 16) \ 6557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 32) 6567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_no_4x4(type) \ 6587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 6597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 6607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) \ 6617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 4) \ 6627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 8) \ 6637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 16) \ 6647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_highbd_sized(type, 32) 6657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#else 6677ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_allsizes(type) \ 6687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 4) \ 6697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 6707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 6717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) 6727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#define intra_pred_no_4x4(type) \ 6747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 8) \ 6757ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 16) \ 6767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian intra_pred_sized(type, 32) 6777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif // CONFIG_VP9_HIGHBITDEPTH 6787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian 6797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d207) 6807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d63) 6817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d45) 6827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d117) 6837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d135) 6847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_no_4x4(d153) 6857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(v) 6867ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(h) 6877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(tm) 6887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc_128) 6897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc_left) 6907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc_top) 6917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianintra_pred_allsizes(dc) 6927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#undef intra_pred_allsizes 693