NEW_TOKENSET: modify trellis and coeff costs.

Since token coding has changed the relationship
between EOB values and non-zero values, coeff costs
and trellis quant need to change to be more accurate.

Change-Id: I27ef400e8290db4c5faa9c21a253575eea7955c4
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index 1a87203..5f4e981 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -92,6 +92,17 @@
     rd_cost1 = RDCOST(rdmult, rddiv, rate1, error1); \
   }
 
+static inline int64_t get_token_bit_costs(
+    unsigned int token_costs[2][COEFF_CONTEXTS][ENTROPY_TOKENS], int skip_eob,
+    int ctx, int token) {
+#if CONFIG_NEW_TOKENSET
+  (void)skip_eob;
+  return token_costs[token == ZERO_TOKEN || token == EOB_TOKEN][ctx][token];
+#else
+  return token_costs[skip_eob][ctx][token];
+#endif
+}
+
 int av1_optimize_b(const AV1_COMMON *cm, MACROBLOCK *mb, int plane, int block,
                    TX_SIZE tx_size, int ctx) {
   MACROBLOCKD *const xd = &mb->e_mbd;
@@ -198,8 +209,10 @@
         /* Consider both possible successor states. */
         if (next < default_eob) {
           pt = get_coef_context(nb, token_cache, i + 1);
-          rate0 += (*token_costs)[0][pt][tokens[next][0].token];
-          rate1 += (*token_costs)[0][pt][tokens[next][1].token];
+          rate0 +=
+              get_token_bit_costs(*token_costs, 0, pt, tokens[next][0].token);
+          rate1 +=
+              get_token_bit_costs(*token_costs, 0, pt, tokens[next][1].token);
         }
         UPDATE_RD_COST();
         /* And pick the best. */
@@ -207,7 +220,8 @@
       } else {
         if (next < default_eob) {
           pt = get_coef_context(nb, token_cache, i + 1);
-          rate0 += (*token_costs)[0][pt][tokens[next][0].token];
+          rate0 +=
+              get_token_bit_costs(*token_costs, 0, pt, tokens[next][0].token);
         }
         best = 0;
       }
@@ -293,12 +307,14 @@
           if (t0 != EOB_TOKEN) {
             token_cache[rc] = av1_pt_energy_class[t0];
             pt = get_coef_context(nb, token_cache, i + 1);
-            rate0 += (*token_costs)[!x][pt][tokens[next][0].token];
+            rate0 += get_token_bit_costs(*token_costs, !x, pt,
+                                         tokens[next][0].token);
           }
           if (t1 != EOB_TOKEN) {
             token_cache[rc] = av1_pt_energy_class[t1];
             pt = get_coef_context(nb, token_cache, i + 1);
-            rate1 += (*token_costs)[!x][pt][tokens[next][1].token];
+            rate1 += get_token_bit_costs(*token_costs, !x, pt,
+                                         tokens[next][1].token);
           }
         }
 
@@ -310,7 +326,8 @@
         if (next < default_eob && t0 != EOB_TOKEN) {
           token_cache[rc] = av1_pt_energy_class[t0];
           pt = get_coef_context(nb, token_cache, i + 1);
-          rate0 += (*token_costs)[!x][pt][tokens[next][0].token];
+          rate0 +=
+              get_token_bit_costs(*token_costs, !x, pt, tokens[next][0].token);
         }
         best = 0;
       }
@@ -383,11 +400,11 @@
       pt = get_coef_context(nb, token_cache, i + 1);
       /* Update the cost of each path if we're past the EOB token. */
       if (t0 != EOB_TOKEN) {
-        tokens[next][0].rate += (*token_costs)[1][pt][t0];
+        tokens[next][0].rate += get_token_bit_costs(*token_costs, 1, pt, t0);
         tokens[next][0].token = ZERO_TOKEN;
       }
       if (t1 != EOB_TOKEN) {
-        tokens[next][1].rate += (*token_costs)[1][pt][t1];
+        tokens[next][1].rate += get_token_bit_costs(*token_costs, 1, pt, t1);
         tokens[next][1].token = ZERO_TOKEN;
       }
       best_index[i][0] = best_index[i][1] = 0;
@@ -409,8 +426,8 @@
   error1 = tokens[next][1].error;
   t0 = tokens[next][0].token;
   t1 = tokens[next][1].token;
-  rate0 += (*token_costs)[0][ctx][t0];
-  rate1 += (*token_costs)[0][ctx][t1];
+  rate0 += get_token_bit_costs(*token_costs, 0, ctx, t0);
+  rate1 += get_token_bit_costs(*token_costs, 0, ctx, t1);
   UPDATE_RD_COST();
   best = rd_cost1 < rd_cost0;
 
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index f1659a6..1320568 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1104,6 +1104,12 @@
   uint8_t token_cache[MAX_TX_SQUARE];
   int pt = coeff_ctx;
   int c, cost;
+#if CONFIG_NEW_TOKENSET
+  const int ref = is_inter_block(mbmi);
+  aom_prob *blockz_probs =
+      cm->fc->blockzero_probs[txsize_sqr_map[tx_size]][type][ref];
+#endif
+
 #if CONFIG_AOM_HIGHBITDEPTH
   const int *cat6_high_cost = av1_get_high_cost_table(xd->bd);
 #else
@@ -1118,8 +1124,12 @@
   (void)cm;
 
   if (eob == 0) {
+#if CONFIG_NEW_TOKENSET
     // single eob token
+    cost = av1_cost_bit(blockz_probs[pt], 0);
+#else
     cost = token_costs[0][0][pt][EOB_TOKEN];
+#endif
   } else {
     if (use_fast_coef_costing) {
       int band_left = *band_count++;