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;