Refactor rd_try_subblock()
Change-Id: I929951d5a946d0189a12f0d93af1c75b54bc9008
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index ebb6d27..2bf8193 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -2101,34 +2101,29 @@
static int rd_try_subblock(AV1_COMP *const cpi, ThreadData *td,
TileDataEnc *tile_data, TOKENEXTRA **tp, int is_last,
int mi_row, int mi_col, BLOCK_SIZE subsize,
- RD_STATS *best_rdc, RD_STATS *sum_rdc,
- RD_STATS *this_rdc, PARTITION_TYPE partition,
+ int64_t best_rdcost, RD_STATS *sum_rdc,
+ PARTITION_TYPE partition,
PICK_MODE_CONTEXT *prev_ctx,
PICK_MODE_CONTEXT *this_ctx) {
-#define RTS_X_RATE_NOCOEF_ARG
-#define RTS_MAX_RDCOST best_rdc->rdcost
-
MACROBLOCK *const x = &td->mb;
if (cpi->sf.adaptive_motion_search) load_pred_mv(x, prev_ctx);
- const int64_t rdcost_remaining = best_rdc->rdcost == INT64_MAX
- ? INT64_MAX
- : (best_rdc->rdcost - sum_rdc->rdcost);
+ const int64_t rdcost_remaining =
+ best_rdcost == INT64_MAX ? INT64_MAX : (best_rdcost - sum_rdc->rdcost);
+ 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);
- pick_sb_modes(cpi, tile_data, x, mi_row, mi_col, this_rdc,
- RTS_X_RATE_NOCOEF_ARG partition, subsize, this_ctx,
- rdcost_remaining, PICK_MODE_RD);
-
- if (this_rdc->rate == INT_MAX) {
+ if (this_rdc.rate == INT_MAX) {
sum_rdc->rdcost = INT64_MAX;
} else {
- sum_rdc->rate += this_rdc->rate;
- sum_rdc->dist += this_rdc->dist;
- sum_rdc->rdcost += this_rdc->rdcost;
+ sum_rdc->rate += this_rdc.rate;
+ sum_rdc->dist += this_rdc.dist;
+ sum_rdc->rdcost += this_rdc.rdcost;
}
- if (sum_rdc->rdcost >= RTS_MAX_RDCOST) return 0;
+ if (sum_rdc->rdcost >= best_rdcost) return 0;
if (!is_last) {
update_state(cpi, tile_data, td, this_ctx, mi_row, mi_col, subsize, 1);
@@ -2137,9 +2132,6 @@
}
return 1;
-
-#undef RTS_X_RATE_NOCOEF_ARG
-#undef RTS_MAX_RDCOST
}
static void rd_test_partition3(AV1_COMP *const cpi, ThreadData *td,
@@ -2153,20 +2145,20 @@
int mi_row2, int mi_col2, BLOCK_SIZE subsize2) {
MACROBLOCK *const x = &td->mb;
MACROBLOCKD *const xd = &x->e_mbd;
- RD_STATS sum_rdc, this_rdc;
+ RD_STATS sum_rdc;
#define RTP_STX_TRY_ARGS
int pl = partition_plane_context(xd, mi_row, mi_col, bsize);
av1_init_rd_stats(&sum_rdc);
sum_rdc.rate = x->partition_cost[pl][partition];
sum_rdc.rdcost = RDCOST(x->rdmult, sum_rdc.rate, 0);
if (!rd_try_subblock(cpi, td, tile_data, tp, 0, mi_row0, mi_col0, subsize0,
- best_rdc, &sum_rdc, &this_rdc,
- RTP_STX_TRY_ARGS partition, ctx, &ctxs[0]))
+ best_rdc->rdcost, &sum_rdc, RTP_STX_TRY_ARGS partition,
+ ctx, &ctxs[0]))
return;
if (!rd_try_subblock(cpi, td, tile_data, tp, 0, mi_row1, mi_col1, subsize1,
- best_rdc, &sum_rdc, &this_rdc,
- RTP_STX_TRY_ARGS partition, &ctxs[0], &ctxs[1]))
+ best_rdc->rdcost, &sum_rdc, RTP_STX_TRY_ARGS partition,
+ &ctxs[0], &ctxs[1]))
return;
// With the new layout of mixed partitions for PARTITION_HORZ_B and
@@ -2177,8 +2169,8 @@
const int try_block2 = 1;
if (try_block2 &&
!rd_try_subblock(cpi, td, tile_data, tp, 1, mi_row2, mi_col2, subsize2,
- best_rdc, &sum_rdc, &this_rdc,
- RTP_STX_TRY_ARGS partition, &ctxs[1], &ctxs[2]))
+ best_rdc->rdcost, &sum_rdc, RTP_STX_TRY_ARGS partition,
+ &ctxs[1], &ctxs[2]))
return;
if (sum_rdc.rdcost >= best_rdc->rdcost) return;
@@ -4037,7 +4029,7 @@
ctx_this->rd_mode_is_ready = 0;
if (!rd_try_subblock(cpi, td, tile_data, tp, (i == 3), this_mi_row,
- mi_col, subsize, &best_rdc, &sum_rdc, &this_rdc,
+ mi_col, subsize, best_rdc.rdcost, &sum_rdc,
PARTITION_HORZ_4, ctx_prev, ctx_this))
break;
@@ -4092,7 +4084,7 @@
ctx_this->rd_mode_is_ready = 0;
if (!rd_try_subblock(cpi, td, tile_data, tp, (i == 3), mi_row,
- this_mi_col, subsize, &best_rdc, &sum_rdc, &this_rdc,
+ this_mi_col, subsize, best_rdc.rdcost, &sum_rdc,
PARTITION_VERT_4, ctx_prev, ctx_this))
break;