From e3465a63d7453bcdbbe09eaca1d3b9d648df6ef4 Mon Sep 17 00:00:00 2001 From: Yaowu Xu Date: Fri, 19 Apr 2013 09:33:07 -0700 Subject: [PATCH] make DC_PRED for i4x4 to use real pixels only Wherever there are real pixels available before falling back to use assumed values 127 and 129. This also make DC_PRED for i4x4 consistent with DC_PRED for larger blocks. Change-Id: I54372924826118da023f402c802ac6ce0caa70c3 --- vp9/common/vp9_reconintra4x4.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/vp9/common/vp9_reconintra4x4.c b/vp9/common/vp9_reconintra4x4.c index a0700010b..7f81b051b 100644 --- a/vp9/common/vp9_reconintra4x4.c +++ b/vp9/common/vp9_reconintra4x4.c @@ -258,15 +258,22 @@ void vp9_intra4x4_predict(MACROBLOCKD *xd, switch (b_mode) { case B_DC_PRED: { - int expected_dc = 0; - - for (i = 0; i < 4; i++) { - expected_dc += above[i]; - expected_dc += left[i]; + int expected_dc = 128; + if (have_top || have_left) { + int average = 0; + int count = 0; + if (have_top) { + for (i = 0; i < 4; i++) + average += above[i]; + count += 4; + } + if (have_left) { + for (i = 0; i < 4; i++) + average += left[i]; + count += 4; + } + expected_dc = (average + (count >> 1)) / count; } - - expected_dc = ROUND_POWER_OF_TWO(expected_dc, 3); - for (r = 0; r < 4; r++) { for (c = 0; c < 4; c++) predictor[c] = expected_dc; -- 2.50.1