EC_ADAPT: improved symbol adaptation.

Place a floor under symbol probabilities and
modify adaptation rate.

Change-Id: Ic9cf6d9fadfc3bf1f3027bc3d2bb198526441591
diff --git a/aom_dsp/prob.h b/aom_dsp/prob.h
index 129650a..28ea49c 100644
--- a/aom_dsp/prob.h
+++ b/aom_dsp/prob.h
@@ -137,37 +137,17 @@
 
 #if CONFIG_EC_ADAPT
 static INLINE void update_cdf(aom_cdf_prob *cdf, int val, int nsymbs) {
-  const int rate = 3 + get_msb(nsymbs);
-  // Daala method
-  int i, tmp;
-  for (i = 0; i < val; ++i) {
-    tmp = 2 - (1 << rate) + i;
-    cdf[i] -= (cdf[i] - tmp) >> rate;
+  const int rate = 4 + get_msb(nsymbs);
+  int i, diff, tmp;
+  for (i = 0; i < nsymbs; ++i) {
+    tmp = (i + 1) << (12 - rate);
+    cdf[i] -= ((cdf[i] - tmp) >> rate);
   }
-  for (i = val; i < nsymbs; ++i) {
-    tmp = -(1 << rate) + 32768 + (1 << rate) - ((nsymbs - 1) - i);
-    cdf[i] -= (cdf[i] - tmp) >> rate;
-  }
+  diff = 32768 - cdf[nsymbs - 1];
 
-  // Slightly better
-  //  int prob[16];
-  //  int i;
-  //  int diff;
-  //  prob[0] = cdf[0];
-  //  for (i=1; i<nsymbs; ++i)
-  //    prob[i] = cdf[i] - cdf[i-1];
-  //
-  //  for (i=0; i<nsymbs; ++i) {
-  //    prob[i] -= (prob[i] >> rate);
-  //    prob[i] = AOMMAX(prob[i],1);
-  //    cdf[i] = i==0 ? prob[i] : cdf[i-1]+prob[i];
-  //  }
-  //  diff = (1<<15) - cdf[nsymbs-1];
-  //
-  //  for (i=val; i<nsymbs; ++i) {
-  //    cdf[i] += diff;
-  //  }
-  //
+  for (i = val; i < nsymbs; ++i) {
+    cdf[i] += diff;
+  }
 }
 #endif