From: Yaowu Xu Date: Fri, 19 Apr 2013 16:33:07 +0000 (-0700) Subject: make DC_PRED for i4x4 to use real pixels only X-Git-Tag: v1.3.0~1106^2~184^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e3465a63d7453bcdbbe09eaca1d3b9d648df6ef4;p=libvpx 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 --- 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;