shithub: libvpx

Download patch

ref: cd5113ceec8ebcb3276a6924906626e4b2c96bd7
parent: e8747866dc1c2eee2c366a34506acbdf87843378
author: Dmitry Kovalev <dkovalev@google.com>
date: Tue May 7 14:19:50 EDT 2013

Replacing vp9_{write, write_literal, bit} macros with functions.

Also removing BOOL_CODER and using vp9_writer instead.

Change-Id: I31d1ec661872f7eb1fe869607b6ed0ebfbb03e01

--- a/test/vp9_boolcoder_test.cc
+++ b/test/vp9_boolcoder_test.cc
@@ -52,7 +52,7 @@
         const int random_seed = 6432;
         const int buffer_size = 10000;
         ACMRandom bit_rnd(random_seed);
-        BOOL_CODER bw;
+        vp9_writer bw;
         uint8_t bw_buffer[buffer_size];
         vp9_start_encode(&bw, bw_buffer);
 
@@ -63,7 +63,7 @@
           } else if (bit_method == 3) {
             bit = bit_rnd(2);
           }
-          encode_bool(&bw, bit, static_cast<int>(probas[i]));
+          vp9_write(&bw, bit, static_cast<int>(probas[i]));
         }
 
         vp9_stop_encode(&bw);
--- a/vp9/encoder/vp9_boolhuff.c
+++ b/vp9/encoder/vp9_boolhuff.c
@@ -52,7 +52,7 @@
   int i;
 
   for (i = 0; i < 32; i++)
-    encode_bool(br, 0, 128);
+    vp9_write_bit(br, 0);
 
   // Ensure there's no ambigous collision with any index marker bytes
   if ((br->buffer[br->pos - 1] & 0xe0) == 0xc0)
@@ -60,17 +60,10 @@
 }
 
 
-void vp9_encode_value(vp9_writer *br, int data, int bits) {
-  int bit;
-
-  for (bit = bits - 1; bit >= 0; bit--)
-    encode_bool(br, (1 & (data >> bit)), 0x80);
-}
-
 void vp9_encode_unsigned_max(vp9_writer *br, int data, int max) {
   assert(data <= max);
   while (max) {
-    encode_bool(br, data & 1, 128);
+    vp9_write_bit(br, data & 1);
     data >>= 1;
     max >>= 1;
   }
@@ -98,10 +91,10 @@
   if (l == 0) return;
   m = (1 << l) - n;
   if (v < m)
-    vp9_encode_value(br, v, l - 1);
+    vp9_write_literal(br, v, l - 1);
   else {
-    vp9_encode_value(br, m + ((v - m) >> 1), l - 1);
-    vp9_encode_value(br, (v - m) & 1, 1);
+    vp9_write_literal(br, m + ((v - m) >> 1), l - 1);
+    vp9_write_literal(br, (v - m) & 1, 1);
   }
 }
 
@@ -127,12 +120,12 @@
       break;
     } else {
       int t = (word >= mk + a);
-      vp9_encode_value(br, t, 1);
+      vp9_write_literal(br, t, 1);
       if (t) {
         i = i + 1;
         mk += a;
       } else {
-        vp9_encode_value(br, word - mk, b);
+        vp9_write_literal(br, word - mk, b);
         break;
       }
     }
--- a/vp9/encoder/vp9_boolhuff.h
+++ b/vp9/encoder/vp9_boolhuff.h
@@ -32,15 +32,11 @@
   // Variables used to track bit costs without outputing to the bitstream
   unsigned int  measure_cost;
   unsigned long bit_counter;
-} BOOL_CODER;
+} vp9_writer;
 
-typedef BOOL_CODER vp9_writer;
-
 extern const unsigned int vp9_prob_cost[256];
 
 void vp9_start_encode(vp9_writer *bc, uint8_t *buffer);
-
-void vp9_encode_value(vp9_writer *br, int data, int bits);
 void vp9_encode_unsigned_max(vp9_writer *br, int data, int max);
 void vp9_stop_encode(vp9_writer *bc);
 
@@ -54,7 +50,7 @@
 DECLARE_ALIGNED(16, extern const unsigned char, vp9_norm[256]);
 
 
-static void encode_bool(vp9_writer *br, int bit, int probability) {
+static void vp9_write(vp9_writer *br, int bit, int probability) {
   unsigned int split;
   int count = br->count;
   unsigned int range = br->range;
@@ -112,5 +108,17 @@
   br->lowvalue = lowvalue;
   br->range = range;
 }
+
+static void vp9_write_bit(vp9_writer *w, int bit) {
+  vp9_write(w, bit, 128);  // vp9_prob_half
+}
+
+static void vp9_write_literal(vp9_writer *w, int data, int bits) {
+  int bit;
+
+  for (bit = bits - 1; bit >= 0; bit--)
+    vp9_write_bit(w, 1 & (data >> bit));
+}
+
 
 #endif  // VP9_ENCODER_VP9_BOOLHUFF_H_
--- a/vp9/encoder/vp9_treewriter.h
+++ b/vp9/encoder/vp9_treewriter.h
@@ -19,9 +19,7 @@
 
 #include "vp9/encoder/vp9_boolhuff.h"       /* for now */
 
-#define vp9_write encode_bool
-#define vp9_write_literal vp9_encode_value
-#define vp9_write_bit(w, v) vp9_write((w), (v), vp9_prob_half)
+
 #define vp9_write_prob(w, v) vp9_write_literal((w), (v), 8)
 
 /* Approximate length of an encoded bool in 256ths of a bit at given prob */