From: Jerome Jiang Date: Thu, 5 Jan 2017 00:19:42 +0000 (-0800) Subject: vp9: Compute source sad for every superblock when partition copy is on. X-Git-Tag: v1.6.1~12^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=afc8c4836fa711501f81a6d54cf0ffa49a2fb99f;p=libvpx vp9: Compute source sad for every superblock when partition copy is on. The source sad could be used to copy the partition without going into choose_partitioning function to speed up vp9 encoding. Computing source sad takes little time. Speed test on Android and Linux shows little encoding time gain (less than 1.4%). Turned off for now since partition copy is turned off. Change-Id: I61c9d5b8f22329760cb29a4ee30a7f9c232ce8d3 --- diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 476cb2d69..dee7ca75e 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -3133,7 +3133,7 @@ static void encode_without_recode_loop(VP9_COMP *cpi, size_t *size, if (cpi->oxcf.pass == 0 && cpi->oxcf.mode == REALTIME && cpi->oxcf.speed >= 5 && cpi->resize_state == 0 && (cpi->oxcf.content == VP9E_CONTENT_SCREEN || - cpi->oxcf.rc_mode == VPX_VBR) && + cpi->oxcf.rc_mode == VPX_VBR || cpi->sf.copy_partition_flag) && cm->show_frame) vp9_avg_source_sad(cpi); diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 34ee11548..b2abe1780 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -2251,10 +2251,12 @@ void vp9_avg_source_sad(VP9_COMP *cpi) { for (sbi_row = 0; sbi_row < sb_rows; ++sbi_row) { for (sbi_col = 0; sbi_col < sb_cols; ++sbi_col) { // Checker-board pattern, ignore boundary. - if ((sbi_row > 0 && sbi_col > 0) && - (sbi_row < sb_rows - 1 && sbi_col < sb_cols - 1) && - ((sbi_row % 2 == 0 && sbi_col % 2 == 0) || - (sbi_row % 2 != 0 && sbi_col % 2 != 0))) { + // If the partition copy is on, compute for every superblock. + if (cpi->sf.copy_partition_flag || + ((sbi_row > 0 && sbi_col > 0) && + (sbi_row < sb_rows - 1 && sbi_col < sb_cols - 1) && + ((sbi_row % 2 == 0 && sbi_col % 2 == 0) || + (sbi_row % 2 != 0 && sbi_col % 2 != 0)))) { num_samples++; avg_sad += cpi->fn_ptr[bsize].sdf(src_y, src_ystride, last_src_y, last_src_ystride);