Remove tx_type in MB_MODE_INFO Not needed anymore as it's replaced by txk_type[]. Change-Id: I4381de816cd59d20a4c964aa566b2c74fb09fbec
diff --git a/av1/common/blockd.h b/av1/common/blockd.h index 1331b5f..62bd12b 100644 --- a/av1/common/blockd.h +++ b/av1/common/blockd.h
@@ -247,7 +247,6 @@ InterpFilters interp_filters; MV_REFERENCE_FRAME ref_frame[2]; - TX_TYPE tx_type; TX_TYPE txk_type[TXK_TYPE_BUF_LEN]; FILTER_INTRA_MODE_INFO filter_intra_mode_info;
diff --git a/av1/decoder/inspection.c b/av1/decoder/inspection.c index fc31564..13bfed0 100644 --- a/av1/decoder/inspection.c +++ b/av1/decoder/inspection.c
@@ -99,7 +99,8 @@ mi->filter[1] = av1_extract_interp_filter(mbmi->interp_filters, 1); mi->dual_filter_type = mi->filter[0] * 3 + mi->filter[1]; // Transform - mi->tx_type = mbmi->tx_type; + // TODO(anyone): extract tx type info from mbmi->txk_type[]. + mi->tx_type = DCT_DCT; mi->tx_size = mbmi->tx_size; mi->cdef_level =
diff --git a/av1/encoder/block.h b/av1/encoder/block.h index 6ae1c69..b766aac 100644 --- a/av1/encoder/block.h +++ b/av1/encoder/block.h
@@ -102,7 +102,6 @@ } PALETTE_BUFFER; typedef struct { - TX_TYPE tx_type; TX_SIZE tx_size; TX_SIZE min_tx_size; TX_SIZE inter_tx_size[INTER_TX_SIZE_BUF_LEN];
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index a8c2b1a..62ddafa 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -2286,7 +2286,7 @@ static int64_t txfm_yrd(const AV1_COMP *const cpi, MACROBLOCK *x, RD_STATS *rd_stats, int64_t ref_best_rd, BLOCK_SIZE bs, - TX_TYPE tx_type, TX_SIZE tx_size) { + TX_SIZE tx_size) { const AV1_COMMON *const cm = &cpi->common; MACROBLOCKD *const xd = &x->e_mbd; MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; @@ -2306,7 +2306,6 @@ s0 = x->skip_cost[skip_ctx][0]; s1 = x->skip_cost[skip_ctx][1]; - mbmi->tx_type = tx_type; mbmi->tx_size = tx_size; if (skip_invalid_tx_size_for_filter_intra(mbmi, AOM_PLANE_Y, rd_stats)) { return INT64_MAX; @@ -2369,8 +2368,8 @@ int64_t *sse, int64_t ref_best_rd) { RD_STATS rd_stats; x->rd_model = LOW_TXFM_RD; - int64_t rd = txfm_yrd(cpi, x, &rd_stats, ref_best_rd, bs, DCT_DCT, - max_txsize_lookup[bs]); + int64_t rd = + txfm_yrd(cpi, x, &rd_stats, ref_best_rd, bs, max_txsize_lookup[bs]); x->rd_model = FULL_TXFM_RD; *r = rd_stats.rate; *d = rd_stats.dist; @@ -2385,14 +2384,7 @@ const AV1_COMMON *const cm = &cpi->common; MACROBLOCKD *const xd = &x->e_mbd; MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; - TX_TYPE tx_type, best_tx_type = DCT_DCT; - int64_t this_rd, best_rd = INT64_MAX; - const int skip_ctx = av1_get_skip_context(xd); - int s0 = x->skip_cost[skip_ctx][0]; - int s1 = x->skip_cost[skip_ctx][1]; const int is_inter = is_inter_block(mbmi); - av1_invalid_rd_stats(rd_stats); - mbmi->tx_size = tx_size_from_tx_mode(bs, cm->tx_mode); mbmi->min_tx_size = mbmi->tx_size; const TxSetType tx_set_type = @@ -2401,58 +2393,8 @@ if (skip_invalid_tx_size_for_filter_intra(mbmi, AOM_PLANE_Y, rd_stats)) { return; } - if (get_ext_tx_types(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used) > - 1 && - !xd->lossless[mbmi->segment_id]) { - for (tx_type = DCT_DCT; tx_type < TX_TYPES; ++tx_type) { - if (!av1_ext_tx_used[tx_set_type][tx_type]) continue; - RD_STATS this_rd_stats; - if (is_inter) { - if (x->use_default_inter_tx_type && - tx_type != get_default_tx_type(0, xd, mbmi->tx_size)) - continue; - if (cpi->sf.tx_type_search.prune_mode > NO_PRUNE) { - if (!do_tx_type_search(tx_type, x->tx_search_prune[tx_set_type], - cpi->sf.tx_type_search.prune_mode)) - continue; - } - } else { - if (x->use_default_intra_tx_type && - tx_type != get_default_tx_type(0, xd, mbmi->tx_size)) - continue; - } - - mbmi->tx_type = tx_type; - - txfm_rd_in_plane(x, cpi, &this_rd_stats, ref_best_rd, AOM_PLANE_Y, bs, - mbmi->tx_size, cpi->sf.use_fast_coef_costing); - - if (this_rd_stats.rate == INT_MAX) continue; - - if (this_rd_stats.skip) { - this_rd = RDCOST(x->rdmult, s1, this_rd_stats.sse); - } else { - this_rd_stats.rate += av1_tx_type_cost(cm, x, xd, bs, AOM_PLANE_Y, - mbmi->tx_size, tx_type); - this_rd = - RDCOST(x->rdmult, this_rd_stats.rate + s0, this_rd_stats.dist); - } - if (is_inter_block(mbmi) && !xd->lossless[mbmi->segment_id] && - !this_rd_stats.skip) - this_rd = AOMMIN(this_rd, RDCOST(x->rdmult, s1, this_rd_stats.sse)); - - if (this_rd < best_rd) { - best_rd = this_rd; - best_tx_type = mbmi->tx_type; - *rd_stats = this_rd_stats; - } - } - } else { - mbmi->tx_type = DCT_DCT; - txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, AOM_PLANE_Y, bs, - mbmi->tx_size, cpi->sf.use_fast_coef_costing); - } - mbmi->tx_type = best_tx_type; + txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, AOM_PLANE_Y, bs, + mbmi->tx_size, cpi->sf.use_fast_coef_costing); // Reset the pruning flags. av1_zero(x->tx_search_prune); } @@ -2464,7 +2406,6 @@ MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; mbmi->tx_size = TX_4X4; - mbmi->tx_type = DCT_DCT; mbmi->min_tx_size = TX_4X4; if (skip_invalid_tx_size_for_filter_intra(mbmi, AOM_PLANE_Y, rd_stats)) { @@ -2503,7 +2444,6 @@ int64_t best_rd = INT64_MAX, last_rd = INT64_MAX; const TX_SIZE max_rect_tx_size = get_max_rect_tx_size(bs); TX_SIZE best_tx_size = max_rect_tx_size; - TX_TYPE best_tx_type = DCT_DCT; TX_TYPE best_txk_type[TXK_TYPE_BUF_LEN]; uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE]; const int n4 = bsize_to_num_blk(bs); @@ -2536,7 +2476,7 @@ if (skip_txfm_search(cpi, x, bs, tx_type, n)) continue; if (mbmi->ref_mv_idx > 0) x->rd_model = LOW_TXFM_RD; - rd = txfm_yrd(cpi, x, &this_rd_stats, ref_best_rd, bs, tx_type, n); + rd = txfm_yrd(cpi, x, &this_rd_stats, ref_best_rd, bs, n); x->rd_model = FULL_TXFM_RD; // Early termination in transform size search. @@ -2553,7 +2493,6 @@ memcpy(best_txk_type, mbmi->txk_type, sizeof(best_txk_type[0]) * TXK_TYPE_BUF_LEN); memcpy(best_blk_skip, x->blk_skip[0], sizeof(best_blk_skip[0]) * n4); - best_tx_type = tx_type; best_tx_size = n; best_rd = rd; *rd_stats = this_rd_stats; @@ -2566,7 +2505,6 @@ if (n == TX_4X4) break; } mbmi->tx_size = best_tx_size; - mbmi->tx_type = best_tx_type; memcpy(mbmi->txk_type, best_txk_type, sizeof(best_txk_type[0]) * TXK_TYPE_BUF_LEN); memcpy(x->blk_skip[0], best_blk_skip, sizeof(best_blk_skip[0]) * n4); @@ -3018,7 +2956,6 @@ FILTER_INTRA_MODE mode; TX_SIZE best_tx_size = TX_8X8; FILTER_INTRA_MODE_INFO filter_intra_mode_info; - TX_TYPE best_tx_type; TX_TYPE best_txk_type[TXK_TYPE_BUF_LEN]; (void)ctx; av1_zero(filter_intra_mode_info); @@ -3046,7 +2983,6 @@ *best_rd = this_rd; best_tx_size = mbmi->tx_size; filter_intra_mode_info = mbmi->filter_intra_mode_info; - best_tx_type = mbmi->tx_type; memcpy(best_txk_type, mbmi->txk_type, sizeof(best_txk_type[0]) * TXK_TYPE_BUF_LEN); memcpy(ctx->blk_skip[0], x->blk_skip[0], @@ -3063,7 +2999,6 @@ mbmi->mode = DC_PRED; mbmi->tx_size = best_tx_size; mbmi->filter_intra_mode_info = filter_intra_mode_info; - mbmi->tx_type = best_tx_type; memcpy(mbmi->txk_type, best_txk_type, sizeof(best_txk_type[0]) * TXK_TYPE_BUF_LEN); return 1; @@ -3078,8 +3013,8 @@ const AV1_COMP *const cpi, MACROBLOCK *x, BLOCK_SIZE bsize, int mode_cost, int64_t best_rd_in, int8_t angle_delta, int max_angle_delta, int *rate, RD_STATS *rd_stats, int *best_angle_delta, TX_SIZE *best_tx_size, - TX_TYPE *best_tx_type, int64_t *best_rd, int64_t *best_model_rd, - TX_TYPE *best_txk_type, uint8_t *best_blk_skip) { + int64_t *best_rd, int64_t *best_model_rd, TX_TYPE *best_txk_type, + uint8_t *best_blk_skip) { int this_rate; RD_STATS tokenonly_rd_stats; int64_t this_rd, this_model_rd; @@ -3114,7 +3049,6 @@ *best_rd = this_rd; *best_angle_delta = mbmi->angle_delta[PLANE_TYPE_Y]; *best_tx_size = mbmi->tx_size; - *best_tx_type = mbmi->tx_type; *rate = this_rate; rd_stats->rate = tokenonly_rd_stats.rate; rd_stats->dist = tokenonly_rd_stats.dist; @@ -3138,7 +3072,6 @@ int first_try = 1; int64_t this_rd, best_rd_in, rd_cost[2 * (MAX_ANGLE_DELTA + 2)]; TX_SIZE best_tx_size = mbmi->tx_size; - TX_TYPE best_tx_type = mbmi->tx_type; const int n4 = bsize_to_num_blk(bsize); TX_TYPE best_txk_type[TXK_TYPE_BUF_LEN]; uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE]; @@ -3153,7 +3086,7 @@ this_rd = calc_rd_given_intra_angle( cpi, x, bsize, mode_cost, best_rd_in, (1 - 2 * i) * angle_delta, MAX_ANGLE_DELTA, rate, rd_stats, &best_angle_delta, &best_tx_size, - &best_tx_type, &best_rd, best_model_rd, best_txk_type, best_blk_skip); + &best_rd, best_model_rd, best_txk_type, best_blk_skip); rd_cost[2 * angle_delta + i] = this_rd; if (first_try && this_rd == INT64_MAX) return best_rd; first_try = 0; @@ -3174,18 +3107,16 @@ rd_cost[2 * (angle_delta - 1) + i] > rd_thresh) skip_search = 1; if (!skip_search) { - calc_rd_given_intra_angle(cpi, x, bsize, mode_cost, best_rd, - (1 - 2 * i) * angle_delta, MAX_ANGLE_DELTA, - rate, rd_stats, &best_angle_delta, - &best_tx_size, &best_tx_type, &best_rd, - best_model_rd, best_txk_type, best_blk_skip); + calc_rd_given_intra_angle( + cpi, x, bsize, mode_cost, best_rd, (1 - 2 * i) * angle_delta, + MAX_ANGLE_DELTA, rate, rd_stats, &best_angle_delta, &best_tx_size, + &best_rd, best_model_rd, best_txk_type, best_blk_skip); } } } mbmi->tx_size = best_tx_size; mbmi->angle_delta[PLANE_TYPE_Y] = best_angle_delta; - mbmi->tx_type = best_tx_type; memcpy(mbmi->txk_type, best_txk_type, sizeof(*best_txk_type) * TXK_TYPE_BUF_LEN); memcpy(x->blk_skip[0], best_blk_skip, sizeof(best_blk_skip[0]) * n4); @@ -3935,11 +3866,9 @@ static int64_t select_tx_size_fix_type(const AV1_COMP *cpi, MACROBLOCK *x, RD_STATS *rd_stats, BLOCK_SIZE bsize, - int mi_row, int mi_col, - int64_t ref_best_rd, TX_TYPE tx_type, + int64_t ref_best_rd, TX_SIZE_RD_INFO_NODE *rd_info_tree) { const int fast_tx_search = cpi->sf.tx_size_search_method > USE_FULL_RD; - const AV1_COMMON *const cm = &cpi->common; MACROBLOCKD *const xd = &x->e_mbd; MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; const int is_inter = is_inter_block(mbmi); @@ -3956,11 +3885,6 @@ // will use more complex search given that the transform partitions have // already been decided. - (void)cm; - (void)mi_row; - (void)mi_col; - - mbmi->tx_type = tx_type; int64_t rd_thresh = ref_best_rd; if (fast_tx_search && rd_thresh < INT64_MAX) { if (INT64_MAX - rd_thresh > (rd_thresh >> 3)) rd_thresh += (rd_thresh >> 3); @@ -4194,7 +4118,6 @@ const MACROBLOCKD *const xd = &x->e_mbd; const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; tx_rd_info->hash_value = hash; - tx_rd_info->tx_type = mbmi->tx_type; tx_rd_info->tx_size = mbmi->tx_size; tx_rd_info->min_tx_size = mbmi->min_tx_size; memcpy(tx_rd_info->blk_skip, x->blk_skip[0], @@ -4208,7 +4131,6 @@ RD_STATS *const rd_stats, MACROBLOCK *const x) { MACROBLOCKD *const xd = &x->e_mbd; MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; - mbmi->tx_type = tx_rd_info->tx_type; mbmi->tx_size = tx_rd_info->tx_size; mbmi->min_tx_size = tx_rd_info->min_tx_size; memcpy(x->blk_skip[0], tx_rd_info->blk_skip, @@ -4440,7 +4362,6 @@ MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; const int n4 = bsize_to_num_blk(bsize); const TX_SIZE tx_size = get_max_rect_tx_size(bsize); - mbmi->tx_type = DCT_DCT; memset(mbmi->txk_type, DCT_DCT, sizeof(mbmi->txk_type[0]) * TXK_TYPE_BUF_LEN); memset(mbmi->inter_tx_size, tx_size, sizeof(mbmi->inter_tx_size)); mbmi->tx_size = tx_size; @@ -4479,14 +4400,11 @@ MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi; int64_t rd = INT64_MAX; int64_t best_rd = INT64_MAX; - TX_TYPE tx_type, best_tx_type = DCT_DCT; const int is_inter = is_inter_block(mbmi); TX_SIZE best_tx_size[INTER_TX_SIZE_BUF_LEN] = { 0 }; TX_SIZE best_tx = max_txsize_rect_lookup[bsize]; TX_SIZE best_min_tx_size = TX_SIZES_ALL; uint8_t best_blk_skip[MAX_MIB_SIZE * MAX_MIB_SIZE]; - TX_TYPE txk_start = DCT_DCT; - TX_TYPE txk_end = DCT_DCT + 1; const int n4 = bsize_to_num_blk(bsize); // Get the tx_size 1 level down const TX_SIZE min_tx_size = sub_tx_size_map[1][max_txsize_rect_lookup[bsize]]; @@ -4540,26 +4458,21 @@ int found = 0; - for (tx_type = txk_start; tx_type < txk_end; ++tx_type) { - RD_STATS this_rd_stats; - av1_init_rd_stats(&this_rd_stats); - if (!av1_ext_tx_used[tx_set_type][tx_type]) continue; + RD_STATS this_rd_stats; + av1_init_rd_stats(&this_rd_stats); - rd = select_tx_size_fix_type(cpi, x, &this_rd_stats, bsize, mi_row, mi_col, - ref_best_rd, tx_type, - found_rd_info ? matched_rd_info : NULL); + rd = select_tx_size_fix_type(cpi, x, &this_rd_stats, bsize, ref_best_rd, + found_rd_info ? matched_rd_info : NULL); - ref_best_rd = AOMMIN(rd, ref_best_rd); - if (rd < best_rd) { - best_rd = rd; - *rd_stats = this_rd_stats; - best_tx_type = mbmi->tx_type; - best_tx = mbmi->tx_size; - best_min_tx_size = mbmi->min_tx_size; - memcpy(best_blk_skip, x->blk_skip[0], sizeof(best_blk_skip[0]) * n4); - found = 1; - av1_copy(best_tx_size, mbmi->inter_tx_size); - } + ref_best_rd = AOMMIN(rd, ref_best_rd); + if (rd < best_rd) { + best_rd = rd; + *rd_stats = this_rd_stats; + best_tx = mbmi->tx_size; + best_min_tx_size = mbmi->min_tx_size; + memcpy(best_blk_skip, x->blk_skip[0], sizeof(best_blk_skip[0]) * n4); + found = 1; + av1_copy(best_tx_size, mbmi->inter_tx_size); } // Reset the pruning flags. @@ -4573,7 +4486,6 @@ // We found a candidate transform to use. Copy our results from the "best" // array into mbmi. - mbmi->tx_type = best_tx_type; av1_copy(mbmi->inter_tx_size, best_tx_size); mbmi->tx_size = best_tx; mbmi->min_tx_size = best_min_tx_size; @@ -9308,7 +9220,6 @@ RD_STATS rd_stats_y_fi; int filter_intra_selected_flag = 0; TX_SIZE best_tx_size = mbmi->tx_size; - TX_TYPE best_tx_type = mbmi->tx_type; TX_TYPE best_txk_type[TXK_TYPE_BUF_LEN]; memcpy(best_txk_type, mbmi->txk_type, sizeof(*best_txk_type) * TXK_TYPE_BUF_LEN); @@ -9338,7 +9249,6 @@ if (this_rd_tmp < best_rd_tmp) { best_tx_size = mbmi->tx_size; - best_tx_type = mbmi->tx_type; memcpy(best_txk_type, mbmi->txk_type, sizeof(*best_txk_type) * TXK_TYPE_BUF_LEN); memcpy(best_blk_skip, x->blk_skip[0], @@ -9354,7 +9264,6 @@ } mbmi->tx_size = best_tx_size; - mbmi->tx_type = best_tx_type; memcpy(mbmi->txk_type, best_txk_type, sizeof(*best_txk_type) * TXK_TYPE_BUF_LEN); memcpy(x->blk_skip[0], best_blk_skip, @@ -9915,7 +9824,6 @@ if (RDCOST(x->rdmult, best_rate_y + best_rate_uv, rd_cost->dist) > RDCOST(x->rdmult, rd_stats_y.rate + rd_stats_uv.rate, (rd_stats_y.dist + rd_stats_uv.dist))) { - best_mbmode.tx_type = mbmi->tx_type; best_mbmode.tx_size = mbmi->tx_size; av1_copy(best_mbmode.inter_tx_size, mbmi->inter_tx_size); for (i = 0; i < num_planes; ++i)