Optimze av1_get_tx_type usage Remove redudent av1_get_tx_type usage speed up about %0.3~%0.7 with out RD change test sequence: BasketballDrill_832x480_50.y4m test command line:./aomenc --cpu-used=1 --psnr -D \ -q --end-usage=vbr --target-bitrate=1200 --limit=20 \ BasketballDrill_832x480_50.y4m -otest.webm Change-Id: I799ed7c2d63b1312cf79782ba0d58928f1ee9e45
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c index 4d4802b..a3b8a6f 100644 --- a/av1/encoder/encodetxb.c +++ b/av1/encoder/encodetxb.c
@@ -792,9 +792,8 @@ } int av1_cost_coeffs_txb(const AV1_COMMON *const cm, const MACROBLOCK *x, - const int plane, const int blk_row, const int blk_col, - const int block, const TX_SIZE tx_size, - const TXB_CTX *const txb_ctx) { + const int plane, const int block, const TX_SIZE tx_size, + const TX_TYPE tx_type, const TXB_CTX *const txb_ctx) { const struct macroblock_plane *p = &x->plane[plane]; const int eob = p->eobs[block]; const TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size); @@ -806,8 +805,6 @@ } const MACROBLOCKD *const xd = &x->e_mbd; - const TX_TYPE tx_type = av1_get_tx_type(plane_type, xd, blk_row, blk_col, - tx_size, cm->reduced_tx_set_used); const TX_CLASS tx_class = tx_type_to_class[tx_type]; #define WAREHOUSE_EFFICIENTS_TXB_CASE(tx_class_literal) \
diff --git a/av1/encoder/encodetxb.h b/av1/encoder/encodetxb.h index aa847ad..c083aa5 100644 --- a/av1/encoder/encodetxb.h +++ b/av1/encoder/encodetxb.h
@@ -50,9 +50,8 @@ void av1_alloc_txb_buf(AV1_COMP *cpi); void av1_free_txb_buf(AV1_COMP *cpi); int av1_cost_coeffs_txb(const AV1_COMMON *const cm, const MACROBLOCK *x, - const int plane, const int blk_row, const int blk_col, - const int block, const TX_SIZE tx_size, - const TXB_CTX *const txb_ctx); + const int plane, const int block, const TX_SIZE tx_size, + const TX_TYPE tx_type, const TXB_CTX *const txb_ctx); void av1_write_coeffs_txb(const AV1_COMMON *const cm, MACROBLOCKD *xd, aom_writer *w, int blk_row, int blk_col, int plane, TX_SIZE tx_size, const tran_low_t *tcoeff,
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c index 6f4fced..2333597 100644 --- a/av1/encoder/rdopt.c +++ b/av1/encoder/rdopt.c
@@ -2686,8 +2686,8 @@ av1_xform_quant( cm, x, plane, block, blk_row, blk_col, plane_bsize, tx_size, tx_type, USE_B_QUANT_NO_TRELLIS ? AV1_XFORM_QUANT_B : AV1_XFORM_QUANT_FP); - rate_cost = av1_cost_coeffs(cm, x, plane, blk_row, blk_col, block, - tx_size, txb_ctx, use_fast_coef_costing); + rate_cost = av1_cost_coeffs(cm, x, plane, block, tx_size, tx_type, + txb_ctx, use_fast_coef_costing); } else { av1_xform_quant(cm, x, plane, block, blk_row, blk_col, plane_bsize, tx_size, tx_type, AV1_XFORM_QUANT_FP); @@ -2696,8 +2696,8 @@ // Calculate distortion quickly in transform domain. dist_block_tx_domain(x, plane, block, tx_size, &this_rd_stats.dist, &this_rd_stats.sse); - rate_cost = av1_cost_coeffs(cm, x, plane, blk_row, blk_col, block, - tx_size, txb_ctx, use_fast_coef_costing); + rate_cost = av1_cost_coeffs(cm, x, plane, block, tx_size, tx_type, + txb_ctx, use_fast_coef_costing); const int64_t rd_estimate = AOMMIN(RDCOST(x->rdmult, rate_cost, this_rd_stats.dist), RDCOST(x->rdmult, 0, this_rd_stats.sse));
diff --git a/av1/encoder/rdopt.h b/av1/encoder/rdopt.h index 1fa3d68..12df472 100644 --- a/av1/encoder/rdopt.h +++ b/av1/encoder/rdopt.h
@@ -78,8 +78,8 @@ } static INLINE int av1_cost_coeffs(const AV1_COMMON *const cm, MACROBLOCK *x, - int plane, int blk_row, int blk_col, - int block, TX_SIZE tx_size, + int plane, int block, TX_SIZE tx_size, + const TX_TYPE tx_type, const TXB_CTX *const txb_ctx, int use_fast_coef_costing) { #if TXCOEFF_COST_TIMER @@ -87,8 +87,8 @@ aom_usec_timer_start(&timer); #endif (void)use_fast_coef_costing; - const int cost = av1_cost_coeffs_txb(cm, x, plane, blk_row, blk_col, block, - tx_size, txb_ctx); + const int cost = + av1_cost_coeffs_txb(cm, x, plane, block, tx_size, tx_type, txb_ctx); #if TXCOEFF_COST_TIMER AV1_COMMON *tmp_cm = (AV1_COMMON *)&cpi->common; aom_usec_timer_mark(&timer);