From: Angie Chiang Date: Wed, 13 Feb 2019 02:58:07 +0000 (-0800) Subject: Add rd_diff_arr to store future blocks' rd diff X-Git-Tag: v1.8.1~215 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8a6f86e5827435b0afd8afb89c04e3dab46628a;p=libvpx Add rd_diff_arr to store future blocks' rd diff Change-Id: Id996c1a427fb22a32b7a521cadf9f1523e5cf068 --- diff --git a/vp9/encoder/vp9_encoder.c b/vp9/encoder/vp9_encoder.c index 2ef3f0e83..ec52d745a 100644 --- a/vp9/encoder/vp9_encoder.c +++ b/vp9/encoder/vp9_encoder.c @@ -2585,6 +2585,7 @@ void vp9_remove_compressor(VP9_COMP *cpi) { vpx_free(cpi->tpl_stats[frame].pyramid_mv_arr[rf_idx][sqr_bsize]); } vpx_free(cpi->tpl_stats[frame].mv_mode_arr[rf_idx]); + vpx_free(cpi->tpl_stats[frame].rd_diff_arr[rf_idx]); } #endif vpx_free(cpi->tpl_stats[frame].tpl_stats_ptr); @@ -6246,12 +6247,12 @@ static int find_best_ref_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, static void predict_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, GF_PICTURE *gf_picture, int frame_idx, TplDepFrame *tpl_frame, int rf_idx, - BLOCK_SIZE bsize, int mi_row, int mi_col, - double *future_rd_diff) { + BLOCK_SIZE bsize, int mi_row, int mi_col) { const int mi_height = num_8x8_blocks_high_lookup[bsize]; const int mi_width = num_8x8_blocks_wide_lookup[bsize]; int tmp_mv_mode_arr[kMvPreCheckSize]; int *mv_mode_arr = tpl_frame->mv_mode_arr[rf_idx]; + double *rd_diff_arr = tpl_frame->rd_diff_arr[rf_idx]; int_mv *select_mv_arr = cpi->select_mv_arr; int_mv tmp_select_mv_arr[kMvPreCheckSize]; int stride = tpl_frame->stride; @@ -6330,9 +6331,9 @@ static void predict_mv_mode(VP9_COMP *cpi, MACROBLOCK *x, } } } - *future_rd_diff = 0; + rd_diff_arr[mi_row * stride + mi_col] = 0; } else { - *future_rd_diff = + rd_diff_arr[mi_row * stride + mi_col] = (no_new_mv_rd - this_no_new_mv_rd) - (new_mv_rd - this_new_mv_rd); } } @@ -6351,7 +6352,6 @@ static void predict_mv_mode_arr(VP9_COMP *cpi, MACROBLOCK *x, int r; for (r = VPXMAX(idx - unit_cols + 1, 0); r <= VPXMIN(idx, unit_rows - 1); ++r) { - double future_rd_diff; // TODO(angiebird): Use this information later. int c = idx - r; int mi_row = r * mi_height; int mi_col = c * mi_width; @@ -6359,7 +6359,7 @@ static void predict_mv_mode_arr(VP9_COMP *cpi, MACROBLOCK *x, assert(mi_row >= 0 && mi_row < tpl_frame->mi_rows); assert(mi_col >= 0 && mi_col < tpl_frame->mi_cols); predict_mv_mode(cpi, x, gf_picture, frame_idx, tpl_frame, rf_idx, bsize, - mi_row, mi_col, &future_rd_diff); + mi_row, mi_col); } } } @@ -6848,6 +6848,11 @@ static void init_tpl_buffer(VP9_COMP *cpi) { cm, cpi->tpl_stats[frame].mv_mode_arr[rf_idx], vpx_calloc(mi_rows * mi_cols * 4, sizeof(*cpi->tpl_stats[frame].mv_mode_arr[rf_idx]))); + vpx_free(cpi->tpl_stats[frame].rd_diff_arr[rf_idx]); + CHECK_MEM_ERROR( + cm, cpi->tpl_stats[frame].rd_diff_arr[rf_idx], + vpx_calloc(mi_rows * mi_cols * 4, + sizeof(*cpi->tpl_stats[frame].rd_diff_arr[rf_idx]))); } #endif vpx_free(cpi->tpl_stats[frame].tpl_stats_ptr); diff --git a/vp9/encoder/vp9_encoder.h b/vp9/encoder/vp9_encoder.h index f571a384f..d1a782bfb 100644 --- a/vp9/encoder/vp9_encoder.h +++ b/vp9/encoder/vp9_encoder.h @@ -327,6 +327,7 @@ typedef struct TplDepFrame { double mv_cost_sum[3]; int_mv *pyramid_mv_arr[3][SQUARE_BLOCK_SIZES]; int *mv_mode_arr[3]; + double *rd_diff_arr[3]; #endif } TplDepFrame;