From: James Zern Date: Sat, 30 May 2015 03:09:51 +0000 (-0700) Subject: vp9_reconintra: specialize d63 4x4 X-Git-Tag: v1.5.0~615^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=102123821def76227f0f290e64b7e570c7c374b9;p=libvpx vp9_reconintra: specialize d63 4x4 based on webp's VL4() Change-Id: Ibab962053843eae8752b4e74b6481a53bb034ae9 --- 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) {