diff options
author | Ronald S. Bultje <rbultje@google.com> | 2013-01-05 18:20:25 -0800 |
---|---|---|
committer | Ronald S. Bultje <rbultje@google.com> | 2013-01-05 18:20:25 -0800 |
commit | c3941665e995f12f9aa9b47a32c06d20978993fc (patch) | |
tree | 1d2c8c57a6196e07eb3df5e8d7fc29cfd083687a /vp9/common/vp9_reconintra4x4.c | |
parent | 81d1171fd4614c3b60439b97007a3ec7ea5e3d0c (diff) | |
download | libvpx-c3941665e995f12f9aa9b47a32c06d20978993fc.tar libvpx-c3941665e995f12f9aa9b47a32c06d20978993fc.tar.gz libvpx-c3941665e995f12f9aa9b47a32c06d20978993fc.tar.bz2 libvpx-c3941665e995f12f9aa9b47a32c06d20978993fc.zip |
64x64 blocksize support.
3.2% gains on std/hd, 1.0% gains on hd.
Change-Id: I481d5df23d8a4fc650a5bcba956554490b2bd200
Diffstat (limited to 'vp9/common/vp9_reconintra4x4.c')
-rw-r--r-- | vp9/common/vp9_reconintra4x4.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/vp9/common/vp9_reconintra4x4.c b/vp9/common/vp9_reconintra4x4.c index d61a515b8..c41b55bca 100644 --- a/vp9/common/vp9_reconintra4x4.c +++ b/vp9/common/vp9_reconintra4x4.c @@ -434,12 +434,9 @@ void vp9_comp_intra4x4_predict_c(BLOCKD *x, * to the right prediction have filled in pixels to use. */ void vp9_intra_prediction_down_copy(MACROBLOCKD *xd) { - int extend_edge = (xd->mb_to_right_edge == 0 && xd->mb_index < 2); + int extend_edge = xd->mb_to_right_edge == 0 && xd->mb_index < 2; uint8_t *above_right = *(xd->block[0].base_dst) + xd->block[0].dst - xd->block[0].dst_stride + 16; - uint32_t *src_ptr = (uint32_t *) - (above_right - (xd->mb_index == 3 ? 16 * xd->block[0].dst_stride : 0)); - uint32_t *dst_ptr0 = (uint32_t *)above_right; uint32_t *dst_ptr1 = (uint32_t *)(above_right + 4 * xd->block[0].dst_stride); @@ -448,6 +445,17 @@ void vp9_intra_prediction_down_copy(MACROBLOCKD *xd) { uint32_t *dst_ptr3 = (uint32_t *)(above_right + 12 * xd->block[0].dst_stride); + uint32_t *src_ptr = (uint32_t *) above_right; + + if ((xd->sb_index >= 2 && xd->mb_to_right_edge == 0) || + (xd->sb_index == 3 && xd->mb_index & 1)) + src_ptr = (uint32_t *) (((uint8_t *) src_ptr) - 32 * + xd->block[0].dst_stride); + if (xd->mb_index == 3 || + (xd->mb_to_right_edge == 0 && xd->mb_index == 2)) + src_ptr = (uint32_t *) (((uint8_t *) src_ptr) - 16 * + xd->block[0].dst_stride); + if (extend_edge) { *src_ptr = ((uint8_t *) src_ptr)[-1] * 0x01010101U; } |