Add macro to allow different tx sets for 16x16
This allows for the following options:
Set 0:
Inter: All 16 txfms
Intra: Discrete Trig transforms w/0 flip (4) + Identity (1) +
1D Hor/vert DCT (2)
Set 1:
Inter: Discrete Trig transforms w/ flip (9) + Identity (1) +
1D Hor/Ver DCT (2)
Intra: Discrete Trig transforms w/0 flip (4) + Identity (1)
Set 2:
Inter: Discrete Trig transforms w/ flip (9) + Identity (1)
Intra: Discrete Trig transforms w/0 flip (4) + Identity (1)
Results on lowres 40 frames with
disable-ext-partition disable-ext-partition-types
Set 0: 0.03%
Set 1: No change
Set 2: 0.06%
Change-Id: Iec57d8c8fcfa0891528de4ca88f54753dfcb5284
diff --git a/av1/common/blockd.h b/av1/common/blockd.h
index 5e5fa29..180cbfa 100644
--- a/av1/common/blockd.h
+++ b/av1/common/blockd.h
@@ -765,25 +765,32 @@
// Number of transform types in each set type
static const int av1_num_ext_tx_set[EXT_TX_SET_TYPES] = {
- 1, 2, 5, 7, 10, 12, 16,
+ 1, 2, 5, 7, 7, 10, 12, 16, 16,
};
static const int av1_ext_tx_set_idx_to_type[2][AOMMAX(EXT_TX_SETS_INTRA,
EXT_TX_SETS_INTER)] = {
{
// Intra
- EXT_TX_SET_DCTONLY, EXT_TX_SET_DTT4_IDTX_1DDCT, EXT_TX_SET_DTT4_IDTX,
+ EXT_TX_SET_DCTONLY, EXT_TX_SET_DTT4_IDTX_1DDCT,
+#if EXT_TX_16X16_SET == 0
+ EXT_TX_SET_DTT4_IDTX_1DDCT_16X16,
+#else
+ EXT_TX_SET_DTT4_IDTX,
+#endif // EXT_TX_16X16_SET
},
{
// Inter
EXT_TX_SET_DCTONLY, EXT_TX_SET_ALL16,
-#if USE_1D_16X16
+#if EXT_TX_16X16_SET == 0
+ EXT_TX_SET_ALL16_16X16,
+#elif EXT_TX_16X16_SET == 1
EXT_TX_SET_DTT9_IDTX_1DDCT,
#else
EXT_TX_SET_DTT9_IDTX,
-#endif // USE_1D_16X16
+#endif // EXT_TX_16X16_SET
EXT_TX_SET_DCT_IDTX,
- }
+ },
};
static const int av1_ext_tx_used[EXT_TX_SET_TYPES][TX_TYPES] = {
@@ -800,6 +807,9 @@
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,
},
{
@@ -808,6 +818,9 @@
{
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, BLOCK_SIZE bs,
@@ -835,14 +848,22 @@
if (tx_size_sqr_up == TX_32X32)
return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DCTONLY;
if (is_inter)
-#if USE_1D_16X16
- return (tx_size_sqr == TX_16X16 ? EXT_TX_SET_DTT9_IDTX_1DDCT
- : EXT_TX_SET_ALL16);
+ return (tx_size_sqr == TX_16X16 ?
+#if EXT_TX_16X16_SET == 0
+ EXT_TX_SET_ALL16_16X16
+#elif EXT_TX_16X16_SET == 1
+ EXT_TX_SET_DTT9_IDTX_1DDCT
#else
- return (tx_size_sqr == TX_16X16 ? EXT_TX_SET_DTT9_IDTX : EXT_TX_SET_ALL16);
-#endif // USE_1D_16X16
+ EXT_TX_SET_DTT9_IDTX
+#endif // EXT_TX_16X16_SET
+ : EXT_TX_SET_ALL16);
else
- return (tx_size_sqr == TX_16X16 ? EXT_TX_SET_DTT4_IDTX
+ return (tx_size_sqr == TX_16X16 ?
+#if EXT_TX_16X16_SET == 0
+ EXT_TX_SET_DTT4_IDTX_1DDCT_16X16
+#else
+ EXT_TX_SET_DTT4_IDTX
+#endif // EXT_TX_16X16_SET
: EXT_TX_SET_DTT4_IDTX_1DDCT);
}
@@ -850,16 +871,24 @@
static const int ext_tx_set_index[2][EXT_TX_SET_TYPES] = {
{
// Intra
- 0, -1, 2, 1, -1, -1, -1,
- },
- {
- // Inter
- 0, 3, -1, -1,
-#if USE_1D_16X16
+ 0, -1,
+#if EXT_TX_16X16_SET == 0
-1, 2,
#else
2, -1,
-#endif // USE_1D_16X16
+#endif // EXT_TX_16X16_SET
+ 1, -1, -1, -1, -1,
+ },
+ {
+ // Inter
+ 0, 3, -1, -1, -1,
+#if EXT_TX_16X16_SET == 0
+ -1, -1, 2,
+#elif EXT_TX_16X16_SET == 1
+ -1, 2, -1,
+#else
+ 2, -1, -1,
+#endif // EXT_TX_16X16_SET
1,
},
};
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 1aa0667..ef5f2d4 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1935,6 +1935,70 @@
{ AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
},
},
+#if EXT_TX_16X16_SET == 0
+ {
+ {
+ { AOM_CDF7(1024, 28800, 29048, 29296, 30164, 31466) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1152, 25852, 26284, 26717, 28230, 30499) },
+ { AOM_CDF7(1024, 2016, 3938, 5860, 29404, 31086) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ },
+ {
+ { AOM_CDF7(1024, 28800, 29048, 29296, 30164, 31466) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1152, 25852, 26284, 26717, 28230, 30499) },
+ { AOM_CDF7(1024, 2016, 3938, 5860, 29404, 31086) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ },
+ {
+ { AOM_CDF7(1024, 28800, 29048, 29296, 30164, 31466) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1152, 25852, 26284, 26717, 28230, 30499) },
+ { AOM_CDF7(1024, 2016, 3938, 5860, 29404, 31086) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ },
+ {
+ { AOM_CDF7(1024, 28800, 29048, 29296, 30164, 31466) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1152, 25852, 26284, 26717, 28230, 30499) },
+ { AOM_CDF7(1024, 2016, 3938, 5860, 29404, 31086) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 27118) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 4109, 5900, 7691, 15528, 27380) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ { AOM_CDF7(1280, 5216, 6938, 8660, 10167, 15817) },
+ },
+ },
+#else
{
{
{ AOM_CDF5(1024, 28800, 29792, 31280) },
@@ -1997,6 +2061,7 @@
{ AOM_CDF5(1280, 5216, 6938, 13396) },
},
},
+#endif // EXT_TX_16X16_SET == 0
};
static const aom_cdf_prob
default_inter_ext_tx_cdf[EXT_TX_SETS_INTER][EXT_TX_SIZES][CDF_SIZE(
@@ -2010,7 +2075,16 @@
21733, 24241, 26749, 28253, 29758, 31263) },
{ AOM_CDF16(1280, 1453, 1626, 2277, 2929, 3580, 4232, 16717, 19225,
21733, 24241, 26749, 28253, 29758, 31263) } },
-#if USE_1D_16X16
+#if EXT_TX_16X16_SET == 0
+ { { AOM_CDF16(1280, 1453, 1626, 2277, 2929, 3580, 4232, 16717, 19225,
+ 21733, 24241, 26749, 28253, 29758, 31263) },
+ { AOM_CDF16(1280, 1453, 1626, 2277, 2929, 3580, 4232, 16717, 19225,
+ 21733, 24241, 26749, 28253, 29758, 31263) },
+ { AOM_CDF16(1280, 1453, 1626, 2277, 2929, 3580, 4232, 16717, 19225,
+ 21733, 24241, 26749, 28253, 29758, 31263) },
+ { AOM_CDF16(1280, 1453, 1626, 2277, 2929, 3580, 4232, 16717, 19225,
+ 21733, 24241, 26749, 28253, 29758, 31263) } },
+#elif EXT_TX_16X16_SET == 1
{ { AOM_CDF12(1280, 3125, 4970, 17132, 19575, 22018, 24461, 26904, 28370,
29836, 31302) },
{ AOM_CDF12(1280, 3125, 4970, 17132, 19575, 22018, 24461, 26904, 28370,
@@ -2028,7 +2102,7 @@
28370) },
{ AOM_CDF10(1280, 3125, 4970, 17132, 19575, 22018, 24461, 26904,
28370) } },
-#endif // USE_1D_16X16
+#endif // EXT_TX_16X16_SET
{ { AOM_CDF2(1536) },
{ AOM_CDF2(1536) },
{ AOM_CDF2(1536) },
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index 4df53d2..acb23c8 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -444,7 +444,19 @@
[CDF_SIZE(INTRA_MODES)];
#endif
-#define USE_1D_16X16 1
+// Decides what set to assign to 16x16 transforms.
+// Set 0:
+// Inter: All 16 txfms
+// Intra: Discrete Trig transforms w/0 flip (4) + Identity (1) +
+// 1D Hor/vert DCT (2)
+// Set 1:
+// Inter: Discrete Trig transforms w/ flip (9) + Identity (1) +
+// 1D Hor/Ver DCT (2)
+// Intra: Discrete Trig transforms w/0 flip (4) + Identity (1)
+// Set 2:
+// Inter: Discrete Trig transforms w/ flip (9) + Identity (1)
+// Intra: Discrete Trig transforms w/0 flip (4) + Identity (1)
+#define EXT_TX_16X16_SET 1
static const int av1_ext_tx_ind[EXT_TX_SET_TYPES][TX_TYPES] = {
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -459,6 +471,9 @@
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,
},
{
@@ -467,6 +482,9 @@
{
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] = {
@@ -483,6 +501,9 @@
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,
},
{
@@ -491,6 +512,9 @@
{
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,
+ },
};
extern const aom_tree_index
diff --git a/av1/common/enums.h b/av1/common/enums.h
index 7a82c5c..0829e64 100644
--- a/av1/common/enums.h
+++ b/av1/common/enums.h
@@ -356,12 +356,18 @@
// 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;