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];