From: James Zern Date: Sat, 9 Sep 2017 02:20:07 +0000 (-0700) Subject: intrapred: sync highbd_d63_predictor w/d63_ X-Git-Tag: v1.7.0~179 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fb40b5d7a76978e6fcedf5997fd7a45571aa6b0d;p=libvpx intrapred: sync highbd_d63_predictor w/d63_ 8/16/32: ~6%/~18%/~33% faster previously: 7012ba639 vp9_reconintra: simplify d63_predictor BUG=webm:1411 Change-Id: Ie775f3a4f7fd74df44754e65686d826a51c2cdc2 --- diff --git a/vpx_dsp/intrapred.c b/vpx_dsp/intrapred.c index 4c640e5d2..400e632e9 100644 --- a/vpx_dsp/intrapred.c +++ b/vpx_dsp/intrapred.c @@ -489,15 +489,19 @@ static INLINE void highbd_d63_predictor(uint16_t *dst, ptrdiff_t stride, int bs, const uint16_t *above, const uint16_t *left, int bd) { int r, c; + int size; (void)left; (void)bd; - for (r = 0; r < bs; ++r) { - for (c = 0; c < bs; ++c) { - dst[c] = r & 1 ? AVG3(above[(r >> 1) + c], above[(r >> 1) + c + 1], - above[(r >> 1) + c + 2]) - : AVG2(above[(r >> 1) + c], above[(r >> 1) + c + 1]); - } - dst += stride; + for (c = 0; c < bs; ++c) { + dst[c] = AVG2(above[c], above[c + 1]); + dst[stride + c] = AVG3(above[c], above[c + 1], above[c + 2]); + } + for (r = 2, size = bs - 2; r < bs; r += 2, --size) { + memcpy(dst + (r + 0) * stride, dst + (r >> 1), size * sizeof(*dst)); + vpx_memset16(dst + (r + 0) * stride + size, above[bs - 1], bs - size); + memcpy(dst + (r + 1) * stride, dst + stride + (r >> 1), + size * sizeof(*dst)); + vpx_memset16(dst + (r + 1) * stride + size, above[bs - 1], bs - size); } }