Migrate bitreader to the interface from aom/master

Change-Id: I7232f9ae3d97e730f66e4b80f550192e3ef7230b
diff --git a/aom_dsp/bitreader.h b/aom_dsp/bitreader.h
index 6092421..d189e74 100644
--- a/aom_dsp/bitreader.h
+++ b/aom_dsp/bitreader.h
@@ -12,45 +12,90 @@
 #ifndef AOM_DSP_BITREADER_H_
 #define AOM_DSP_BITREADER_H_
 
+#include <assert.h>
+
 #include "./aom_config.h"
 #include "aom/aomdx.h"
 #include "aom/aom_integer.h"
+#if CONFIG_ANS
+#include "aom_dsp/ans.h"
+#else
 #include "aom_dsp/dkboolreader.h"
+#endif
 #include "aom_dsp/prob.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+#if CONFIG_ANS
+typedef struct AnsDecoder aom_reader;
+#else
 typedef struct aom_dk_reader aom_reader;
+#endif
 
 static INLINE int aom_reader_init(aom_reader *r, const uint8_t *buffer,
                                   size_t size, aom_decrypt_cb decrypt_cb,
                                   void *decrypt_state) {
+#if CONFIG_ANS
+  (void)decrypt_cb;
+  (void)decrypt_state;
+  assert(size <= INT_MAX);
+  return ans_read_init(r, buffer, size);
+#else
   return aom_dk_reader_init(r, buffer, size, decrypt_cb, decrypt_state);
+#endif
 }
 
 static INLINE const uint8_t *aom_reader_find_end(aom_reader *r) {
+#if CONFIG_ANS
+  (void)r;
+  assert(0 && "Use the raw buffer size with ANS");
+  return NULL;
+#else
   return aom_dk_reader_find_end(r);
+#endif
 }
 
 static INLINE int aom_reader_has_error(aom_reader *r) {
+#if CONFIG_ANS
+  return ans_reader_has_error(r);
+#else
   return aom_dk_reader_has_error(r);
+#endif
 }
 
 static INLINE int aom_read(aom_reader *r, int prob) {
+#if CONFIG_ANS
+  return uabs_read(r, prob);
+#else
   return aom_dk_read(r, prob);
+#endif
 }
 
-static INLINE int aom_read_bit(aom_reader *r) { return aom_dk_read_bit(r); }
+static INLINE int aom_read_bit(aom_reader *r) {
+#if CONFIG_ANS
+  return uabs_read_bit(r);  // Non trivial optimization at half probability
+#else
+  return aom_dk_read_bit(r);
+#endif
+}
 
 static INLINE int aom_read_literal(aom_reader *r, int bits) {
+#if CONFIG_ANS
+  return uabs_read_literal(r, bits);
+#else
   return aom_dk_read_literal(r, bits);
+#endif
 }
 
 static INLINE int aom_read_tree(aom_reader *r, const aom_tree_index *tree,
                                 const aom_prob *probs) {
+#if CONFIG_ANS
+  return uabs_read_tree(r, tree, probs);
+#else
   return aom_dk_read_tree(r, tree, probs);
+#endif
 }
 
 #ifdef __cplusplus