]> granicus.if.org Git - libvpx/commitdiff
Add pluggable bitreaders.
authorAlex Converse <aconverse@google.com>
Mon, 21 Mar 2016 21:08:57 +0000 (14:08 -0700)
committerAlex Converse <aconverse@google.com>
Fri, 25 Mar 2016 18:02:41 +0000 (11:02 -0700)
This will make the code change for a pure ANS experiment manageable.

Change-Id: I9905f3a89f492a4346860463a72fa8c52aac4c8e

vp10/common/ans.h
vp10/decoder/bitreader.h [new file with mode: 0644]
vp10/vp10dx.mk

index 0d6726da5bb8fed4568d7cca97b9cdd0f9a1fb85..eaa7d5893483ca929f39e0595f175347980613d4 100644 (file)
@@ -16,6 +16,7 @@
 #include <assert.h>
 #include "./vpx_config.h"
 #include "vpx/vpx_integer.h"
+#include "vpx_dsp/prob.h"
 #include "vpx_ports/mem_ops.h"
 
 #define ANS_DIVIDE_BY_MULTIPLY 1
@@ -242,6 +243,18 @@ static INLINE int uabs_read_literal(struct AnsDecoder *ans, int bits) {
   return literal;
 }
 
+// TODO(aconverse): Replace trees with tokensets.
+static INLINE int uabs_read_tree(struct AnsDecoder *ans,
+                                 const vpx_tree_index *tree,
+                                 const AnsP8 *probs) {
+  vpx_tree_index i = 0;
+
+  while ((i = tree[i + uabs_read(ans, probs[i >> 1])]) > 0)
+    continue;
+
+  return -i;
+}
+
 struct rans_sym {
   AnsP8 prob;
   AnsP8 cum_prob;  // not-inclusive
diff --git a/vp10/decoder/bitreader.h b/vp10/decoder/bitreader.h
new file mode 100644 (file)
index 0000000..baf8f03
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *  Copyright (c) 2016 The WebM project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+/* The purpose of this header is to provide compile time pluggable bit reader
+ * implementations with a common interface. */
+
+#ifndef VPX10_DECODER_BITREADER_H_
+#define VPX10_DECODER_BITREADER_H_
+
+#include "./vpx_config.h"
+
+#if CONFIG_ANS
+#include "vp10/common/ans.h"
+#include "vpx/vp8dx.h"  // for vp10_decrypt_cb
+#define vp10_reader struct AnsDecoder
+#define vp10_reader_has_error ans_reader_has_error
+#define vp10_read uabs_read
+#define vp10_read_bit uabs_read_bit
+#define vp10_read_literal uabs_read_literal
+#define vp10_read_tree uabs_read_tree
+#else
+#include "vpx_dsp/bitreader.h"
+#define vp10_reader vpx_reader
+#define vp10_reader_has_error vpx_reader_has_error
+#define vp10_read vpx_read
+#define vp10_read_bit vpx_read_bit
+#define vp10_read_literal vpx_read_literal
+#define vp10_read_tree vpx_read_tree
+#endif
+
+#endif  // VPX10_DECODER_BITREADER_H_
index fce6d0d7d74552e32d59150a5333e5d36c93adc8..ae684755fe504f18a365f304c3d784cee4f29ea5 100644 (file)
@@ -29,5 +29,6 @@ VP10_DX_SRCS-yes += decoder/decoder.c
 VP10_DX_SRCS-yes += decoder/decoder.h
 VP10_DX_SRCS-yes += decoder/dsubexp.c
 VP10_DX_SRCS-yes += decoder/dsubexp.h
+VP10_DX_SRCS-yes += decoder/bitreader.h
 
 VP10_DX_SRCS-yes := $(filter-out $(VP10_DX_SRCS_REMOVE-yes),$(VP10_DX_SRCS-yes))