Set up txb size properly for TX64X64 TX64X64 uses 32x32 coeff buffer Change-Id: Ied4279807207176d590af4c1fc4bb648a618d158
diff --git a/av1/common/txb_common.h b/av1/common/txb_common.h index 2d94ae5..383bde3 100644 --- a/av1/common/txb_common.h +++ b/av1/common/txb_common.h
@@ -66,6 +66,30 @@ } } +static INLINE int get_txb_bwl(TX_SIZE tx_size) { +#if CONFIG_TX64X64 + if (tx_size == TX_64X64 || tx_size == TX_64X32 || tx_size == TX_32X64) + tx_size = TX_32X32; +#endif + return tx_size_wide_log2[tx_size]; +} + +static INLINE int get_txb_wide(TX_SIZE tx_size) { +#if CONFIG_TX64X64 + if (tx_size == TX_64X64 || tx_size == TX_64X32 || tx_size == TX_32X64) + tx_size = TX_32X32; +#endif + return tx_size_wide[tx_size]; +} + +static INLINE int get_txb_high(TX_SIZE tx_size) { +#if CONFIG_TX64X64 + if (tx_size == TX_64X64 || tx_size == TX_64X32 || tx_size == TX_32X64) + tx_size = TX_32X32; +#endif + return tx_size_high[tx_size]; +} + static INLINE void get_base_count_mag(int *mag, int *count, const tran_low_t *tcoeffs, int bwl, int height, int row, int col) {
diff --git a/av1/decoder/decodetxb.c b/av1/decoder/decodetxb.c index 56619f9..8c6b5bf 100644 --- a/av1/decoder/decodetxb.c +++ b/av1/decoder/decodetxb.c
@@ -75,9 +75,9 @@ const int16_t *const dequant = xd->plane[plane].seg_dequant_QTX[mbmi->segment_id]; const int shift = av1_get_tx_scale(tx_size); - const int bwl = tx_size_wide_log2[tx_size]; - const int width = tx_size_wide[tx_size]; - const int height = tx_size_high[tx_size]; + const int bwl = get_txb_bwl(tx_size); + const int width = get_txb_wide(tx_size); + const int height = get_txb_high(tx_size); int cul_level = 0; uint8_t levels_buf[TX_PAD_2D]; uint8_t *const levels = set_levels(levels_buf, width);
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c index 7094e83..05889dc 100644 --- a/av1/encoder/encodetxb.c +++ b/av1/encoder/encodetxb.c
@@ -329,9 +329,9 @@ const int16_t *scan = scan_order->scan; const int seg_eob = av1_get_max_eob(tx_size); int c; - const int bwl = tx_size_wide_log2[tx_size]; - const int width = tx_size_wide[tx_size]; - const int height = tx_size_high[tx_size]; + const int bwl = get_txb_bwl(tx_size); + const int width = get_txb_wide(tx_size); + const int height = get_txb_high(tx_size); int update_eob = -1; FRAME_CONTEXT *ec_ctx = xd->tile_ctx; uint8_t levels_buf[TX_PAD_2D]; @@ -673,9 +673,9 @@ int c, cost; int txb_skip_ctx = txb_ctx->txb_skip_ctx; - const int bwl = tx_size_wide_log2[tx_size]; - const int width = tx_size_wide[tx_size]; - const int height = tx_size_high[tx_size]; + const int bwl = get_txb_bwl(tx_size); + const int width = get_txb_wide(tx_size); + const int height = get_txb_high(tx_size); const SCAN_ORDER *const scan_order = get_scan(cm, tx_size, tx_type, mbmi); const int16_t *scan = scan_order->scan; @@ -2125,9 +2125,9 @@ const tran_low_t *tcoeff = BLOCK_OFFSET(p->coeff, block); const int16_t *dequant = p->dequant_QTX; const int seg_eob = av1_get_max_eob(tx_size); - const int bwl = tx_size_wide_log2[tx_size]; - const int width = tx_size_wide[tx_size]; - const int height = tx_size_high[tx_size]; + const int bwl = get_txb_bwl(tx_size); + const int width = get_txb_wide(tx_size); + const int height = get_txb_high(tx_size); const int is_inter = is_inter_block(mbmi); const SCAN_ORDER *const scan_order = get_scan(cm, tx_size, tx_type, mbmi); const LV_MAP_COEFF_COST txb_costs = x->coeff_costs[txs_ctx][plane_type]; @@ -2221,9 +2221,9 @@ TXB_CTX txb_ctx; get_txb_ctx(plane_bsize, tx_size, plane, pd->above_context + blk_col, pd->left_context + blk_row, &txb_ctx); - const int bwl = tx_size_wide_log2[tx_size]; - const int width = tx_size_wide[tx_size]; - const int height = tx_size_high[tx_size]; + const int bwl = get_txb_bwl(tx_size); + const int width = get_txb_wide(tx_size); + const int height = get_txb_high(tx_size); uint8_t levels_buf[TX_PAD_2D]; uint8_t *const levels = set_levels(levels_buf, width); DECLARE_ALIGNED(16, uint8_t, level_counts[MAX_TX_SQUARE]);