daala_ec: Convert the encoder to use iCDFs

This only changes the internal coding engine. We convert CDFs into
iCDFs at the "bool" writer <-> daala_ec boundary.

Encoder output should not change, and all streams should remain
decodable without decoder changes.

Change-Id: Id3ac7352926497bf6f7bc371ab9bc76e9a3569d5
diff --git a/aom_dsp/entenc.c b/aom_dsp/entenc.c
index 399252d..a350f27 100644
--- a/aom_dsp/entenc.c
+++ b/aom_dsp/entenc.c
@@ -146,27 +146,30 @@
   fl: The cumulative frequency of all symbols that come before the one to be
        encoded.
   fh: The cumulative frequency of all symbols up to and including the one to
-       be encoded.*/
+       be encoded.
+  {EC_SMALLMUL} Both values are 32768 minus that.*/
 static void od_ec_encode_q15(od_ec_enc *enc, unsigned fl, unsigned fh) {
   od_ec_window l;
   unsigned r;
   unsigned u;
   unsigned v;
-  OD_ASSERT(fl < fh);
-  OD_ASSERT(fh <= 32768U);
   l = enc->low;
   r = enc->rng;
   OD_ASSERT(32768U <= r);
 #if CONFIG_EC_SMALLMUL
-  if (fl > 0) {
-    u = (r >> 8) * (uint32_t)(32768U - fl) >> 7;
-    v = (r >> 8) * (uint32_t)(32768U - fh) >> 7;
+  OD_ASSERT(fh < fl);
+  OD_ASSERT(fl <= 32768U);
+  if (fl < 32768U) {
+    u = (r >> 8) * (uint32_t)fl >> 7;
+    v = (r >> 8) * (uint32_t)fh >> 7;
     l += r - u;
     r = u - v;
   } else {
-    r -= (r >> 8) * (uint32_t)(32768U - fh) >> 7;
+    r -= (r >> 8) * (uint32_t)fh >> 7;
   }
 #else
+  OD_ASSERT(fl < fh);
+  OD_ASSERT(fh <= 32768U);
   u = fl * (uint32_t)r >> 15;
   v = fh * (uint32_t)r >> 15;
   r = v - u;
@@ -174,33 +177,37 @@
 #endif
   od_ec_enc_normalize(enc, l, r);
 #if OD_MEASURE_EC_OVERHEAD
-  enc->entropy -= OD_LOG2((double)(fh - fl) / 32768.);
+  enc->entropy -= OD_LOG2((double)(OD_ICDF(fh) - OD_ICDF(fl)) / 32768.);
   enc->nb_symbols++;
 #endif
 }
 
-/*Encode a bit that has an fz probability of being a zero in Q15.
+/*Encode a single binary value.
   val: The value to encode (0 or 1).
-  fz: The probability that val is zero, scaled by 32768.*/
-void od_ec_encode_bool_q15(od_ec_enc *enc, int val, unsigned fz) {
+  {EC_SMALLMUL} f: The probability that the val is one, scaled by 32768.
+  {else} f: The probability that val is zero, scaled by 32768.*/
+void od_ec_encode_bool_q15(od_ec_enc *enc, int val, unsigned f) {
   od_ec_window l;
   unsigned r;
   unsigned v;
-  OD_ASSERT(0 < fz);
-  OD_ASSERT(fz < 32768U);
+  OD_ASSERT(0 < f);
+  OD_ASSERT(f < 32768U);
   l = enc->low;
   r = enc->rng;
   OD_ASSERT(32768U <= r);
 #if CONFIG_EC_SMALLMUL
-  v = r - ((r >> 8) * (uint32_t)(32768U - fz) >> 7);
+  v = (r >> 8) * (uint32_t)f >> 7;
+  if (val) l += r - v;
+  r = val ? v : r - v;
 #else
-  v = fz * (uint32_t)r >> 15;
-#endif
+  v = f * (uint32_t)r >> 15;
   if (val) l += v;
   r = val ? r - v : v;
+#endif
   od_ec_enc_normalize(enc, l, r);
 #if OD_MEASURE_EC_OVERHEAD
-  enc->entropy -= OD_LOG2((double)(val ? 32768 - fz : fz) / 32768.);
+  enc->entropy -=
+      OD_LOG2((double)(val ? 32768 - OD_ICDF(f) : OD_ICDF(f)) / 32768.);
   enc->nb_symbols++;
 #endif
 }
@@ -218,8 +225,8 @@
   (void)nsyms;
   OD_ASSERT(s >= 0);
   OD_ASSERT(s < nsyms);
-  OD_ASSERT(cdf[nsyms - 1] == 32768U);
-  od_ec_encode_q15(enc, s > 0 ? cdf[s - 1] : 0, cdf[s]);
+  OD_ASSERT(cdf[nsyms - 1] == OD_ICDF(32768U));
+  od_ec_encode_q15(enc, s > 0 ? cdf[s - 1] : OD_ICDF(0), cdf[s]);
 }
 
 #if CONFIG_RAWBITS