rtc: Remove blk_skip from best_mode Copy directly into ctx, save some memset/memcp, and remove unneeded code. Also for intra modes: only do the memset once, if intra mode is selected as best mode. bit-exact change, small IC% gain ~0.1-0.2% for speed 10 rtc_derf. Change-Id: I76f5fb7f917f896e73e57ad368ea584284e27c85
diff --git a/av1/encoder/nonrd_opt.c b/av1/encoder/nonrd_opt.c index 4b49609..651ca43 100644 --- a/av1/encoder/nonrd_opt.c +++ b/av1/encoder/nonrd_opt.c
@@ -926,5 +926,8 @@ sizeof(x->txfm_search_info.blk_skip[0]) * ctx->num_4x4_blk); } } + if (best_pickmode->best_ref_frame == INTRA_FRAME) + memset(ctx->blk_skip, 0, + sizeof(x->txfm_search_info.blk_skip[0]) * ctx->num_4x4_blk); mi->tx_size = best_pickmode->best_tx_size; }
diff --git a/av1/encoder/nonrd_opt.h b/av1/encoder/nonrd_opt.h index e834e99..7948c78 100644 --- a/av1/encoder/nonrd_opt.h +++ b/av1/encoder/nonrd_opt.h
@@ -50,7 +50,6 @@ MOTION_MODE best_motion_mode; WarpedMotionParams wm_params; int num_proj_ref; - uint8_t blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE]; PALETTE_MODE_INFO pmi; int64_t best_sse; } BEST_PICKMODE;
diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c index e440610..155c466 100644 --- a/av1/encoder/nonrd_pickmode.c +++ b/av1/encoder/nonrd_pickmode.c
@@ -70,7 +70,6 @@ bp->best_motion_mode = SIMPLE_TRANSLATION; bp->num_proj_ref = 0; av1_zero(bp->wm_params); - av1_zero(bp->blk_skip); av1_zero(bp->pmi); } @@ -94,7 +93,7 @@ best_pickmode->best_mode_initial_skip_flag = (nonskip_rdc->rate == INT_MAX && search_state->this_rdc.skip_txfm); if (!best_pickmode->best_mode_skip_txfm) { - memcpy(best_pickmode->blk_skip, txfm_info->blk_skip, + memcpy(ctx->blk_skip, txfm_info->blk_skip, sizeof(txfm_info->blk_skip[0]) * ctx->num_4x4_blk); } } @@ -2948,7 +2947,7 @@ search_state->best_rdc.rdcost = idx_rdcost; best_pickmode->best_mode_skip_txfm = idtx_rdc.skip_txfm; if (!idtx_rdc.skip_txfm) { - memcpy(best_pickmode->blk_skip, txfm_info->blk_skip, + memcpy(ctx->blk_skip, txfm_info->blk_skip, sizeof(txfm_info->blk_skip[0]) * ctx->num_4x4_blk); } xd->tx_type_map[0] = best_pickmode->tx_type; @@ -3182,9 +3181,6 @@ inter_pred_params_sr.conv_params = get_conv_params(/*do_average=*/0, AOM_PLANE_Y, xd->bd); - memset(txfm_info->blk_skip, 0, - sizeof(txfm_info->blk_skip[0]) * ctx->num_4x4_blk); - for (int idx = 0; idx < num_inter_modes + tot_num_comp_modes; ++idx) { // If we are at the first compound mode, and the single modes already // perform well, then end the search. @@ -3329,16 +3325,6 @@ memset(ctx->blk_skip, 0, sizeof(ctx->blk_skip[0]) * ctx->num_4x4_blk); } else { txfm_info->skip_txfm = best_pickmode->best_mode_skip_txfm; - if (!txfm_info->skip_txfm) { - // For inter modes: copy blk_skip from best_pickmode. - // If palette or intra mode was selected as best then - // blk_skip is already copied into the ctx. - // TODO(marpan): Look into removing blk_skip from best_pickmode - // and just copy directly into the ctx for inter. - if (best_pickmode->best_mode >= INTRA_MODE_END) - memcpy(ctx->blk_skip, best_pickmode->blk_skip, - sizeof(best_pickmode->blk_skip[0]) * ctx->num_4x4_blk); - } } if (has_second_ref(mi)) { mi->comp_group_idx = 0;