detokenize: Refactor identical switch cases.

BUG=aomedia:442

Change-Id: If29250966a210495ca07c3959c1562447a00f90c
diff --git a/av1/decoder/detokenize.c b/av1/decoder/detokenize.c
index d86ed62..494f168 100644
--- a/av1/decoder/detokenize.c
+++ b/av1/decoder/detokenize.c
@@ -66,6 +66,40 @@
 
 #endif
 
+static int token_to_value(aom_reader *const r, int token, TX_SIZE tx_size,
+                          int bit_depth) {
+#if !CONFIG_HIGHBITDEPTH
+  assert(bit_depth == 8);
+#endif  // !CONFIG_HIGHBITDEPTH
+
+  switch (token) {
+    case ZERO_TOKEN:
+    case ONE_TOKEN:
+    case TWO_TOKEN:
+    case THREE_TOKEN:
+    case FOUR_TOKEN: return token;
+    case CATEGORY1_TOKEN:
+      return CAT1_MIN_VAL + READ_COEFF(av1_cat1_prob, av1_cat1_cdf, 1, r);
+    case CATEGORY2_TOKEN:
+      return CAT2_MIN_VAL + READ_COEFF(av1_cat2_prob, av1_cat2_cdf, 2, r);
+    case CATEGORY3_TOKEN:
+      return CAT3_MIN_VAL + READ_COEFF(av1_cat3_prob, av1_cat3_cdf, 3, r);
+    case CATEGORY4_TOKEN:
+      return CAT4_MIN_VAL + READ_COEFF(av1_cat4_prob, av1_cat4_cdf, 4, r);
+    case CATEGORY5_TOKEN:
+      return CAT5_MIN_VAL + READ_COEFF(av1_cat5_prob, av1_cat5_cdf, 5, r);
+    case CATEGORY6_TOKEN: {
+      const int skip_bits = (int)sizeof(av1_cat6_prob) -
+                            av1_get_cat6_extrabits_size(tx_size, bit_depth);
+      return CAT6_MIN_VAL + READ_COEFF(av1_cat6_prob + skip_bits, av1_cat6_cdf,
+                                       18 - skip_bits, r);
+    }
+    default:
+      assert(0);  // Invalid token.
+      return -1;
+  }
+}
+
 static int decode_coefs(MACROBLOCKD *xd, PLANE_TYPE type, tran_low_t *dqcoeff,
                         TX_SIZE tx_size, TX_TYPE tx_type, const int16_t *dq,
 #if CONFIG_NEW_QUANT
@@ -118,7 +152,6 @@
   int dq_shift;
   int v, token;
   int16_t dqv = dq[0];
-  int more_data = 1;
 #if CONFIG_NEW_QUANT
   const tran_low_t *dqv_val = &dq_val[0][0];
 #endif  // CONFIG_NEW_QUANT
@@ -142,6 +175,7 @@
 #if CONFIG_NEW_TOKENSET
   band = *band_translate++;
 
+  int more_data = 1;
   while (more_data) {
     int comb_token;
     int last_pos = (c + 1 == max_eob);
@@ -204,39 +238,12 @@
     *max_scan_line = AOMMAX(*max_scan_line, scan[c]);
     token_cache[scan[c]] = av1_pt_energy_class[token];
 
-    switch (token) {
-      case ZERO_TOKEN:
-      case ONE_TOKEN:
-      case TWO_TOKEN:
-      case THREE_TOKEN:
-      case FOUR_TOKEN: val = token; break;
-      case CATEGORY1_TOKEN:
-        val = CAT1_MIN_VAL + READ_COEFF(av1_cat1_prob, av1_cat1_cdf, 1, r);
-        break;
-      case CATEGORY2_TOKEN:
-        val = CAT2_MIN_VAL + READ_COEFF(av1_cat2_prob, av1_cat2_cdf, 2, r);
-        break;
-      case CATEGORY3_TOKEN:
-        val = CAT3_MIN_VAL + READ_COEFF(av1_cat3_prob, av1_cat3_cdf, 3, r);
-        break;
-      case CATEGORY4_TOKEN:
-        val = CAT4_MIN_VAL + READ_COEFF(av1_cat4_prob, av1_cat4_cdf, 4, r);
-        break;
-      case CATEGORY5_TOKEN:
-        val = CAT5_MIN_VAL + READ_COEFF(av1_cat5_prob, av1_cat5_cdf, 5, r);
-        break;
-      case CATEGORY6_TOKEN: {
+    val = token_to_value(r, token, tx_size,
 #if CONFIG_HIGHBITDEPTH
-        const int skip_bits = (int)sizeof(av1_cat6_prob) -
-                              av1_get_cat6_extrabits_size(tx_size, xd->bd);
+                         xd->bd);
 #else
-        const int skip_bits = (int)sizeof(av1_cat6_prob) -
-                              av1_get_cat6_extrabits_size(tx_size, 8);
-#endif
-        val = CAT6_MIN_VAL + READ_COEFF(av1_cat6_prob + skip_bits, av1_cat6_cdf,
-                                        18 - skip_bits, r);
-      } break;
-    }
+                         8);
+#endif  // CONFIG_HIGHBITDEPTH
 
 #if CONFIG_NEW_QUANT
     v = av1_dequant_abscoeff_nuq(val, dqv, dqv_val);
@@ -303,39 +310,14 @@
     token = ONE_TOKEN +
             aom_read_symbol(r, *cdf, CATEGORY6_TOKEN - ONE_TOKEN + 1, ACCT_STR);
     INCREMENT_COUNT(ONE_TOKEN + (token > ONE_TOKEN));
-    switch (token) {
-      case ONE_TOKEN:
-      case TWO_TOKEN:
-      case THREE_TOKEN:
-      case FOUR_TOKEN: val = token; break;
-      case CATEGORY1_TOKEN:
-        val = CAT1_MIN_VAL + READ_COEFF(av1_cat1_prob, av1_cat1_cdf, 1, r);
-        break;
-      case CATEGORY2_TOKEN:
-        val = CAT2_MIN_VAL + READ_COEFF(av1_cat2_prob, av1_cat2_cdf, 2, r);
-        break;
-      case CATEGORY3_TOKEN:
-        val = CAT3_MIN_VAL + READ_COEFF(av1_cat3_prob, av1_cat3_cdf, 3, r);
-        break;
-      case CATEGORY4_TOKEN:
-        val = CAT4_MIN_VAL + READ_COEFF(av1_cat4_prob, av1_cat4_cdf, 4, r);
-        break;
-      case CATEGORY5_TOKEN:
-        val = CAT5_MIN_VAL + READ_COEFF(av1_cat5_prob, av1_cat5_cdf, 5, r);
-        break;
-      case CATEGORY6_TOKEN: {
+    assert(token != ZERO_TOKEN);
+    val = token_to_value(r, token, tx_size,
 #if CONFIG_HIGHBITDEPTH
-        const int skip_bits = (int)sizeof(av1_cat6_prob) -
-                              av1_get_cat6_extrabits_size(tx_size, xd->bd);
+                         xd->bd);
 #else
-        const int skip_bits = (int)sizeof(av1_cat6_prob) -
-                              av1_get_cat6_extrabits_size(tx_size, 8);
-#endif
-        val = CAT6_MIN_VAL + READ_COEFF(av1_cat6_prob + skip_bits, av1_cat6_cdf,
-                                        18 - skip_bits, r);
-      } break;
-    }
-#else  // CONFIG_EC_MULTISYMBOL
+                         8);
+#endif  // CONFIG_HIGHBITDEPTH
+#else   // CONFIG_EC_MULTISYMBOL
     if (!aom_read(r, prob[ONE_CONTEXT_NODE], ACCT_STR)) {
       INCREMENT_COUNT(ONE_TOKEN);
       token = ONE_TOKEN;
@@ -344,38 +326,13 @@
       INCREMENT_COUNT(TWO_TOKEN);
       token = aom_read_tree(r, av1_coef_con_tree,
                             av1_pareto8_full[prob[PIVOT_NODE] - 1], ACCT_STR);
-      switch (token) {
-        case TWO_TOKEN:
-        case THREE_TOKEN:
-        case FOUR_TOKEN: val = token; break;
-        case CATEGORY1_TOKEN:
-          val = CAT1_MIN_VAL + read_coeff(av1_cat1_prob, 1, r);
-          break;
-        case CATEGORY2_TOKEN:
-          val = CAT2_MIN_VAL + read_coeff(av1_cat2_prob, 2, r);
-          break;
-        case CATEGORY3_TOKEN:
-          val = CAT3_MIN_VAL + read_coeff(av1_cat3_prob, 3, r);
-          break;
-        case CATEGORY4_TOKEN:
-          val = CAT4_MIN_VAL + read_coeff(av1_cat4_prob, 4, r);
-          break;
-        case CATEGORY5_TOKEN:
-          val = CAT5_MIN_VAL + read_coeff(av1_cat5_prob, 5, r);
-          break;
-        case CATEGORY6_TOKEN: {
+      assert(token != ZERO_TOKEN && token != ONE_TOKEN);
+      val = token_to_value(r, token, tx_size,
 #if CONFIG_HIGHBITDEPTH
-          const int skip_bits = (int)sizeof(av1_cat6_prob) -
-                                av1_get_cat6_extrabits_size(tx_size, xd->bd);
+                           xd->bd);
 #else
-          const int skip_bits = (int)sizeof(av1_cat6_prob) -
-                                av1_get_cat6_extrabits_size(tx_size, 8);
-#endif
-          val = CAT6_MIN_VAL +
-                read_coeff(av1_cat6_prob + skip_bits, 18 - skip_bits, r);
-          break;
-        }
-      }
+                           8);
+#endif  // CONFIG_HIGHBITDEPTH
     }
 #endif  // CONFIG_EC_MULTISYMBOL
 #if CONFIG_NEW_QUANT