Bug fixes for 2-pass tx-search
Copy blk_skip, use curr_rd
Change-Id: Ie3d37df3b18da1ea4d44a432ab554163e544616a
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 72c4371..048df6a 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -529,6 +529,7 @@
int64_t est_rd_arr[MAX_INTER_MODES];
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES];
bool true_rd_arr[MAX_INTER_MODES];
+ uint8_t blk_skip_arr[MAX_INTER_MODES][MAX_MIB_SIZE * MAX_MIB_SIZE];
RD_STATS rd_cost_arr[MAX_INTER_MODES];
RD_STATS rd_cost_y_arr[MAX_INTER_MODES];
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES];
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 10a92c9..cf503cf 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -860,8 +860,9 @@
static void inter_modes_info_push(InterModesInfo *inter_modes_info,
int mode_rate, int64_t sse, int64_t rd,
- bool true_rd, RD_STATS *rd_cost,
- RD_STATS *rd_cost_y, RD_STATS *rd_cost_uv,
+ bool true_rd, uint8_t *blk_skip,
+ RD_STATS *rd_cost, RD_STATS *rd_cost_y,
+ RD_STATS *rd_cost_uv,
const MB_MODE_INFO *mbmi) {
const int num = inter_modes_info->num;
assert(num < MAX_INTER_MODES);
@@ -870,6 +871,10 @@
inter_modes_info->sse_arr[num] = sse;
inter_modes_info->est_rd_arr[num] = rd;
inter_modes_info->true_rd_arr[num] = true_rd;
+ if (blk_skip != NULL) {
+ memcpy(inter_modes_info->blk_skip_arr[num], blk_skip,
+ sizeof(blk_skip[0]) * MAX_MIB_SIZE * MAX_MIB_SIZE);
+ }
inter_modes_info->rd_cost_arr[num] = *rd_cost;
inter_modes_info->rd_cost_y_arr[num] = *rd_cost_y;
inter_modes_info->rd_cost_uv_arr[num] = *rd_cost_uv;
@@ -9579,14 +9584,14 @@
if (!is_comp_pred) {
assert(curr_sse >= 0);
inter_modes_info_push(inter_modes_info, mode_rate, curr_sse,
- rd_stats->rdcost, false, rd_stats, rd_stats_y,
- rd_stats_uv, mbmi);
+ rd_stats->rdcost, false, NULL, rd_stats,
+ rd_stats_y, rd_stats_uv, mbmi);
}
} else {
assert(curr_sse >= 0);
inter_modes_info_push(inter_modes_info, mode_rate, curr_sse,
- rd_stats->rdcost, false, rd_stats, rd_stats_y,
- rd_stats_uv, mbmi);
+ rd_stats->rdcost, false, NULL, rd_stats,
+ rd_stats_y, rd_stats_uv, mbmi);
}
} else {
if (!txfm_search(cpi, tile_data, x, bsize, mi_row, mi_col, rd_stats,
@@ -9616,7 +9621,7 @@
// structure, since some modes will be conditionally TX searched.
if (do_tx_search == 2) {
inter_modes_info_push(inter_modes_info, rd_stats->rate, rd_stats->sse,
- rd_stats->rdcost, true, rd_stats, rd_stats_y,
+ curr_rd, true, x->blk_skip, rd_stats, rd_stats_y,
rd_stats_uv, mbmi);
}
}
@@ -12974,6 +12979,8 @@
rd_stats = inter_modes_info->rd_cost_arr[data_idx];
rd_stats_y = inter_modes_info->rd_cost_y_arr[data_idx];
rd_stats_uv = inter_modes_info->rd_cost_uv_arr[data_idx];
+ memcpy(x->blk_skip, inter_modes_info->blk_skip_arr[data_idx],
+ sizeof(x->blk_skip[0]) * ctx->num_4x4_blk);
} else {
const int mode_rate = inter_modes_info->mode_rate_arr[data_idx];