]> granicus.if.org Git - libvpx/commitdiff
Migrate bitreader to the interface from aom/master
authorAlex Converse <aconverse@google.com>
Fri, 23 Sep 2016 21:21:02 +0000 (14:21 -0700)
committerAlex Converse <aconverse@google.com>
Mon, 26 Sep 2016 19:19:11 +0000 (12:19 -0700)
Change-Id: I7232f9ae3d97e730f66e4b80f550192e3ef7230b

aom_dsp/bitreader.h
test/av1_ans_test.cc

index 609242188eb14cbea703148e35b6b9541d961b99..d189e745df7b3fe0aa23073e2d47c9289878f910 100644 (file)
 #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
index b0cec902351d580574c1aa5a221bb75051462627..75314ff1fd4b195bef8bbd4d41355333a6066cf4 100644 (file)
@@ -22,6 +22,7 @@
 #include "aom_dsp/ans.h"
 #include "aom_dsp/bitreader.h"
 #include "aom_dsp/bitwriter.h"
+#include "aom_dsp/dkboolreader.h"
 #include "aom_dsp/dkboolwriter.h"
 #include "av1/encoder/treewriter.h"
 #include "test/acm_random.h"
@@ -127,7 +128,7 @@ bool check_uabs(const PvVec &pv_vec, uint8_t *buf) {
 
 bool check_aombool(const PvVec &pv_vec, uint8_t *buf) {
   aom_dk_writer w;
-  aom_reader r;
+  aom_dk_reader r;
   aom_dk_start_encode(&w, buf);
 
   std::clock_t start = std::clock();
@@ -137,10 +138,10 @@ bool check_aombool(const PvVec &pv_vec, uint8_t *buf) {
   std::clock_t enc_time = std::clock() - start;
   aom_dk_stop_encode(&w);
   bool okay = true;
-  aom_reader_init(&r, buf, w.pos, NULL, NULL);
+  aom_dk_reader_init(&r, buf, w.pos, NULL, NULL);
   start = std::clock();
   for (PvVec::const_iterator it = pv_vec.begin(); it != pv_vec.end(); ++it) {
-    okay &= aom_read(&r, 256 - it->first) == it->second;
+    okay &= aom_dk_read(&r, 256 - it->first) == it->second;
   }
   std::clock_t dec_time = std::clock() - start;
   printf("AOM size %d enc_time %f dec_time %f\n", w.pos,
@@ -276,7 +277,7 @@ void build_tpb(aom_prob probs[/*num_syms*/],
 bool check_aomtree(const std::vector<int> &sym_vec, const rans_sym *sym_tab,
                    uint8_t *buf) {
   aom_dk_writer w;
-  aom_reader r;
+  aom_dk_reader r;
   aom_dk_start_encode(&w, buf);
 
   aom_prob probs[kDistinctSyms];
@@ -291,11 +292,11 @@ bool check_aomtree(const std::vector<int> &sym_vec, const rans_sym *sym_tab,
   }
   std::clock_t enc_time = std::clock() - start;
   aom_dk_stop_encode(&w);
-  aom_reader_init(&r, buf, w.pos, NULL, NULL);
+  aom_dk_reader_init(&r, buf, w.pos, NULL, NULL);
   start = std::clock();
   for (std::vector<int>::const_iterator it = sym_vec.begin();
        it != sym_vec.end(); ++it) {
-    if (aom_read_tree(&r, tree, probs) != *it) return false;
+    if (aom_dk_read_tree(&r, tree, probs) != *it) return false;
   }
   std::clock_t dec_time = std::clock() - start;
   printf("AOMtree size %u enc_time %f dec_time %f\n", w.pos,