Refactor get_ext_tx_set_type()
-avoid unnecessary table lookup
-remove unused tx type sets
Change-Id: I693ea585982aae73b9c0a7f075dad2d84f8bee62
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 51cd796..cfe9e7d 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -646,7 +646,7 @@
// Number of transform types in each set type
static const int av1_num_ext_tx_set[EXT_TX_SET_TYPES] = {
- 1, 2, 5, 7, 7, 10, 12, 16, 16,
+ 1, 2, 5, 7, 12, 16,
};
static const int av1_ext_tx_used[EXT_TX_SET_TYPES][TX_TYPES] = {
@@ -654,23 +654,19 @@
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 },
- { 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 },
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
};
-static INLINE TxSetType get_ext_tx_set_type(TX_SIZE tx_size, int is_inter,
- int use_reduced_set) {
+static INLINE TxSetType av1_get_ext_tx_set_type(TX_SIZE tx_size, int is_inter,
+ int use_reduced_set) {
const TX_SIZE tx_size_sqr_up = txsize_sqr_up_map[tx_size];
- const TX_SIZE tx_size_sqr = txsize_sqr_map[tx_size];
-
if (tx_size_sqr_up > TX_32X32) return EXT_TX_SET_DCTONLY;
if (tx_size_sqr_up == TX_32X32)
return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DCTONLY;
if (use_reduced_set)
return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DTT4_IDTX;
+ const TX_SIZE tx_size_sqr = txsize_sqr_map[tx_size];
if (is_inter) {
return (tx_size_sqr == TX_16X16 ? EXT_TX_SET_DTT9_IDTX_1DDCT
: EXT_TX_SET_ALL16);
@@ -683,21 +679,22 @@
// Maps tx set types to the indices.
static const int ext_tx_set_index[2][EXT_TX_SET_TYPES] = {
{ // Intra
- 0, -1, 2, -1, 1, -1, -1, -1, -16 },
+ 0, -1, 2, 1, -1, -1 },
{ // Inter
- 0, 3, -1, -1, -1, -1, 2, -1, 1 },
+ 0, 3, -1, -1, 2, 1 },
};
static INLINE int get_ext_tx_set(TX_SIZE tx_size, int is_inter,
int use_reduced_set) {
const TxSetType set_type =
- get_ext_tx_set_type(tx_size, is_inter, use_reduced_set);
+ av1_get_ext_tx_set_type(tx_size, is_inter, use_reduced_set);
return ext_tx_set_index[is_inter][set_type];
}
static INLINE int get_ext_tx_types(TX_SIZE tx_size, int is_inter,
int use_reduced_set) {
- const int set_type = get_ext_tx_set_type(tx_size, is_inter, use_reduced_set);
+ const int set_type =
+ av1_get_ext_tx_set_type(tx_size, is_inter, use_reduced_set);
return av1_num_ext_tx_set[set_type];
}
@@ -824,7 +821,7 @@
const MB_MODE_INFO *const mbmi = xd->mi[0];
const struct macroblockd_plane *const pd = &xd->plane[plane_type];
const TxSetType tx_set_type =
- get_ext_tx_set_type(tx_size, is_inter_block(mbmi), reduced_tx_set);
+ av1_get_ext_tx_set_type(tx_size, is_inter_block(mbmi), reduced_tx_set);
TX_TYPE tx_type;
if (xd->lossless[mbmi->segment_id] || txsize_sqr_up_map[tx_size] > TX_32X32) {
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 292cd89..342025b 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -261,11 +261,8 @@
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 3, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 5, 6, 4, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0 },
- { 1, 5, 6, 4, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0 },
- { 1, 2, 3, 6, 4, 5, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0 },
{ 3, 4, 5, 8, 6, 7, 9, 10, 11, 0, 1, 2, 0, 0, 0, 0 },
{ 7, 8, 9, 12, 10, 11, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6 },
- { 7, 8, 9, 12, 10, 11, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6 },
};
static const int av1_ext_tx_inv[EXT_TX_SET_TYPES][TX_TYPES] = {
@@ -273,11 +270,8 @@
{ 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 9, 0, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 9, 0, 10, 11, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 9, 0, 10, 11, 3, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
- { 9, 0, 1, 2, 4, 5, 3, 6, 7, 8, 0, 0, 0, 0, 0, 0 },
{ 9, 10, 11, 0, 1, 2, 4, 5, 3, 6, 7, 8, 0, 0, 0, 0 },
{ 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 4, 5, 3, 6, 7, 8 },
- { 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 4, 5, 3, 6, 7, 8 },
};
void av1_set_default_ref_deltas(int8_t *ref_deltas);
diff --git a/av1/common/enums.h b/av1/common/enums.h
index c02f56f..72c631c 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -293,18 +293,10 @@
// Discrete Trig transforms w/o flip (4) + Identity (1)
EXT_TX_SET_DTT4_IDTX,
// Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2)
- // for 16x16 only
- EXT_TX_SET_DTT4_IDTX_1DDCT_16X16,
- // Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2)
EXT_TX_SET_DTT4_IDTX_1DDCT,
- // Discrete Trig transforms w/ flip (9) + Identity (1)
- EXT_TX_SET_DTT9_IDTX,
// Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver DCT (2)
EXT_TX_SET_DTT9_IDTX_1DDCT,
// Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6)
- // for 16x16 only
- EXT_TX_SET_ALL16_16X16,
- // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6)
EXT_TX_SET_ALL16,
EXT_TX_SET_TYPES
} TxSetType;
diff --git a/av1/common/idct.c b/av1/common/idct.c
index 5d25043..7a2f3bc 100644
--- a/av1/common/idct.c
+++ b/av1/common/idct.c
@@ -326,7 +326,7 @@
txfm_param->lossless = xd->lossless[xd->mi[0]->segment_id];
txfm_param->bd = xd->bd;
txfm_param->is_hbd = get_bitdepth_data_path_index(xd);
- txfm_param->tx_set_type = get_ext_tx_set_type(
+ txfm_param->tx_set_type = av1_get_ext_tx_set_type(
txfm_param->tx_size, is_inter_block(xd->mi[0]), reduced_tx_set);
}
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 54b93eb..63c587a 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -624,7 +624,7 @@
!mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
const TxSetType tx_set_type =
- get_ext_tx_set_type(tx_size, inter_block, cm->reduced_tx_set_used);
+ av1_get_ext_tx_set_type(tx_size, inter_block, cm->reduced_tx_set_used);
const int eset =
get_ext_tx_set(tx_size, inter_block, cm->reduced_tx_set_used);
// eset == 0 should correspond to a set with only DCT_DCT and
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index efa5c29..f516fe6 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -803,7 +803,7 @@
!mbmi->skip &&
!segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
const TxSetType tx_set_type =
- get_ext_tx_set_type(tx_size, is_inter, cm->reduced_tx_set_used);
+ av1_get_ext_tx_set_type(tx_size, is_inter, cm->reduced_tx_set_used);
const int eset = get_ext_tx_set(tx_size, is_inter, cm->reduced_tx_set_used);
// eset == 0 should correspond to a set with only DCT_DCT and there
// is no need to send the tx_type
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index f403792..45e62db 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4604,7 +4604,7 @@
const int eset = get_ext_tx_set(tx_size, is_inter, cm->reduced_tx_set_used);
if (eset > 0) {
const TxSetType tx_set_type =
- get_ext_tx_set_type(tx_size, is_inter, cm->reduced_tx_set_used);
+ av1_get_ext_tx_set_type(tx_size, is_inter, cm->reduced_tx_set_used);
if (is_inter) {
if (allow_update_cdf) {
update_cdf(fc->inter_ext_tx_cdf[eset][txsize_sqr_map[tx_size]],
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index afb1f68..8cdfdd5 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -174,7 +174,7 @@
txfm_param.tx_type = tx_type;
txfm_param.tx_size = tx_size;
txfm_param.lossless = xd->lossless[mbmi->segment_id];
- txfm_param.tx_set_type = get_ext_tx_set_type(
+ txfm_param.tx_set_type = av1_get_ext_tx_set_type(
txfm_param.tx_size, is_inter_block(mbmi), cm->reduced_tx_set_used);
txfm_param.bd = xd->bd;
@@ -374,7 +374,7 @@
txfm_param.tx_size = tx_size;
txfm_param.eob = p->eobs[block];
txfm_param.lossless = xd->lossless[xd->mi[0]->segment_id];
- txfm_param.tx_set_type = get_ext_tx_set_type(
+ txfm_param.tx_set_type = av1_get_ext_tx_set_type(
txfm_param.tx_size, is_inter_block(xd->mi[0]), cm->reduced_tx_set_used);
if (txfm_param.is_hbd) {
av1_highbd_inv_txfm_add_4x4(dqcoeff, dst, pd->dst.stride, &txfm_param);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 19df865..ae448ff 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2232,7 +2232,7 @@
uint8_t best_txb_ctx = 0;
const TxSetType tx_set_type =
- get_ext_tx_set_type(tx_size, is_inter, cm->reduced_tx_set_used);
+ av1_get_ext_tx_set_type(tx_size, is_inter, cm->reduced_tx_set_used);
int prune = 0;
const int do_prune = plane == 0 && !fast_tx_search && txk_end != DCT_DCT &&
!(!is_inter && x->use_default_intra_tx_type) &&
@@ -2749,7 +2749,7 @@
const int is_inter = is_inter_block(mbmi);
mbmi->tx_size = tx_size_from_tx_mode(bs, cm->tx_mode);
const TxSetType tx_set_type =
- get_ext_tx_set_type(mbmi->tx_size, is_inter, cm->reduced_tx_set_used);
+ av1_get_ext_tx_set_type(mbmi->tx_size, is_inter, cm->reduced_tx_set_used);
prune_tx(cpi, bs, x, xd, tx_set_type, 0);
txfm_rd_in_plane(x, cpi, rd_stats, ref_best_rd, AOM_PLANE_Y, bs,
mbmi->tx_size, cpi->sf.use_fast_coef_costing);
@@ -4670,7 +4670,7 @@
param.bd = xd->bd;
param.is_hbd = get_bitdepth_data_path_index(xd);
param.lossless = 0;
- param.tx_set_type = get_ext_tx_set_type(
+ param.tx_set_type = av1_get_ext_tx_set_type(
param.tx_size, is_inter_block(xd->mi[0]), reduced_tx_set);
const uint32_t ac_q = (uint32_t)av1_ac_quant_QTX(x->qindex, 0, xd->bd);
uint32_t max_quantized_coef = 0;
@@ -4743,7 +4743,7 @@
// Get the tx_size 1 level down
const TX_SIZE min_tx_size = sub_tx_size_map[max_txsize_rect_lookup[bsize]];
const TxSetType tx_set_type =
- get_ext_tx_set_type(min_tx_size, is_inter, cm->reduced_tx_set_used);
+ av1_get_ext_tx_set_type(min_tx_size, is_inter, cm->reduced_tx_set_used);
const int within_border =
mi_row >= xd->tile.mi_row_start &&
(mi_row + mi_size_high[bsize] < xd->tile.mi_row_end) &&