summaryrefslogtreecommitdiff
path: root/vp10/common/entropymode.c
diff options
context:
space:
mode:
Diffstat (limited to 'vp10/common/entropymode.c')
-rw-r--r--vp10/common/entropymode.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/vp10/common/entropymode.c b/vp10/common/entropymode.c
index 2bb292a6b..78f3650f8 100644
--- a/vp10/common/entropymode.c
+++ b/vp10/common/entropymode.c
@@ -326,6 +326,26 @@ static const struct segmentation_probs default_seg_probs = {
};
#endif
+const vpx_tree_index vp10_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
+ -DCT_DCT, 2,
+ -ADST_ADST, 4,
+ -ADST_DCT, -DCT_ADST
+};
+
+static const vpx_prob default_intra_ext_tx_prob[EXT_TX_SIZES]
+ [TX_TYPES][TX_TYPES - 1] = {
+ {{240, 85, 128}, {4, 1, 248}, {4, 1, 8}, {4, 248, 128}},
+ {{244, 85, 128}, {8, 2, 248}, {8, 2, 8}, {8, 248, 128}},
+ {{248, 85, 128}, {16, 4, 248}, {16, 4, 8}, {16, 248, 128}},
+};
+
+static const vpx_prob default_inter_ext_tx_prob[EXT_TX_SIZES]
+ [TX_TYPES - 1] = {
+ {160, 85, 128},
+ {176, 85, 128},
+ {192, 85, 128},
+};
+
static void init_mode_probs(FRAME_CONTEXT *fc) {
vp10_copy(fc->uv_mode_prob, default_uv_probs);
vp10_copy(fc->y_mode_prob, default_if_y_probs);
@@ -342,6 +362,8 @@ static void init_mode_probs(FRAME_CONTEXT *fc) {
vp10_copy(fc->seg.tree_probs, default_seg_probs.tree_probs);
vp10_copy(fc->seg.pred_probs, default_seg_probs.pred_probs);
#endif
+ vp10_copy(fc->intra_ext_tx_prob, default_intra_ext_tx_prob);
+ vp10_copy(fc->inter_ext_tx_prob, default_inter_ext_tx_prob);
}
const vpx_tree_index vp10_switchable_interp_tree
@@ -431,6 +453,21 @@ void vp10_adapt_intra_frame_probs(VP10_COMMON *cm) {
fc->skip_probs[i] = mode_mv_merge_probs(
pre_fc->skip_probs[i], counts->skip[i]);
+ for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
+ int j;
+ for (j = 0; j < TX_TYPES; ++j)
+ vpx_tree_merge_probs(vp10_ext_tx_tree,
+ pre_fc->intra_ext_tx_prob[i][j],
+ counts->intra_ext_tx[i][j],
+ fc->intra_ext_tx_prob[i][j]);
+ }
+ for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
+ vpx_tree_merge_probs(vp10_ext_tx_tree,
+ pre_fc->inter_ext_tx_prob[i],
+ counts->inter_ext_tx[i],
+ fc->inter_ext_tx_prob[i]);
+ }
+
#if CONFIG_MISC_FIXES
if (cm->seg.temporal_update) {
for (i = 0; i < PREDICTION_PROBS; i++)