Move an intra mode pruning to luma search loop
BUG=aomedia:2863
STATS_CHANGED
Change-Id: Ieec9d9c038b0c49874aeb6a78c6d2e71baa5ab25
diff --git a/av1/encoder/intra_mode_search.c b/av1/encoder/intra_mode_search.c
index 2f621d8..7d09d2e 100644
--- a/av1/encoder/intra_mode_search.c
+++ b/av1/encoder/intra_mode_search.c
@@ -861,6 +861,7 @@
const ModeCosts *mode_costs = &x->mode_costs;
const int mode_cost =
mode_costs->mbmode_cost[size_group_lookup[bsize]][mode] + ref_frame_cost;
+ const int skip_ctx = av1_get_skip_txfm_context(xd);
const int is_directional_mode = av1_is_directional_mode(mode);
if (is_directional_mode && av1_use_angle_delta(bsize) &&
@@ -905,6 +906,17 @@
if (rd_stats_y->rate == INT_MAX) return 0;
+ const int mode_cost_y =
+ intra_mode_info_cost_y(cpi, x, mbmi, bsize, mode_cost);
+ const int rate_y = rd_stats_y->skip_txfm
+ ? mode_costs->skip_txfm_cost[skip_ctx][1]
+ : rd_stats_y->rate;
+ const int64_t rdy = RDCOST(x->rdmult, rate_y + mode_cost_y, rd_stats_y->dist);
+ if (best_rd < (INT64_MAX / 2) && rdy > (best_rd + (best_rd >> 2))) {
+ intra_search_state->skip_intra_modes = 1;
+ return 0;
+ }
+
return 1;
}
@@ -912,14 +924,11 @@
const AV1_COMP *cpi, MACROBLOCK *x,
BLOCK_SIZE bsize, RD_STATS *rd_stats,
const RD_STATS *rd_stats_y,
- RD_STATS *rd_stats_uv, int64_t best_rd,
- int mode_cost_y) {
+ RD_STATS *rd_stats_uv, int64_t best_rd) {
const AV1_COMMON *cm = &cpi->common;
MACROBLOCKD *const xd = &x->e_mbd;
MB_MODE_INFO *const mbmi = xd->mi[0];
assert(mbmi->ref_frame[0] == INTRA_FRAME);
- const ModeCosts *mode_costs = &x->mode_costs;
- const int skip_ctx = av1_get_skip_txfm_context(xd);
// TODO(chiyotsai@google.com): Consolidate the chroma search code here with
// the one in av1_search_palette_mode.
@@ -930,15 +939,6 @@
if (intra_search_state->rate_uv_intra == INT_MAX) {
// If no good uv-predictor had been found, search for it.
- const int rate_y = rd_stats_y->skip_txfm
- ? mode_costs->skip_txfm_cost[skip_ctx][1]
- : rd_stats_y->rate;
- const int64_t rdy =
- RDCOST(x->rdmult, rate_y + mode_cost_y, rd_stats_y->dist);
- if (best_rd < (INT64_MAX / 2) && rdy > (best_rd + (best_rd >> 2))) {
- intra_search_state->skip_intra_modes = 1;
- return 0;
- }
const TX_SIZE uv_tx = av1_get_tx_size(AOM_PLANE_U, xd);
av1_rd_pick_intra_sbuv_mode(cpi, x, &intra_search_state->rate_uv_intra,
&intra_search_state->rate_uv_tokenonly,
@@ -1010,6 +1010,8 @@
return INT64_MAX;
}
+ const int mode_cost_y =
+ intra_mode_info_cost_y(cpi, x, mbmi, bsize, mode_cost);
const int intra_y_mode_valid =
handle_intra_y_mode(intra_search_state, cpi, x, bsize, ref_frame_cost,
ctx, rd_stats_y, best_rd);
@@ -1018,15 +1020,13 @@
return INT64_MAX;
}
- const int mode_cost_y =
- intra_mode_info_cost_y(cpi, x, mbmi, bsize, mode_cost);
av1_init_rd_stats(rd_stats);
av1_init_rd_stats(rd_stats_uv);
const int num_planes = av1_num_planes(cm);
if (num_planes > 1) {
const int intra_uv_mode_valid =
handle_intra_uv_mode(intra_search_state, cpi, x, bsize, rd_stats,
- rd_stats_y, rd_stats_uv, best_rd, mode_cost_y);
+ rd_stats_y, rd_stats_uv, best_rd);
if (!intra_uv_mode_valid) {
return INT64_MAX;
}