summaryrefslogtreecommitdiff
path: root/vp9/common/vp9_reconintra4x4.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@google.com>2013-01-05 18:20:25 -0800
committerRonald S. Bultje <rbultje@google.com>2013-01-05 18:20:25 -0800
commitc3941665e995f12f9aa9b47a32c06d20978993fc (patch)
tree1d2c8c57a6196e07eb3df5e8d7fc29cfd083687a /vp9/common/vp9_reconintra4x4.c
parent81d1171fd4614c3b60439b97007a3ec7ea5e3d0c (diff)
downloadlibvpx-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.c16
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;
}