highbitdepth: deduplicate extrabits

Change-Id: Ib1777433c10e3b64f939c533c12a89dfc839bc6a
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 99717d2..b634ee9 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -37,26 +37,10 @@
 const aom_prob av1_cat3_prob[] = { 173, 148, 140 };
 const aom_prob av1_cat4_prob[] = { 176, 155, 140, 135 };
 const aom_prob av1_cat5_prob[] = { 180, 157, 141, 134, 130 };
-const aom_prob av1_cat6_prob[] = { 254, 254, 254, 252, 249, 243, 230,
-                                   196, 177, 153, 140, 133, 130, 129 };
-#if CONFIG_AOM_HIGHBITDEPTH
-const aom_prob av1_cat1_prob_high10[] = { 159 };
-const aom_prob av1_cat2_prob_high10[] = { 165, 145 };
-const aom_prob av1_cat3_prob_high10[] = { 173, 148, 140 };
-const aom_prob av1_cat4_prob_high10[] = { 176, 155, 140, 135 };
-const aom_prob av1_cat5_prob_high10[] = { 180, 157, 141, 134, 130 };
-const aom_prob av1_cat6_prob_high10[] = {
-  255, 255, 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
+const aom_prob av1_cat6_prob[] = {
+  255, 255, 255, 255, 254, 254, 254, 252, 249,
+  243, 230, 196, 177, 153, 140, 133, 130, 129
 };
-const aom_prob av1_cat1_prob_high12[] = { 159 };
-const aom_prob av1_cat2_prob_high12[] = { 165, 145 };
-const aom_prob av1_cat3_prob_high12[] = { 173, 148, 140 };
-const aom_prob av1_cat4_prob_high12[] = { 176, 155, 140, 135 };
-const aom_prob av1_cat5_prob_high12[] = { 180, 157, 141, 134, 130 };
-const aom_prob av1_cat6_prob_high12[] = { 255, 255, 255, 255, 254, 254,
-                                          254, 252, 249, 243, 230, 196,
-                                          177, 153, 140, 133, 130, 129 };
-#endif
 
 const uint16_t band_count_table[TX_SIZES_ALL][8] = {
 #if CONFIG_CB4X4
diff --git a/av1/common/entropy.h b/av1/common/entropy.h
index fe536e5..8dc0a63 100644
--- a/av1/common/entropy.h
+++ b/av1/common/entropy.h
@@ -97,22 +97,7 @@
 DECLARE_ALIGNED(16, extern const uint8_t, av1_cat3_prob[3]);
 DECLARE_ALIGNED(16, extern const uint8_t, av1_cat4_prob[4]);
 DECLARE_ALIGNED(16, extern const uint8_t, av1_cat5_prob[5]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat6_prob[14]);
-
-#if CONFIG_AOM_HIGHBITDEPTH
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat1_prob_high10[1]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat2_prob_high10[2]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat3_prob_high10[3]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat4_prob_high10[4]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat5_prob_high10[5]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat6_prob_high10[16]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat1_prob_high12[1]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat2_prob_high12[2]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat3_prob_high12[3]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat4_prob_high12[4]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat5_prob_high12[5]);
-DECLARE_ALIGNED(16, extern const uint8_t, av1_cat6_prob_high12[18]);
-#endif  // CONFIG_AOM_HIGHBITDEPTH
+DECLARE_ALIGNED(16, extern const uint8_t, av1_cat6_prob[18]);
 
 #define EOB_MODEL_TOKEN 3
 
@@ -125,10 +110,6 @@
 
 // indexed by token value
 extern const av1_extra_bit av1_extra_bits[ENTROPY_TOKENS];
-#if CONFIG_AOM_HIGHBITDEPTH
-extern const av1_extra_bit av1_extra_bits_high10[ENTROPY_TOKENS];
-extern const av1_extra_bit av1_extra_bits_high12[ENTROPY_TOKENS];
-#endif  // CONFIG_AOM_HIGHBITDEPTH
 
 #define DCT_MAX_VALUE 16384
 #if CONFIG_AOM_HIGHBITDEPTH
diff --git a/av1/decoder/detokenize.c b/av1/decoder/detokenize.c
index e241802..98f4d2d 100644
--- a/av1/decoder/detokenize.c
+++ b/av1/decoder/detokenize.c
@@ -108,12 +108,6 @@
 #if CONFIG_NEW_QUANT
   const tran_low_t *dqv_val = &dq_val[0][0];
 #endif  // CONFIG_NEW_QUANT
-  const uint8_t *cat1_prob;
-  const uint8_t *cat2_prob;
-  const uint8_t *cat3_prob;
-  const uint8_t *cat4_prob;
-  const uint8_t *cat5_prob;
-  const uint8_t *cat6_prob;
   (void)tx_type;
 #if CONFIG_AOM_QM
   (void)iqmatrix;
@@ -127,40 +121,6 @@
 #endif
   }
 
-#if CONFIG_AOM_HIGHBITDEPTH
-  if (xd->bd > AOM_BITS_8) {
-    if (xd->bd == AOM_BITS_10) {
-      cat1_prob = av1_cat1_prob_high10;
-      cat2_prob = av1_cat2_prob_high10;
-      cat3_prob = av1_cat3_prob_high10;
-      cat4_prob = av1_cat4_prob_high10;
-      cat5_prob = av1_cat5_prob_high10;
-      cat6_prob = av1_cat6_prob_high10;
-    } else {
-      cat1_prob = av1_cat1_prob_high12;
-      cat2_prob = av1_cat2_prob_high12;
-      cat3_prob = av1_cat3_prob_high12;
-      cat4_prob = av1_cat4_prob_high12;
-      cat5_prob = av1_cat5_prob_high12;
-      cat6_prob = av1_cat6_prob_high12;
-    }
-  } else {
-    cat1_prob = av1_cat1_prob;
-    cat2_prob = av1_cat2_prob;
-    cat3_prob = av1_cat3_prob;
-    cat4_prob = av1_cat4_prob;
-    cat5_prob = av1_cat5_prob;
-    cat6_prob = av1_cat6_prob;
-  }
-#else
-  cat1_prob = av1_cat1_prob;
-  cat2_prob = av1_cat2_prob;
-  cat3_prob = av1_cat3_prob;
-  cat4_prob = av1_cat4_prob;
-  cat5_prob = av1_cat5_prob;
-  cat6_prob = av1_cat6_prob;
-#endif
-
   dq_shift = get_tx_scale(tx_size);
 
 #if CONFIG_NEW_TOKENSET
@@ -218,39 +178,30 @@
       case THREE_TOKEN:
       case FOUR_TOKEN: val = token; break;
       case CATEGORY1_TOKEN:
-        val = CAT1_MIN_VAL + read_coeff(cat1_prob, 1, r);
+        val = CAT1_MIN_VAL + read_coeff(av1_cat1_prob, 1, r);
         break;
       case CATEGORY2_TOKEN:
-        val = CAT2_MIN_VAL + read_coeff(cat2_prob, 2, r);
+        val = CAT2_MIN_VAL + read_coeff(av1_cat2_prob, 2, r);
         break;
       case CATEGORY3_TOKEN:
-        val = CAT3_MIN_VAL + read_coeff(cat3_prob, 3, r);
+        val = CAT3_MIN_VAL + read_coeff(av1_cat3_prob, 3, r);
         break;
       case CATEGORY4_TOKEN:
-        val = CAT4_MIN_VAL + read_coeff(cat4_prob, 4, r);
+        val = CAT4_MIN_VAL + read_coeff(av1_cat4_prob, 4, r);
         break;
       case CATEGORY5_TOKEN:
-        val = CAT5_MIN_VAL + read_coeff(cat5_prob, 5, r);
+        val = CAT5_MIN_VAL + read_coeff(av1_cat5_prob, 5, r);
         break;
       case CATEGORY6_TOKEN: {
-        const int skip_bits = TX_SIZES - 1 - txsize_sqr_up_map[tx_size];
-        const uint8_t *cat6p = cat6_prob + skip_bits;
 #if CONFIG_AOM_HIGHBITDEPTH
-        switch (xd->bd) {
-          case AOM_BITS_8:
-            val = CAT6_MIN_VAL + read_coeff(cat6p, 14 - skip_bits, r);
-            break;
-          case AOM_BITS_10:
-            val = CAT6_MIN_VAL + read_coeff(cat6p, 16 - skip_bits, r);
-            break;
-          case AOM_BITS_12:
-            val = CAT6_MIN_VAL + read_coeff(cat6p, 18 - skip_bits, r);
-            break;
-          default: assert(0); return -1;
-        }
+        const int skip_bits =
+            TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - xd->bd);
 #else
-        val = CAT6_MIN_VAL + read_coeff(cat6p, 14 - skip_bits, r);
+        const int skip_bits =
+            TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - 8);
 #endif
+        val = CAT6_MIN_VAL +
+              read_coeff(av1_cat6_prob + skip_bits, 18 - skip_bits, r);
       } break;
     }
 
@@ -325,39 +276,30 @@
       case THREE_TOKEN:
       case FOUR_TOKEN: val = token; break;
       case CATEGORY1_TOKEN:
-        val = CAT1_MIN_VAL + read_coeff(cat1_prob, 1, r);
+        val = CAT1_MIN_VAL + read_coeff(av1_cat1_prob, 1, r);
         break;
       case CATEGORY2_TOKEN:
-        val = CAT2_MIN_VAL + read_coeff(cat2_prob, 2, r);
+        val = CAT2_MIN_VAL + read_coeff(av1_cat2_prob, 2, r);
         break;
       case CATEGORY3_TOKEN:
-        val = CAT3_MIN_VAL + read_coeff(cat3_prob, 3, r);
+        val = CAT3_MIN_VAL + read_coeff(av1_cat3_prob, 3, r);
         break;
       case CATEGORY4_TOKEN:
-        val = CAT4_MIN_VAL + read_coeff(cat4_prob, 4, r);
+        val = CAT4_MIN_VAL + read_coeff(av1_cat4_prob, 4, r);
         break;
       case CATEGORY5_TOKEN:
-        val = CAT5_MIN_VAL + read_coeff(cat5_prob, 5, r);
+        val = CAT5_MIN_VAL + read_coeff(av1_cat5_prob, 5, r);
         break;
       case CATEGORY6_TOKEN: {
-        const int skip_bits = TX_SIZES - 1 - txsize_sqr_up_map[tx_size];
-        const uint8_t *cat6p = cat6_prob + skip_bits;
 #if CONFIG_AOM_HIGHBITDEPTH
-        switch (xd->bd) {
-          case AOM_BITS_8:
-            val = CAT6_MIN_VAL + read_coeff(cat6p, 14 - skip_bits, r);
-            break;
-          case AOM_BITS_10:
-            val = CAT6_MIN_VAL + read_coeff(cat6p, 16 - skip_bits, r);
-            break;
-          case AOM_BITS_12:
-            val = CAT6_MIN_VAL + read_coeff(cat6p, 18 - skip_bits, r);
-            break;
-          default: assert(0); return -1;
-        }
+        const int skip_bits =
+            TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - xd->bd);
 #else
-        val = CAT6_MIN_VAL + read_coeff(cat6p, 14 - skip_bits, r);
+        const int skip_bits =
+            TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - 8);
 #endif
+        val = CAT6_MIN_VAL +
+              read_coeff(av1_cat6_prob + skip_bits, 18 - skip_bits, r);
       } break;
     }
 #else  // CONFIG_EC_MULTISYMBOL
@@ -374,39 +316,30 @@
         case THREE_TOKEN:
         case FOUR_TOKEN: val = token; break;
         case CATEGORY1_TOKEN:
-          val = CAT1_MIN_VAL + read_coeff(cat1_prob, 1, r);
+          val = CAT1_MIN_VAL + read_coeff(av1_cat1_prob, 1, r);
           break;
         case CATEGORY2_TOKEN:
-          val = CAT2_MIN_VAL + read_coeff(cat2_prob, 2, r);
+          val = CAT2_MIN_VAL + read_coeff(av1_cat2_prob, 2, r);
           break;
         case CATEGORY3_TOKEN:
-          val = CAT3_MIN_VAL + read_coeff(cat3_prob, 3, r);
+          val = CAT3_MIN_VAL + read_coeff(av1_cat3_prob, 3, r);
           break;
         case CATEGORY4_TOKEN:
-          val = CAT4_MIN_VAL + read_coeff(cat4_prob, 4, r);
+          val = CAT4_MIN_VAL + read_coeff(av1_cat4_prob, 4, r);
           break;
         case CATEGORY5_TOKEN:
-          val = CAT5_MIN_VAL + read_coeff(cat5_prob, 5, r);
+          val = CAT5_MIN_VAL + read_coeff(av1_cat5_prob, 5, r);
           break;
         case CATEGORY6_TOKEN: {
-          const int skip_bits = TX_SIZES - 1 - txsize_sqr_up_map[tx_size];
-          const uint8_t *cat6p = cat6_prob + skip_bits;
 #if CONFIG_AOM_HIGHBITDEPTH
-          switch (xd->bd) {
-            case AOM_BITS_8:
-              val = CAT6_MIN_VAL + read_coeff(cat6p, 14 - skip_bits, r);
-              break;
-            case AOM_BITS_10:
-              val = CAT6_MIN_VAL + read_coeff(cat6p, 16 - skip_bits, r);
-              break;
-            case AOM_BITS_12:
-              val = CAT6_MIN_VAL + read_coeff(cat6p, 18 - skip_bits, r);
-              break;
-            default: assert(0); return -1;
-          }
+          const int skip_bits =
+              TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - xd->bd);
 #else
-          val = CAT6_MIN_VAL + read_coeff(cat6p, 14 - skip_bits, r);
+          const int skip_bits =
+              TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - 8);
 #endif
+          val = CAT6_MIN_VAL +
+                read_coeff(av1_cat6_prob + skip_bits, 18 - skip_bits, r);
           break;
         }
       }
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index b7b8208..eaec9b8 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -819,20 +819,11 @@
   int count = 0;
   const int seg_eob = tx_size_2d[tx_size];
 #endif
-#if CONFIG_AOM_HIGHBITDEPTH
-  const av1_extra_bit *const extra_bits_table =
-      (bit_depth == AOM_BITS_12)
-          ? av1_extra_bits_high12
-          : (bit_depth == AOM_BITS_10) ? av1_extra_bits_high10 : av1_extra_bits;
-#else
-  const av1_extra_bit *const extra_bits_table = av1_extra_bits;
-  (void)bit_depth;
-#endif  // CONFIG_AOM_HIGHBITDEPTH
 
   while (p < stop && p->token != EOSB_TOKEN) {
     const int token = p->token;
     aom_tree_index index = 0;
-    const av1_extra_bit *const extra_bits = &extra_bits_table[token];
+    const av1_extra_bit *const extra_bits = &av1_extra_bits[token];
 
     if (token == BLOCK_Z_TOKEN) {
       aom_write_symbol(w, 0, *p->head_cdf, HEAD_TOKENS + 1);
@@ -855,9 +846,10 @@
       const int bit_string_length = extra_bits->len;  // Length of extra bits to
       // be written excluding
       // the sign bit.
-      int skip_bits = (extra_bits->base_val == CAT6_MIN_VAL)
-                          ? TX_SIZES - 1 - txsize_sqr_up_map[tx_size]
-                          : 0;
+      int skip_bits =
+          (extra_bits->base_val == CAT6_MIN_VAL)
+              ? TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - bit_depth)
+              : 0;
 
       if (bit_string_length > 0) {
         const unsigned char *pb = extra_bits->prob;
@@ -899,15 +891,6 @@
   int count = 0;
   const int seg_eob = tx_size_2d[tx_size];
 #endif
-#if CONFIG_AOM_HIGHBITDEPTH
-  const av1_extra_bit *const extra_bits_table =
-      (bit_depth == AOM_BITS_12)
-          ? av1_extra_bits_high12
-          : (bit_depth == AOM_BITS_10) ? av1_extra_bits_high10 : av1_extra_bits;
-#else
-  const av1_extra_bit *const extra_bits_table = av1_extra_bits;
-  (void)bit_depth;
-#endif  // CONFIG_AOM_HIGHBITDEPTH
 
   while (p < stop && p->token != EOSB_TOKEN) {
     const int token = p->token;
@@ -917,7 +900,7 @@
     int coef_value = coef_encoding->value;
     int coef_length = coef_encoding->len;
 #endif  // !CONFIG_EC_MULTISYMBOL
-    const av1_extra_bit *const extra_bits = &extra_bits_table[token];
+    const av1_extra_bit *const extra_bits = &av1_extra_bits[token];
 
 #if CONFIG_EC_MULTISYMBOL
     /* skip one or two nodes */
@@ -960,10 +943,10 @@
       const int bit_string_length = extra_bits->len;  // Length of extra bits to
                                                       // be written excluding
                                                       // the sign bit.
-      int skip_bits = (extra_bits->base_val == CAT6_MIN_VAL)
-                          ? TX_SIZES - 1 - txsize_sqr_up_map[tx_size]
-                          : 0;
-
+      int skip_bits =
+          (extra_bits->base_val == CAT6_MIN_VAL)
+              ? TX_SIZES - 1 - txsize_sqr_up_map[tx_size] + (12 - bit_depth)
+              : 0;
       if (bit_string_length > 0) {
         const unsigned char *pb = extra_bits->prob;
         const int value = bit_string >> 1;
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index f97a78f..af832b4 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -271,41 +271,10 @@
   { av1_cat3_prob, 3, CAT3_MIN_VAL, cat3_cost },  // CATEGORY3_TOKEN
   { av1_cat4_prob, 4, CAT4_MIN_VAL, cat4_cost },  // CATEGORY4_TOKEN
   { av1_cat5_prob, 5, CAT5_MIN_VAL, cat5_cost },  // CATEGORY5_TOKEN
-  { av1_cat6_prob, 14, CAT6_MIN_VAL, 0 },         // CATEGORY6_TOKEN
+  { av1_cat6_prob, 18, CAT6_MIN_VAL, 0 },         // CATEGORY6_TOKEN
   { 0, 0, 0, zero_cost }                          // EOB_TOKEN
 };
 
-#if CONFIG_AOM_HIGHBITDEPTH
-const av1_extra_bit av1_extra_bits_high10[ENTROPY_TOKENS] = {
-  { 0, 0, 0, zero_cost },                                // ZERO
-  { 0, 0, 1, sign_cost },                                // ONE
-  { 0, 0, 2, sign_cost },                                // TWO
-  { 0, 0, 3, sign_cost },                                // THREE
-  { 0, 0, 4, sign_cost },                                // FOUR
-  { av1_cat1_prob_high10, 1, CAT1_MIN_VAL, cat1_cost },  // CAT1
-  { av1_cat2_prob_high10, 2, CAT2_MIN_VAL, cat2_cost },  // CAT2
-  { av1_cat3_prob_high10, 3, CAT3_MIN_VAL, cat3_cost },  // CAT3
-  { av1_cat4_prob_high10, 4, CAT4_MIN_VAL, cat4_cost },  // CAT4
-  { av1_cat5_prob_high10, 5, CAT5_MIN_VAL, cat5_cost },  // CAT5
-  { av1_cat6_prob_high10, 16, CAT6_MIN_VAL, 0 },         // CAT6
-  { 0, 0, 0, zero_cost }                                 // EOB
-};
-const av1_extra_bit av1_extra_bits_high12[ENTROPY_TOKENS] = {
-  { 0, 0, 0, zero_cost },                                // ZERO
-  { 0, 0, 1, sign_cost },                                // ONE
-  { 0, 0, 2, sign_cost },                                // TWO
-  { 0, 0, 3, sign_cost },                                // THREE
-  { 0, 0, 4, sign_cost },                                // FOUR
-  { av1_cat1_prob_high12, 1, CAT1_MIN_VAL, cat1_cost },  // CAT1
-  { av1_cat2_prob_high12, 2, CAT2_MIN_VAL, cat2_cost },  // CAT2
-  { av1_cat3_prob_high12, 3, CAT3_MIN_VAL, cat3_cost },  // CAT3
-  { av1_cat4_prob_high12, 4, CAT4_MIN_VAL, cat4_cost },  // CAT4
-  { av1_cat5_prob_high12, 5, CAT5_MIN_VAL, cat5_cost },  // CAT5
-  { av1_cat6_prob_high12, 18, CAT6_MIN_VAL, 0 },         // CAT6
-  { 0, 0, 0, zero_cost }                                 // EOB
-};
-#endif
-
 #if !CONFIG_EC_MULTISYMBOL
 const struct av1_token av1_coef_encodings[ENTROPY_TOKENS] = {
   { 2, 2 },  { 6, 3 },   { 28, 5 },  { 58, 6 },  { 59, 6 },  { 60, 6 },