AV1 RT: Refactor pick_mode_sb
We now have a separate path to nonrd_pick_mode so we don't need to pass
extra parameter to common pick_mode_sb as it is only called in RDO case
Change-Id: If24fd7742947518f7206f7635528bd12118dd997
diff --git a/av1/encoder/partition_search.c b/av1/encoder/partition_search.c
index a56aba1..2bcaa95 100644
--- a/av1/encoder/partition_search.c
+++ b/av1/encoder/partition_search.c
@@ -568,8 +568,6 @@
* \param[in] ctx Pointer to structure holding coding contexts and
* chosen modes for the current block
* \param[in] best_rd Upper bound of rd cost of a valid partition
- * \param[in] pick_mode_type A code indicating mode search strategy:
- * PICK_MODE_RD, or PICK_MODE_NONRD
*
* \return Nothing is returned. Instead, the chosen modes and contexts necessary
* for reconstruction are stored in ctx, the rate-distortion stats are stored in
@@ -580,7 +578,7 @@
MACROBLOCK *const x, int mi_row, int mi_col,
RD_STATS *rd_cost, PARTITION_TYPE partition,
BLOCK_SIZE bsize, PICK_MODE_CONTEXT *ctx,
- RD_STATS best_rd, int pick_mode_type) {
+ RD_STATS best_rd) {
if (best_rd.rdcost < 0) {
ctx->rd_stats.rdcost = INT64_MAX;
ctx->rd_stats.skip_txfm = 0;
@@ -669,15 +667,7 @@
#if CONFIG_COLLECT_COMPONENT_TIMING
start_timing(cpi, av1_rd_pick_intra_mode_sb_time);
#endif
- switch (pick_mode_type) {
- case PICK_MODE_RD:
- av1_rd_pick_intra_mode_sb(cpi, x, rd_cost, bsize, ctx, best_rd.rdcost);
- break;
- case PICK_MODE_NONRD:
- hybrid_intra_mode_search(cpi, x, rd_cost, bsize, ctx);
- break;
- default: assert(0 && "Unknown pick mode type.");
- }
+ av1_rd_pick_intra_mode_sb(cpi, x, rd_cost, bsize, ctx, best_rd.rdcost);
#if CONFIG_COLLECT_COMPONENT_TIMING
end_timing(cpi, av1_rd_pick_intra_mode_sb_time);
#endif
@@ -689,17 +679,8 @@
av1_rd_pick_inter_mode_sb_seg_skip(cpi, tile_data, x, mi_row, mi_col,
rd_cost, bsize, ctx, best_rd.rdcost);
} else {
- // TODO(kyslov): do the same for pick_inter_mode_sb_seg_skip
- switch (pick_mode_type) {
- case PICK_MODE_RD:
- av1_rd_pick_inter_mode_sb(cpi, tile_data, x, rd_cost, bsize, ctx,
- best_rd.rdcost);
- break;
- case PICK_MODE_NONRD:
- av1_nonrd_pick_inter_mode_sb(cpi, tile_data, x, rd_cost, bsize, ctx);
- break;
- default: assert(0 && "Unknown pick mode type.");
- }
+ av1_rd_pick_inter_mode_sb(cpi, tile_data, x, rd_cost, bsize, ctx,
+ best_rd.rdcost);
}
#if CONFIG_COLLECT_COMPONENT_TIMING
end_timing(cpi, av1_rd_pick_inter_mode_sb_time);
@@ -1560,7 +1541,7 @@
mi_col + hbs < mi_params->mi_cols) {
pc_tree->partitioning = PARTITION_NONE;
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, &none_rdc,
- PARTITION_NONE, bsize, ctx_none, invalid_rdc, PICK_MODE_RD);
+ PARTITION_NONE, bsize, ctx_none, invalid_rdc);
if (none_rdc.rate < INT_MAX) {
none_rdc.rate += mode_costs->partition_cost[pl][PARTITION_NONE];
@@ -1580,7 +1561,7 @@
switch (partition) {
case PARTITION_NONE:
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, &last_part_rdc,
- PARTITION_NONE, bsize, ctx_none, invalid_rdc, PICK_MODE_RD);
+ PARTITION_NONE, bsize, ctx_none, invalid_rdc);
break;
case PARTITION_HORZ:
for (int i = 0; i < SUB_PARTITIONS_RECT; ++i) {
@@ -1589,7 +1570,7 @@
}
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, &last_part_rdc,
PARTITION_HORZ, subsize, pc_tree->horizontal[0],
- invalid_rdc, PICK_MODE_RD);
+ invalid_rdc);
if (last_part_rdc.rate != INT_MAX && bsize >= BLOCK_8X8 &&
mi_row + hbs < mi_params->mi_rows) {
RD_STATS tmp_rdc;
@@ -1600,7 +1581,7 @@
NULL);
pick_sb_modes(cpi, tile_data, x, mi_row + hbs, mi_col, &tmp_rdc,
PARTITION_HORZ, subsize, pc_tree->horizontal[1],
- invalid_rdc, PICK_MODE_RD);
+ invalid_rdc);
if (tmp_rdc.rate == INT_MAX || tmp_rdc.dist == INT64_MAX) {
av1_invalid_rd_stats(&last_part_rdc);
break;
@@ -1616,8 +1597,7 @@
av1_alloc_pmc(cm, subsize, &td->shared_coeff_buf);
}
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, &last_part_rdc,
- PARTITION_VERT, subsize, pc_tree->vertical[0], invalid_rdc,
- PICK_MODE_RD);
+ PARTITION_VERT, subsize, pc_tree->vertical[0], invalid_rdc);
if (last_part_rdc.rate != INT_MAX && bsize >= BLOCK_8X8 &&
mi_col + hbs < mi_params->mi_cols) {
RD_STATS tmp_rdc;
@@ -1628,8 +1608,7 @@
NULL);
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col + hbs, &tmp_rdc,
PARTITION_VERT, subsize,
- pc_tree->vertical[bsize > BLOCK_8X8], invalid_rdc,
- PICK_MODE_RD);
+ pc_tree->vertical[bsize > BLOCK_8X8], invalid_rdc);
if (tmp_rdc.rate == INT_MAX || tmp_rdc.dist == INT64_MAX) {
av1_invalid_rd_stats(&last_part_rdc);
break;
@@ -1718,7 +1697,7 @@
av1_alloc_pmc(cm, split_subsize, &td->shared_coeff_buf);
pick_sb_modes(cpi, tile_data, x, mi_row + y_idx, mi_col + x_idx, &tmp_rdc,
PARTITION_SPLIT, split_subsize, pc_tree->split[i]->none,
- invalid_rdc, PICK_MODE_RD);
+ invalid_rdc);
av1_restore_context(x, &x_ctx, mi_row, mi_col, bsize, num_planes);
if (tmp_rdc.rate == INT_MAX || tmp_rdc.dist == INT64_MAX) {
@@ -2224,7 +2203,7 @@
av1_rd_stats_subtraction(x->rdmult, &best_rdcost, sum_rdc, &rdcost_remaining);
RD_STATS this_rdc;
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, &this_rdc, partition,
- subsize, this_ctx, rdcost_remaining, PICK_MODE_RD);
+ subsize, this_ctx, rdcost_remaining);
if (this_rdc.rate == INT_MAX) {
sum_rdc->rdcost = INT64_MAX;
@@ -2457,8 +2436,7 @@
// Obtain the best mode for the partition sub-block.
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, &part_search_state->this_rdc,
- partition_type, bsize, cur_partition_ctx, best_remain_rdcost,
- PICK_MODE_RD);
+ partition_type, bsize, cur_partition_ctx, best_remain_rdcost);
av1_rd_cost_update(x->rdmult, &part_search_state->this_rdc);
// Update the partition rd cost with the current sub-block rd.
@@ -3178,7 +3156,7 @@
#endif
// PARTITION_NONE evaluation and cost update.
pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, this_rdc, PARTITION_NONE,
- bsize, pc_tree->none, best_remain_rdcost, PICK_MODE_RD);
+ bsize, pc_tree->none, best_remain_rdcost);
av1_rd_cost_update(x->rdmult, this_rdc);
#if CONFIG_COLLECT_PARTITION_STATS