Clean txb code

Make a couple of functions inlined, and other small changes.

Change-Id: Icd11b20f0fa2ddb14621df401f95cf0ce2f6be28
diff --git a/av1/common/txb_common.c b/av1/common/txb_common.c
index f0ef25b..7980c52 100644
--- a/av1/common/txb_common.c
+++ b/av1/common/txb_common.c
@@ -253,51 +253,6 @@
                                         17, 33, 65, 129, 257, 513 };
 const int16_t k_eob_offset_bits[12] = { 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 
-int av1_get_eob_pos_ctx(TX_TYPE tx_type, int eob_token) {
-  int offset = 0;
-  int tx_class = get_tx_class(tx_type);
-  if (tx_class != TX_CLASS_2D) offset = 11;
-  return eob_token - 1 + offset;
-}
-
-int16_t get_eob_pos_token(int eob, int16_t *extra) {
-  int16_t t;
-
-  if (eob < 3) {
-    t = eob;
-  } else {
-    t = 3;
-    if (eob > 4) {
-      t++;
-    }
-    if (eob > 8) {
-      t++;
-    }
-    if (eob > 16) {
-      t++;
-    }
-    if (eob > 32) {
-      t++;
-    }
-    if (eob > 64) {
-      t++;
-    }
-    if (eob > 128) {
-      t++;
-    }
-    if (eob > 256) {
-      t++;
-    }
-    if (eob > 512) {
-      t++;
-    }
-  }
-
-  *extra = eob - k_eob_group_start[t];
-
-  return t;
-}
-
 // Note: because of the SSE2 optimization, levels[] must be in the range [0,
 // 127], inclusive.
 void av1_get_base_level_counts(const uint8_t *const levels,
diff --git a/av1/common/txb_common.h b/av1/common/txb_common.h
index 4f53a5e..0f20b46 100644
--- a/av1/common/txb_common.h
+++ b/av1/common/txb_common.h
@@ -14,8 +14,6 @@
 
 extern const int16_t k_eob_group_start[12];
 extern const int16_t k_eob_offset_bits[12];
-int16_t get_eob_pos_token(int eob, int16_t *extra);
-int av1_get_eob_pos_ctx(TX_TYPE tx_type, int eob_token);
 
 extern const int8_t av1_coeff_band_4x4[16];
 
@@ -54,16 +52,61 @@
   { 0, 1 }, { 1, 0 }, { 1, 1 }
 };
 
-static INLINE TX_CLASS get_tx_class(TX_TYPE tx_type) {
-  switch (tx_type) {
-    case V_DCT:
-    case V_ADST:
-    case V_FLIPADST: return TX_CLASS_VERT;
-    case H_DCT:
-    case H_ADST:
-    case H_FLIPADST: return TX_CLASS_HORIZ;
-    default: return TX_CLASS_2D;
+static const TX_CLASS tx_type_to_class[TX_TYPES] = {
+  TX_CLASS_2D,     // DCT_DCT
+  TX_CLASS_2D,     // ADST_DCT
+  TX_CLASS_2D,     // DCT_ADST
+  TX_CLASS_2D,     // ADST_ADST
+  TX_CLASS_2D,     // FLIPADST_DCT
+  TX_CLASS_2D,     // DCT_FLIPADST
+  TX_CLASS_2D,     // FLIPADST_FLIPADST
+  TX_CLASS_2D,     // ADST_FLIPADST
+  TX_CLASS_2D,     // FLIPADST_ADST
+  TX_CLASS_2D,     // IDTX
+  TX_CLASS_VERT,   // V_DCT
+  TX_CLASS_HORIZ,  // H_DCT
+  TX_CLASS_VERT,   // V_ADST
+  TX_CLASS_HORIZ,  // H_ADST
+  TX_CLASS_VERT,   // V_FLIPADST
+  TX_CLASS_HORIZ,  // H_FLIPADST
+};
+
+static const int8_t eob_to_pos_small[33] = {
+  0, 1, 2,                                        // 0-2
+  3, 3,                                           // 3-4
+  4, 4, 4, 4,                                     // 5-8
+  5, 5, 5, 5, 5, 5, 5, 5,                         // 9-16
+  6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6  // 17-32
+};
+
+static const int8_t eob_to_pos_large[17] = {
+  6,                               // place holder
+  7,                               // 33-64
+  8,  8,                           // 65-128
+  9,  9,  9,  9,                   // 129-256
+  10, 10, 10, 10, 10, 10, 10, 10,  // 257-512
+  11                               // 513-
+};
+
+static INLINE int get_eob_pos_token(const int eob, int *const extra) {
+  int t;
+
+  if (eob < 33) {
+    t = eob_to_pos_small[eob];
+  } else {
+    const int e = AOMMIN((eob - 1) >> 5, 16);
+    t = eob_to_pos_large[e];
   }
+
+  *extra = eob - k_eob_group_start[t];
+
+  return t;
+}
+
+static INLINE int av1_get_eob_pos_ctx(const TX_TYPE tx_type,
+                                      const int eob_token) {
+  const int offset = (tx_type_to_class[tx_type] == TX_CLASS_2D) ? 0 : 11;
+  return eob_token - 1 + offset;
 }
 
 static INLINE int get_txb_bwl(TX_SIZE tx_size) {
@@ -337,7 +380,7 @@
   int nb_mag[3] = { 0 };
 #if CONFIG_LV_MAP_MULTI && USE_CAUSAL_BR_CTX
   (void)count;
-  const TX_CLASS tx_class = get_tx_class(tx_type);
+  const TX_CLASS tx_class = tx_type_to_class[tx_type];
   get_level_mag_with_txclass(levels, stride, row, col, nb_mag, tx_class);
 
   mag = AOMMIN(nb_mag[0], COEFF_BASE_RANGE + NUM_BASE_LEVELS + 1) +
@@ -496,7 +539,7 @@
   const int coeff_idx = scan[scan_idx];
   const int row = coeff_idx >> bwl;
   const int col = coeff_idx - (row << bwl);
-  const TX_CLASS tx_class = get_tx_class(tx_type);
+  const TX_CLASS tx_class = tx_type_to_class[tx_type];
   const int stats =
 #if USE_CAUSAL_BASE_CTX
       get_nz_mag(levels, bwl, row, col, tx_class);
diff --git a/av1/decoder/decodetxb.c b/av1/decoder/decodetxb.c
index 7776c55..45213af 100644
--- a/av1/decoder/decodetxb.c
+++ b/av1/decoder/decodetxb.c
@@ -46,7 +46,7 @@
   return x - 1;
 }
 
-static INLINE int rec_eob_pos(int16_t eob_token, int16_t extra) {
+static INLINE int rec_eob_pos(const int eob_token, const int extra) {
   int eob = k_eob_group_start[eob_token];
   if (eob > 2) {
     eob += extra;
@@ -115,17 +115,14 @@
       av1_get_tx_type(plane_type, xd, blk_row, blk_col, block, tx_size);
   const SCAN_ORDER *const scan_order = get_scan(cm, tx_size, tx_type, mbmi);
   const int16_t *const scan = scan_order->scan;
+  int dummy;
+  const int max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
+  int eob_extra = 0;
+  int eob_pt = 1;
 
-  int16_t dummy;
-  const int16_t max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
-
-  int16_t eob_extra = 0;
-  int16_t eob_pt = 0;
-  int is_equal = 0;
-
-  for (int i = 1; i < max_eob_pt; i++) {
-    const int eob_pos_ctx = av1_get_eob_pos_ctx(tx_type, i);
-    is_equal = av1_read_record_bin(
+  for (eob_pt = 1; eob_pt < max_eob_pt; eob_pt++) {
+    const int eob_pos_ctx = av1_get_eob_pos_ctx(tx_type, eob_pt);
+    const int is_equal = av1_read_record_bin(
         counts, r, ec_ctx->eob_flag_cdf[txs_ctx][plane_type][eob_pos_ctx], 2,
         ACCT_STR);
     // printf("eob_flag_cdf: %d %d %2d\n", txs_ctx, plane_type, eob_pos_ctx);
@@ -135,13 +132,9 @@
     if (counts) ++counts->eob_flag[txs_ctx][plane_type][eob_pos_ctx][is_equal];
 
     if (is_equal) {
-      eob_pt = i;
       break;
     }
   }
-  if (is_equal == 0) {
-    eob_pt = max_eob_pt;
-  }
 
   // printf("Dec: ");
   if (k_eob_offset_bits[eob_pt] > 0) {
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 599ba36..f968996 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -143,10 +143,9 @@
                             TX_TYPE tx_type, PLANE_TYPE plane,
                             FRAME_CONTEXT *ec_ctx, FRAME_COUNTS *counts,
                             uint8_t allow_update_cdf) {
-  int16_t eob_extra;
-  int16_t eob_pt = get_eob_pos_token(eob, &eob_extra);
-  int16_t dummy;
-  int16_t max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
+  int eob_extra, dummy;
+  const int eob_pt = get_eob_pos_token(eob, &eob_extra);
+  const int max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
   TX_SIZE txs_ctx = get_txsize_entropy_ctx(tx_size);
 
   for (int i = 1; i < max_eob_pt; i++) {
@@ -171,10 +170,9 @@
 
 static int get_eob_cost(int eob, int seg_eob,
                         const LV_MAP_COEFF_COST *txb_costs, TX_TYPE tx_type) {
-  int16_t eob_extra;
-  int16_t eob_pt = get_eob_pos_token(eob, &eob_extra);
-  int16_t dummy;
-  int16_t max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
+  int eob_extra, dummy;
+  const int eob_pt = get_eob_pos_token(eob, &eob_extra);
+  const int max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
   int eob_cost = 0;
 
   // printf("Enc: [%d, %d], (%d, %d) ", seg_eob, eob, eob_pt, eob_extra);
@@ -351,10 +349,9 @@
                     get_min_tx_size(tx_size), w);
 #endif
 
-  int16_t eob_extra;
-  int16_t eob_pt = get_eob_pos_token(eob, &eob_extra);
-  int16_t dummy;
-  int16_t max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
+  int eob_extra, dummy;
+  const int eob_pt = get_eob_pos_token(eob, &eob_extra);
+  const int max_eob_pt = get_eob_pos_token(seg_eob, &dummy);
 
   // printf("Enc: [%d, %d], (%d, %d) ", seg_eob, eob, eob_pt, eob_extra);
   for (int i = 1; i < max_eob_pt; i++) {
@@ -865,8 +862,8 @@
     const int row = coeff_idx >> bwl;
     const int col = coeff_idx - (row << bwl);
 
-    txb_cache->nz_count_arr[coeff_idx] =
-        get_nz_count(levels, bwl, row, col, get_tx_class(txb_info->tx_type));
+    txb_cache->nz_count_arr[coeff_idx] = get_nz_count(
+        levels, bwl, row, col, tx_type_to_class[txb_info->tx_type]);
 
     txb_cache->nz_ctx_arr[coeff_idx] = get_nz_map_ctx_from_stats(
 #if USE_CAUSAL_BASE_CTX