[lv_map_multi] simplify update_cdf

remove tmp0 in update_cdf due to the use of EC_MIN_PROB introduced by
Thomas Davies.

further changes to update_cdf include:
1. Start the rate at 3+get_msb(nsymbs) and increase the rate by one at
counts 16 and 32.
2. Check if tmp is less than cdf[i] to avoid shifting a negative number.

Change-Id: I5088ebd450d6e57ec6c3e92bb2f47a078489b947
diff --git a/aom_dsp/prob.h b/aom_dsp/prob.h
index fc732a5..f355f09 100644
--- a/aom_dsp/prob.h
+++ b/aom_dsp/prob.h
@@ -13,6 +13,7 @@
 #define AOM_DSP_PROB_H_
 
 #include <assert.h>
+#include <stdio.h>
 
 #include "./aom_config.h"
 #include "./aom_dsp_common.h"
@@ -221,10 +222,33 @@
   const int rate2 = 5;
   int i, tmp;
   int diff;
+
 #if 1
+#if CONFIG_LV_MAP_MULTI
+  rate = 3 + (cdf[nsymbs] > 15) + (cdf[nsymbs] > 31) + get_msb(nsymbs);
+  tmp = AOM_ICDF(0);
+  (void)rate2;
+  (void)diff;
+
+  // Single loop (faster)
+  for (i = 0; i < nsymbs - 1; ++i) {
+    tmp = (i == val) ? 0 : tmp;
+#if 1
+    if (tmp < cdf[i]) {
+      cdf[i] -= ((cdf[i] - tmp) >> rate);
+    } else {
+      cdf[i] += ((tmp - cdf[i]) >> rate);
+    }
+#else
+    cdf[i] += ((tmp - cdf[i]) >> rate);
+#endif
+  }
+
+#else
   const int tmp0 = 1 << rate2;
   tmp = AOM_ICDF(tmp0);
   diff = ((CDF_PROB_TOP - (nsymbs << rate2)) >> rate) << rate;
+
 // Single loop (faster)
 #if !CONFIG_ANS
   for (i = 0; i < nsymbs - 1; ++i, tmp -= tmp0) {
@@ -237,6 +261,9 @@
     cdf[i] -= ((cdf[i] - tmp) >> rate);
   }
 #endif
+
+#endif
+
 #else
   for (i = 0; i < nsymbs; ++i) {
     tmp = (i + 1) << rate2;
diff --git a/av1/encoder/cost.c b/av1/encoder/cost.c
index 240a16c..a983105 100644
--- a/av1/encoder/cost.c
+++ b/av1/encoder/cost.c
@@ -71,7 +71,12 @@
   int i;
   aom_cdf_prob prev_cdf = 0;
   for (i = 0;; ++i) {
+#if CONFIG_LV_MAP_MULTI
     aom_cdf_prob p15 = AOM_ICDF(cdf[i]) - prev_cdf;
+    p15 = (p15 < EC_MIN_PROB) ? EC_MIN_PROB : p15;
+#else
+    aom_cdf_prob p15 = AOM_ICDF(cdf[i]) - prev_cdf;
+#endif
     prev_cdf = AOM_ICDF(cdf[i]);
 
     if (inv_map)