Fix inter path for mrc-tx A speed feature was causing the rdloop to skip trying MRC_DCT. I've disabled that speed feature when mrc-tx is enabled and MRC_DCT is allowed for inter blocks. Change-Id: I0affa5f26465539414b2957f8ff983f718863ef1
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index d22719d..d647cfa 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -4623,6 +4623,12 @@ tmp_dist = av1_block_error(coeff, dqcoeff, buffer_length, &tmp_sse) >> shift; +#if CONFIG_MRC_TX + if (tx_type == MRC_DCT && !xd->mi[0]->mbmi.valid_mrc_mask) { + av1_invalid_rd_stats(rd_stats); + return; + } +#endif // CONFIG_MRC_TX if ( #if CONFIG_DIST_8X8 sub8x8tx_in_gte8x8blk_in_plane0 || @@ -4776,8 +4782,13 @@ if (cpi->common.tx_mode == TX_MODE_SELECT || tx_size == TX_4X4) { inter_tx_size[0][0] = tx_size; +#if CONFIG_MRC_TX + if (tx_size == TX_32X32 && mbmi->tx_type != DCT_DCT && + rd_stats_stack[block32].rate != INT_MAX && !USE_MRC_INTER) { +#else if (tx_size == TX_32X32 && mbmi->tx_type != DCT_DCT && rd_stats_stack[block32].rate != INT_MAX) { +#endif // CONFIG_MRC_TX *rd_stats = rd_stats_stack[block32]; p->eobs[block] = !rd_stats->skip; x->blk_skip[plane][blk_row * bw + blk_col] = rd_stats->skip; @@ -4788,6 +4799,7 @@ rd_stats_stack[block32] = *rd_stats; } } + if (rd_stats->rate == INT_MAX) return; if ((RDCOST(x->rdmult, rd_stats->rate, rd_stats->dist) >= RDCOST(x->rdmult, zero_blk_rate, rd_stats->sse) || @@ -4842,6 +4854,7 @@ av1_tx_block_rd_b(cpi, x, quarter_txsize, 0, 0, plane, 0, plane_bsize, pta, ptl, &rd_stats_qttx); + if (rd_stats->rate == INT_MAX) return; tx_size_ctx = txsize_sqr_map[quarter_txsize]; coeff_ctx = get_entropy_context(quarter_txsize, pta, ptl); @@ -4872,6 +4885,8 @@ plane, block_offset_qttx, plane_bsize, pta, ptl, &rd_stats_tmp); + if (rd_stats->rate == INT_MAX) return; + av1_set_txb_context(x, plane, 0, quarter_txsize, pta, ptl); coeff_ctx = get_entropy_context(quarter_txsize, pta + blk_col_offset, ptl + blk_row_offset); @@ -5171,6 +5186,10 @@ mi_height != mi_width, plane_bsize, ctxa, ctxl, tx_above, tx_left, &pn_rd_stats, ref_best_rd - this_rd, &is_cost_valid, rd_stats_stack); + if (pn_rd_stats.rate == INT_MAX) { + av1_invalid_rd_stats(rd_stats); + return; + } av1_merge_rd_stats(rd_stats, &pn_rd_stats); this_rd += AOMMIN(RDCOST(x->rdmult, pn_rd_stats.rate, pn_rd_stats.dist), RDCOST(x->rdmult, 0, pn_rd_stats.sse));