Commit 53f93dbd authored by Sarah Parker's avatar Sarah Parker

Add new MRC_DCT tx type

This adds the new transform to the list of possible transforms.
The impact on performance is in the noise range because the transform
implementation currently performs DCT as a placeholder. This transform
will initially only have an implementation for TX_32X32 and it is
skipped in the tx search for smaller transform sizes.

Change-Id: Iab2faddc525b478ca06972a753428a4f4ef53ac6
parent c2502b55
...@@ -797,18 +797,50 @@ typedef enum { ...@@ -797,18 +797,50 @@ typedef enum {
// DCT only // DCT only
EXT_TX_SET_DCTONLY = 0, EXT_TX_SET_DCTONLY = 0,
// DCT + Identity only // DCT + Identity only
EXT_TX_SET_DCT_IDTX = 1, EXT_TX_SET_DCT_IDTX,
#if CONFIG_MRC_TX
// DCT + MRC_DCT
EXT_TX_SET_MRC_DCT,
// DCT + MRC_DCT + IDTX
EXT_TX_SET_MRC_DCT_IDTX,
#endif // CONFIG_MRC_TX
// Discrete Trig transforms w/o flip (4) + Identity (1) // Discrete Trig transforms w/o flip (4) + Identity (1)
EXT_TX_SET_DTT4_IDTX = 2, EXT_TX_SET_DTT4_IDTX,
// Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2) // Discrete Trig transforms w/o flip (4) + Identity (1) + 1D Hor/vert DCT (2)
EXT_TX_SET_DTT4_IDTX_1DDCT = 3, EXT_TX_SET_DTT4_IDTX_1DDCT,
// Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver DCT (2) // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver DCT (2)
EXT_TX_SET_DTT9_IDTX_1DDCT = 4, EXT_TX_SET_DTT9_IDTX_1DDCT,
// Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6) // Discrete Trig transforms w/ flip (9) + Identity (1) + 1D Hor/Ver (6)
EXT_TX_SET_ALL16 = 5, EXT_TX_SET_ALL16,
EXT_TX_SET_TYPES EXT_TX_SET_TYPES
} TxSetType; } TxSetType;
#if CONFIG_MRC_TX
// Number of transform types in each set type
static const int num_ext_tx_set[EXT_TX_SET_TYPES] = {
1, 2, 2, 3, 5, 7, 12, 16
};
// Maps intra set index to the set type
static const int ext_tx_set_type_intra[EXT_TX_SETS_INTRA] = {
EXT_TX_SET_DCTONLY, EXT_TX_SET_DTT4_IDTX_1DDCT, EXT_TX_SET_DTT4_IDTX,
EXT_TX_SET_MRC_DCT
};
// Maps inter set index to the set type
static const int ext_tx_set_type_inter[EXT_TX_SETS_INTER] = {
EXT_TX_SET_DCTONLY, EXT_TX_SET_ALL16, EXT_TX_SET_DTT9_IDTX_1DDCT,
EXT_TX_SET_DCT_IDTX, EXT_TX_SET_MRC_DCT_IDTX
};
// Maps set types above to the indices used for intra
static const int ext_tx_set_index_intra[EXT_TX_SET_TYPES] = { 0, -1, 3, -1,
2, 1, -1, -1 };
// Maps set types above to the indices used for inter
static const int ext_tx_set_index_inter[EXT_TX_SET_TYPES] = { 0, 3, -1, 4,
-1, -1, 2, 1 };
#else // CONFIG_MRC_TX
// Number of transform types in each set type // Number of transform types in each set type
static const int num_ext_tx_set[EXT_TX_SET_TYPES] = { 1, 2, 5, 7, 12, 16 }; static const int num_ext_tx_set[EXT_TX_SET_TYPES] = { 1, 2, 5, 7, 12, 16 };
...@@ -831,6 +863,7 @@ static const int ext_tx_set_index_intra[EXT_TX_SET_TYPES] = { 0, -1, 2, ...@@ -831,6 +863,7 @@ static const int ext_tx_set_index_intra[EXT_TX_SET_TYPES] = { 0, -1, 2,
static const int ext_tx_set_index_inter[EXT_TX_SET_TYPES] = { static const int ext_tx_set_index_inter[EXT_TX_SET_TYPES] = {
0, 3, -1, -1, 2, 1 0, 3, -1, -1, 2, 1
}; };
#endif // CONFIG_MRC_TX
static INLINE TxSetType get_ext_tx_set_type(TX_SIZE tx_size, BLOCK_SIZE bs, static INLINE TxSetType get_ext_tx_set_type(TX_SIZE tx_size, BLOCK_SIZE bs,
int is_inter, int use_reduced_set) { int is_inter, int use_reduced_set) {
...@@ -844,6 +877,10 @@ static INLINE TxSetType get_ext_tx_set_type(TX_SIZE tx_size, BLOCK_SIZE bs, ...@@ -844,6 +877,10 @@ static INLINE TxSetType get_ext_tx_set_type(TX_SIZE tx_size, BLOCK_SIZE bs,
#endif #endif
if (use_reduced_set) if (use_reduced_set)
return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DTT4_IDTX; return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DTT4_IDTX;
#if CONFIG_MRC_TX
if (tx_size == TX_32X32)
return is_inter ? EXT_TX_SET_MRC_DCT_IDTX : EXT_TX_SET_MRC_DCT;
#endif // CONFIG_MRC_TX
if (tx_size_sqr_up == TX_32X32) if (tx_size_sqr_up == TX_32X32)
return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DCTONLY; return is_inter ? EXT_TX_SET_DCT_IDTX : EXT_TX_SET_DCTONLY;
if (is_inter) if (is_inter)
...@@ -862,6 +899,63 @@ static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs, int is_inter, ...@@ -862,6 +899,63 @@ static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs, int is_inter,
: ext_tx_set_index_intra[set_type]; : ext_tx_set_index_intra[set_type];
} }
#if CONFIG_MRC_TX
static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][EXT_TX_SIZES] =
{
#if CONFIG_CHROMA_2X2
{ 1, 1, 1, 1, 1 }, // unused
{ 0, 1, 1, 0, 0 },
{ 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 1 },
#else
{ 1, 1, 1, 1 }, // unused
{ 1, 1, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 0, 1 },
#endif // CONFIG_CHROMA_2X2
};
static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][EXT_TX_SIZES] =
{
#if CONFIG_CHROMA_2X2
{ 1, 1, 1, 1, 1 }, // unused
{ 0, 1, 1, 0, 0 }, { 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 1 },
#else
{ 1, 1, 1, 1 }, // unused
{ 1, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 }, { 0, 0, 0, 1 },
#endif // CONFIG_CHROMA_2X2
};
// Transform types used in each intra set
static const int ext_tx_used_intra[EXT_TX_SETS_INTRA][TX_TYPES] = {
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
};
// Numbers of transform types used in each intra set
static const int ext_tx_cnt_intra[EXT_TX_SETS_INTRA] = { 1, 7, 5, 2 };
// Transform types used in each inter set
static const int ext_tx_used_inter[EXT_TX_SETS_INTER][TX_TYPES] = {
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
};
// Numbers of transform types used in each inter set
static const int ext_tx_cnt_inter[EXT_TX_SETS_INTER] = { 1, 16, 12, 2, 3 };
// 1D Transforms used in inter set, this needs to be changed if
// ext_tx_used_inter is changed
static const int ext_tx_used_inter_1D[EXT_TX_SETS_INTER][TX_TYPES_1D] = {
{ 1, 0, 0, 0 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 0, 0, 1 }, { 1, 0, 0, 1 }
};
#else // CONFIG_MRC_TX
static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][EXT_TX_SIZES] = static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][EXT_TX_SIZES] =
{ {
#if CONFIG_CHROMA_2X2 #if CONFIG_CHROMA_2X2
...@@ -916,6 +1010,7 @@ static const int ext_tx_cnt_inter[EXT_TX_SETS_INTER] = { 1, 16, 12, 2 }; ...@@ -916,6 +1010,7 @@ static const int ext_tx_cnt_inter[EXT_TX_SETS_INTER] = { 1, 16, 12, 2 };
static const int ext_tx_used_inter_1D[EXT_TX_SETS_INTER][TX_TYPES_1D] = { static const int ext_tx_used_inter_1D[EXT_TX_SETS_INTER][TX_TYPES_1D] = {
{ 1, 0, 0, 0 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 0, 0, 1 }, { 1, 0, 0, 0 }, { 1, 1, 1, 1 }, { 1, 1, 1, 1 }, { 1, 0, 0, 1 },
}; };
#endif // CONFIG_MRC_TX
static INLINE int get_ext_tx_types(TX_SIZE tx_size, BLOCK_SIZE bs, int is_inter, static INLINE int get_ext_tx_types(TX_SIZE tx_size, BLOCK_SIZE bs, int is_inter,
int use_reduced_set) { int use_reduced_set) {
...@@ -1149,6 +1244,15 @@ static INLINE TX_TYPE av1_get_tx_type(PLANE_TYPE plane_type, ...@@ -1149,6 +1244,15 @@ static INLINE TX_TYPE av1_get_tx_type(PLANE_TYPE plane_type,
#endif // FIXED_TX_TYPE #endif // FIXED_TX_TYPE
#if CONFIG_EXT_TX #if CONFIG_EXT_TX
#if CONFIG_MRC_TX
if (mbmi->tx_type == MRC_DCT) {
if (plane_type == PLANE_TYPE_Y) {
assert(tx_size == TX_32X32);
return mbmi->tx_type;
}
return DCT_DCT;
}
#endif // CONFIG_MRC_TX
if (xd->lossless[mbmi->segment_id] || txsize_sqr_map[tx_size] > TX_32X32 || if (xd->lossless[mbmi->segment_id] || txsize_sqr_map[tx_size] > TX_32X32 ||
(txsize_sqr_map[tx_size] >= TX_32X32 && !is_inter_block(mbmi))) (txsize_sqr_map[tx_size] >= TX_32X32 && !is_inter_block(mbmi)))
return DCT_DCT; return DCT_DCT;
...@@ -1193,6 +1297,15 @@ static INLINE TX_TYPE av1_get_tx_type(PLANE_TYPE plane_type, ...@@ -1193,6 +1297,15 @@ static INLINE TX_TYPE av1_get_tx_type(PLANE_TYPE plane_type,
#endif // CONFIG_CB4X4 #endif // CONFIG_CB4X4
#else // CONFIG_EXT_TX #else // CONFIG_EXT_TX
(void)block; (void)block;
#if CONFIG_MRC_TX
if (mbmi->tx_type == MRC_DCT) {
if (plane_type == PLANE_TYPE_Y && !xd->lossless[mbmi->segment_id]) {
assert(tx_size == TX_32X32);
return mbmi->tx_type;
}
return DCT_DCT;
}
#endif // CONFIG_MRC_TX
if (plane_type != PLANE_TYPE_Y || xd->lossless[mbmi->segment_id] || if (plane_type != PLANE_TYPE_Y || xd->lossless[mbmi->segment_id] ||
txsize_sqr_map[tx_size] >= TX_32X32) txsize_sqr_map[tx_size] >= TX_32X32)
return DCT_DCT; return DCT_DCT;
......
...@@ -2134,7 +2134,12 @@ const aom_tree_index av1_ext_tx_inter_tree[EXT_TX_SETS_INTER] ...@@ -2134,7 +2134,12 @@ const aom_tree_index av1_ext_tx_inter_tree[EXT_TX_SETS_INTER]
-ADST_FLIPADST, -FLIPADST_ADST -ADST_FLIPADST, -FLIPADST_ADST
}, { }, {
-IDTX, -DCT_DCT, -IDTX, -DCT_DCT,
},
#if CONFIG_MRC_TX
{
-IDTX, 2, -DCT_DCT, -MRC_DCT,
} }
#endif // CONFIG_MRC_TX
}; };
const aom_tree_index av1_ext_tx_intra_tree[EXT_TX_SETS_INTRA] const aom_tree_index av1_ext_tx_intra_tree[EXT_TX_SETS_INTRA]
...@@ -2153,7 +2158,12 @@ const aom_tree_index av1_ext_tx_intra_tree[EXT_TX_SETS_INTRA] ...@@ -2153,7 +2158,12 @@ const aom_tree_index av1_ext_tx_intra_tree[EXT_TX_SETS_INTRA]
-DCT_DCT, 4, -DCT_DCT, 4,
-ADST_ADST, 6, -ADST_ADST, 6,
-ADST_DCT, -DCT_ADST, -ADST_DCT, -DCT_ADST,
},
#if CONFIG_MRC_TX
{
-DCT_DCT, -MRC_DCT,
} }
#endif // CONFIG_MRC_TX
}; };
/* clang-format on */ /* clang-format on */
...@@ -2199,7 +2209,18 @@ static const aom_prob ...@@ -2199,7 +2209,18 @@ static const aom_prob
{ 12 }, { 12 },
{ 12 }, { 12 },
{ 12 }, { 12 },
},
#if CONFIG_MRC_TX
{
#if CONFIG_CHROMA_2X2
{ 0 },
#endif
{ 12, 128 },
{ 12, 128 },
{ 12, 128 },
{ 12, 128 },
} }
#endif // CONFIG_MRC_TX
}; };
// TODO(urvang): 3rd context should be tx_type instead of intra mode just like // TODO(urvang): 3rd context should be tx_type instead of intra mode just like
...@@ -2457,20 +2478,152 @@ static const aom_prob ...@@ -2457,20 +2478,152 @@ static const aom_prob
{ 10, 32, 16, 64 }, { 10, 32, 16, 64 },
}, },
}, },
#if CONFIG_MRC_TX
{
// ToDo(yaowu): remove unused entry 0.
#if CONFIG_CHROMA_2X2
{
{ 0 },
},
#endif
{
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
#if CONFIG_ALT_INTRA
{ 128 },
#if CONFIG_SMOOTH_HV
{ 128 },
{ 128 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ 128 },
},
{
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
#if CONFIG_ALT_INTRA
{ 128 },
#if CONFIG_SMOOTH_HV
{ 128 },
{ 128 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ 128 },
},
{
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
#if CONFIG_ALT_INTRA
{ 128 },
#if CONFIG_SMOOTH_HV
{ 128 },
{ 128 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ 128 },
},
{
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
{ 128 },
#if CONFIG_ALT_INTRA
{ 128 },
#if CONFIG_SMOOTH_HV
{ 128 },
{ 128 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ 128 },
},
},
#endif // CONFIG_MRC_TX
}; };
#else // !CONFIG_EXT_TX #else // !CONFIG_EXT_TX
/* clang-format off */ /* clang-format off */
#if CONFIG_MRC_TX
const aom_tree_index av1_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
-DCT_DCT, 2,
-MRC_DCT, 4,
-ADST_ADST, 6,
-ADST_DCT, -DCT_ADST
};
#else
const aom_tree_index av1_ext_tx_tree[TREE_SIZE(TX_TYPES)] = { const aom_tree_index av1_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
-DCT_DCT, 2, -DCT_DCT, 2,
-ADST_ADST, 4, -ADST_ADST, 4,
-ADST_DCT, -DCT_ADST -ADST_DCT, -DCT_ADST
}; };
#endif // CONFIG_MRC_TX
/* clang-format on */ /* clang-format on */
int av1_ext_tx_ind[TX_TYPES]; int av1_ext_tx_ind[TX_TYPES];
int av1_ext_tx_inv[TX_TYPES]; int av1_ext_tx_inv[TX_TYPES];
#if CONFIG_MRC_TX
static const aom_prob default_intra_ext_tx_prob[EXT_TX_SIZES][TX_TYPES]
[TX_TYPES - 1] = {
#if CONFIG_CHROMA_2X2
{ { 240, 1, 85, 128 },
{ 4, 1, 1, 248 },
{ 4, 1, 1, 8 },
{ 4, 1, 248, 128 },
{ 4, 1, 248, 128 } },
#endif
{ { 240, 1, 85, 128 },
{ 4, 1, 1, 248 },
{ 4, 1, 1, 8 },
{ 4, 1, 248, 128 },
{ 4, 1, 248, 128 } },
{ { 244, 1, 85, 128 },
{ 8, 1, 2, 248 },
{ 8, 1, 2, 8 },
{ 8, 1, 248, 128 },
{ 4, 1, 248, 128 } },
{ { 248, 128, 85, 128 },
{ 16, 128, 4, 248 },
{ 16, 128, 4, 8 },
{ 16, 128, 248, 128 },
{ 4, 1, 248, 128 } },
};
static const aom_prob default_inter_ext_tx_prob[EXT_TX_SIZES][TX_TYPES - 1] = {
#if CONFIG_CHROMA_2X2
{ 160, 1, 85, 128 },
#endif
{ 160, 1, 85, 128 },
{ 176, 1, 85, 128 },
{ 192, 128, 85, 128 },
};
#else
static const aom_prob static const aom_prob
default_intra_ext_tx_prob[EXT_TX_SIZES][TX_TYPES][TX_TYPES - 1] = { default_intra_ext_tx_prob[EXT_TX_SIZES][TX_TYPES][TX_TYPES - 1] = {
#if CONFIG_CHROMA_2X2 #if CONFIG_CHROMA_2X2
...@@ -2489,6 +2642,7 @@ static const aom_prob default_inter_ext_tx_prob[EXT_TX_SIZES][TX_TYPES - 1] = { ...@@ -2489,6 +2642,7 @@ static const aom_prob default_inter_ext_tx_prob[EXT_TX_SIZES][TX_TYPES - 1] = {
{ 176, 85, 128 }, { 176, 85, 128 },
{ 192, 85, 128 }, { 192, 85, 128 },
}; };
#endif // CONFIG_MRC_TX
#endif // CONFIG_EXT_TX #endif // CONFIG_EXT_TX
#if CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP #if CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
...@@ -3260,7 +3414,87 @@ static const aom_cdf_prob default_intra_ext_tx_cdf ...@@ -3260,7 +3414,87 @@ static const aom_cdf_prob default_intra_ext_tx_cdf
{ AOM_ICDF(1280), AOM_ICDF(5216), AOM_ICDF(6938), AOM_ICDF(13396), { AOM_ICDF(1280), AOM_ICDF(5216), AOM_ICDF(6938), AOM_ICDF(13396),
AOM_ICDF(32768), 0 }, AOM_ICDF(32768), 0 },
}, },
},
#if CONFIG_MRC_TX
{
{
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1152), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_SMOOTH_HV
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
},
{
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1152), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_SMOOTH_HV
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
},
{
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1152), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_SMOOTH_HV
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
},
{
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1152), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#if CONFIG_SMOOTH_HV
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
#endif // CONFIG_SMOOTH_HV
#endif // CONFIG_ALT_INTRA
{ AOM_ICDF(1280), AOM_ICDF(32768), 0 },
},
} }
#endif // CONFIG_MRC_TX
}; };
static const aom_cdf_prob static const aom_cdf_prob
default_inter_ext_tx_cdf[EXT_TX_SETS_INTER][EXT_TX_SIZES][CDF_SIZE( default_inter_ext_tx_cdf[EXT_TX_SETS_INTER][EXT_TX_SIZES][CDF_SIZE(
...@@ -3324,9 +3558,82 @@ static const aom_cdf_prob ...@@ -3324,9 +3558,82 @@ static const aom_cdf_prob
{ AOM_ICDF(1536), AOM_ICDF(32768), 0 }, { AOM_ICDF(1536), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1536), AOM_ICDF(32768), 0 }, { AOM_ICDF(1536), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1536), AOM_ICDF(32768), 0 }, { AOM_ICDF(1536), AOM_ICDF(32768), 0 },
{ AOM_ICDF(1536), AOM_ICDF(32768), 0 } } { AOM_ICDF(1536), AOM_ICDF(32768), 0 } },
#if CONFIG_MRC_TX
{
#if CONFIG_CHROMA_2X2
{ 0 },
#endif
{ AOM_ICDF(30080), AOM_ICDF(31781), AOM_ICDF(32768), 0 },
{ AOM_ICDF(4608), AOM_ICDF(32658), AOM_ICDF(32768), 0 },
{ AOM_ICDF(4352), AOM_ICDF(4685), AOM_ICDF(32768), 0 },
{ AOM_ICDF(19072), AOM_ICDF(26776), AOM_ICDF(32768), 0 } },
#endif // CONFIG_MRC_TX
}; };
#else #else
#if CONFIG_MRC_TX
static const aom_cdf_prob
default_intra_ext_tx_cdf[EXT_TX_SIZES][TX_TYPES][CDF_SIZE(TX_TYPES)] = {
#if CONFIG_CHROMA_2X2
{ { AOM_ICDF(30720), AOM_ICDF(31104), AOM_ICDF(31400), AOM_ICDF(32084),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(31764),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(1642),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(1642),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(1280), AOM_ICDF(31760), AOM_ICDF(32264),
AOM_ICDF(32768), 0 } },
#endif
{ { AOM_ICDF(30720), AOM_ICDF(31104), AOM_ICDF(31400), AOM_ICDF(32084),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(31764),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(1642),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(582), AOM_ICDF(638), AOM_ICDF(1642),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(512), AOM_ICDF(1280), AOM_ICDF(31760), AOM_ICDF(32264),
AOM_ICDF(32768), 0 } },
{ { AOM_ICDF(31232), AOM_ICDF(31488), AOM_ICDF(31742), AOM_ICDF(32255),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(1152), AOM_ICDF(1272), AOM_ICDF(31784),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(1152), AOM_ICDF(1272), AOM_ICDF(2256),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(1052), AOM_ICDF(1272), AOM_ICDF(2256),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(1024), AOM_ICDF(1792), AOM_ICDF(31776), AOM_ICDF(32272),
AOM_ICDF(32768), 0 } },
{ { AOM_ICDF(31744), AOM_ICDF(29440), AOM_ICDF(32084), AOM_ICDF(32426),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(2048), AOM_ICDF(2176), AOM_ICDF(2528), AOM_ICDF(31823),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(2048), AOM_ICDF(2176), AOM_ICDF(2528), AOM_ICDF(3473),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(2048), AOM_ICDF(2176), AOM_ICDF(2528), AOM_ICDF(3473),
AOM_ICDF(32768), 0 },
{ AOM_ICDF(2048), AOM_ICDF(28160), AOM_ICDF(31808), AOM_ICDF(32288),
AOM_ICDF(32768), 0 } },
};
static const aom_cdf_prob
default_inter_ext_tx_cdf[EXT_TX_SIZES][CDF_SIZE(TX_TYPES)] = {
#if CONFIG_CHROMA_2X2
{ AOM_ICDF(20480), AOM_ICDF(23040), AOM_ICDF(24560), AOM_ICDF(28664),
AOM_ICDF(32768), 0 },
#endif
{ AOM_ICDF(20480), AOM_ICDF(23040), AOM_ICDF(24560), AOM_ICDF(28664),