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