]> granicus.if.org Git - libvpx/commitdiff
Update inter_ext_tx_cdf per frame.
authorNathan E. Egge <negge@mozilla.com>
Tue, 3 May 2016 14:01:32 +0000 (10:01 -0400)
committerYaowu Xu <yaowu@google.com>
Mon, 17 Oct 2016 17:20:53 +0000 (10:20 -0700)
Move computing the inter_ext_tx_cdf tables per symbol to
 computing them only when the probabilities are updated.

Change-Id: I5e1e62f8eae8f6b2edbbd378beeb786649502c10

av1/common/entropymode.c
av1/common/entropymode.h
av1/decoder/decodeframe.c
av1/decoder/decodemv.c
av1/encoder/bitstream.c

index f234e3b79b01ba322d5bf34502f04555b2dfb044..60fe1a713c2c5d4e55b8b819ed3497e72d9b1b61 100644 (file)
@@ -1388,6 +1388,8 @@ static void init_mode_probs(FRAME_CONTEXT *fc) {
                      fc->switchable_interp_cdf, SWITCHABLE_FILTER_CONTEXTS);
   av1_tree_to_cdf_2D(av1_ext_tx_tree, fc->intra_ext_tx_prob,
                      fc->intra_ext_tx_cdf, EXT_TX_SIZES, TX_TYPES);
+  av1_tree_to_cdf_1D(av1_ext_tx_tree, fc->inter_ext_tx_prob,
+                     fc->inter_ext_tx_cdf, EXT_TX_SIZES);
 #endif
 }
 
@@ -1596,6 +1598,10 @@ void av1_adapt_intra_frame_probs(AV1_COMMON *cm) {
   for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
     aom_tree_merge_probs(av1_ext_tx_tree, pre_fc->inter_ext_tx_prob[i],
                          counts->inter_ext_tx[i], fc->inter_ext_tx_prob[i]);
+#if CONFIG_DAALA_EC
+    av1_tree_to_cdf(av1_ext_tx_tree, fc->inter_ext_tx_prob[i],
+                    fc->inter_ext_tx_cdf[i]);
+#endif
   }
 #endif  // CONFIG_EXT_TX
 
index 6ead4fabff6d6537adc88decadd62fad1b536055..583c81f87b22b5340f1b73cc269e9ca4b2ce5f80 100644 (file)
@@ -135,6 +135,7 @@ typedef struct frame_contexts {
   uint16_t switchable_interp_cdf[SWITCHABLE_FILTER_CONTEXTS]
                                 [SWITCHABLE_FILTERS];
   uint16_t intra_ext_tx_cdf[EXT_TX_SIZES][TX_TYPES][TX_TYPES];
+  uint16_t inter_ext_tx_cdf[EXT_TX_SIZES][TX_TYPES];
 #endif
 } FRAME_CONTEXT;
 
index e5c4bfac9614d1104d0f83c954cad5f3644750e2..856ce46de064080b7bedfd4f79f786303a700f22 100644 (file)
@@ -3533,6 +3533,10 @@ static void read_ext_tx_probs(FRAME_CONTEXT *fc, aom_reader *r) {
     for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
       for (k = 0; k < TX_TYPES - 1; ++k)
         av1_diff_update_prob(r, &fc->inter_ext_tx_prob[i][k]);
+#if CONFIG_DAALA_EC
+      av1_tree_to_cdf(av1_ext_tx_tree, fc->inter_ext_tx_prob[i],
+                      fc->inter_ext_tx_cdf[i]);
+#endif
     }
   }
 }
index 063b11eca598b58fb0d3ce2739024c12b72a4083..87ff3519ed5e863f067e437b37dc437fe300db9c 100644 (file)
@@ -1769,14 +1769,19 @@ static void read_inter_frame_mode_info(AV1Decoder *const pbi,
         !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
       FRAME_COUNTS *counts = xd->counts;
       if (inter_block) {
+#if CONFIG_DAALA_EC
+        mbmi->tx_type = av1_ext_tx_inv[aom_read_tree_cdf(
+            r, cm->fc->inter_ext_tx_cdf[mbmi->tx_size], TX_TYPES)];
+#else
         mbmi->tx_type = aom_read_tree(r, av1_ext_tx_tree,
                                       cm->fc->inter_ext_tx_prob[mbmi->tx_size]);
+#endif
         if (counts) ++counts->inter_ext_tx[mbmi->tx_size][mbmi->tx_type];
       } else {
         const TX_TYPE tx_type_nom = intra_mode_to_tx_type_context[mbmi->mode];
 #if CONFIG_DAALA_EC
-      mbmi->tx_type = av1_ext_tx_inv[aom_read_tree_cdf(
-          r, cm->fc->intra_ext_tx_cdf[mbmi->tx_size][tx_type_nom], TX_TYPES)];
+        mbmi->tx_type = av1_ext_tx_inv[aom_read_tree_cdf(
+            r, cm->fc->intra_ext_tx_cdf[mbmi->tx_size][tx_type_nom], TX_TYPES)];
 #else
         mbmi->tx_type = aom_read_tree(
             r, av1_ext_tx_tree,
index 7cc159ff5e601902bada724156a5281dad0aa3c2..eca31d5ddb6d983d2623ec2438a614d47e14ff0f 100644 (file)
@@ -603,6 +603,10 @@ static void update_ext_tx_probs(AV1_COMMON *cm, aom_writer *w) {
     for (i = TX_4X4; i < EXT_TX_SIZES; ++i) {
       prob_diff_update(av1_ext_tx_tree, cm->fc->inter_ext_tx_prob[i],
                        cm->counts.inter_ext_tx[i], TX_TYPES, w);
+#if CONFIG_DAALA_EC
+      av1_tree_to_cdf(av1_ext_tx_tree, cm->fc->inter_ext_tx_prob[i],
+                      cm->fc->inter_ext_tx_cdf[i]);
+#endif
     }
   }
 }
@@ -1458,16 +1462,21 @@ static void pack_inter_mode_mvs(AV1_COMP *cpi, const MODE_INFO *mi,
 #endif  // CONFIG_SUPERTX
         !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
       if (is_inter) {
+#if CONFIG_DAALA_EC
+        aom_write_tree_cdf(w, av1_ext_tx_ind[mbmi->tx_type],
+                           cm->fc->inter_ext_tx_cdf[mbmi->tx_size], TX_TYPES);
+#else
         av1_write_token(w, av1_ext_tx_tree,
                         cm->fc->inter_ext_tx_prob[mbmi->tx_size],
                         &ext_tx_encodings[mbmi->tx_type]);
+#endif
       } else {
 #if CONFIG_DAALA_EC
-      aom_write_tree_cdf(
-          w, av1_ext_tx_ind[mbmi->tx_type],
-          cm->fc->intra_ext_tx_cdf[mbmi->tx_size]
-                                  [intra_mode_to_tx_type_context[mbmi->mode]],
-          TX_TYPES);
+        aom_write_tree_cdf(
+            w, av1_ext_tx_ind[mbmi->tx_type],
+            cm->fc->intra_ext_tx_cdf[mbmi->tx_size]
+                                    [intra_mode_to_tx_type_context[mbmi->mode]],
+            TX_TYPES);
 #else
         av1_write_token(
             w, av1_ext_tx_tree,