From 102123821def76227f0f290e64b7e570c7c374b9 Mon Sep 17 00:00:00 2001 From: James Zern Date: Fri, 29 May 2015 20:09:51 -0700 Subject: [PATCH] vp9_reconintra: specialize d63 4x4 based on webp's VL4() Change-Id: Ibab962053843eae8752b4e74b6481a53bb034ae9 --- vp9/common/vp9_reconintra.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/vp9/common/vp9_reconintra.c b/vp9/common/vp9_reconintra.c index bb94c2cfe..bea239728 100644 --- a/vp9/common/vp9_reconintra.c +++ b/vp9/common/vp9_reconintra.c @@ -361,6 +361,7 @@ static INLINE void highbd_dc_predictor(uint16_t *dst, ptrdiff_t stride, #define DST(x, y) dst[(x) + (y) * stride] #define AVG3(a, b, c) (((a) + 2 * (b) + (c) + 2) >> 2) +#define AVG2(a, b) (((a) + (b) + 1) >> 1) static INLINE void d207_predictor(uint8_t *dst, ptrdiff_t stride, int bs, const uint8_t *above, const uint8_t *left) { @@ -391,6 +392,30 @@ static INLINE void d207_predictor(uint8_t *dst, ptrdiff_t stride, int bs, } intra_pred_allsizes(d207) +void vp9_d63_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, + const uint8_t *above, const uint8_t *left) { + const int A = above[0]; + const int B = above[1]; + const int C = above[2]; + const int D = above[3]; + const int E = above[4]; + const int F = above[5]; + const int G = above[6]; + const int H = above[7]; + (void)left; + DST(0, 0) = AVG2(A, B); + DST(1, 0) = DST(0, 2) = AVG2(B, C); + DST(2, 0) = DST(1, 2) = AVG2(C, D); + DST(3, 0) = DST(2, 2) = AVG2(D, E); + + DST(0, 1) = AVG3(A, B, C); + DST(1, 1) = DST(0, 3) = AVG3(B, C, D); + DST(2, 1) = DST(1, 3) = AVG3(C, D, E); + DST(3, 1) = DST(2, 3) = AVG3(D, E, F); + DST(3, 2) = AVG3(E, F, G); + DST(3, 3) = AVG3(F, G, H); +} + static INLINE void d63_predictor(uint8_t *dst, ptrdiff_t stride, int bs, const uint8_t *above, const uint8_t *left) { int r, c; @@ -405,7 +430,7 @@ static INLINE void d63_predictor(uint8_t *dst, ptrdiff_t stride, int bs, dst += stride; } } -intra_pred_allsizes(d63) +intra_pred_no_4x4(d63) void vp9_d45_predictor_4x4_c(uint8_t *dst, ptrdiff_t stride, const uint8_t *above, const uint8_t *left) {