H264 bitstream parser.

Parsing the encoded bitstream is required for doing downscaling
decisions based on average encoded QP to improve perceived quality.

BUG=webrtc:4968
R=noahric@chromium.org, stefan@webrtc.org
TBR=pthatcher@webrtc.org

Review URL: https://codereview.webrtc.org/1314473008 .

Cr-Commit-Position: refs/heads/master@{#10051}
diff --git a/webrtc/base/bitbuffer_unittest.cc b/webrtc/base/bitbuffer_unittest.cc
index c47f92c..b9c348e 100644
--- a/webrtc/base/bitbuffer_unittest.cc
+++ b/webrtc/base/bitbuffer_unittest.cc
@@ -205,6 +205,25 @@
   }
 }
 
+TEST(BitBufferTest, SignedGolombValues) {
+  uint8_t golomb_bits[] = {
+      0x80,  // 1
+      0x40,  // 010
+      0x60,  // 011
+      0x20,  // 00100
+      0x38,  // 00111
+  };
+  int32_t expected[] = {0, 1, -1, 2, -3};
+  for (size_t i = 0; i < sizeof(golomb_bits); ++i) {
+    BitBuffer buffer(&golomb_bits[i], 1);
+    int32_t decoded_val;
+    ASSERT_TRUE(buffer.ReadSignedExponentialGolomb(&decoded_val));
+    EXPECT_EQ(expected[i], decoded_val)
+        << "Mismatch in expected/decoded value for golomb_bits[" << i
+        << "]: " << static_cast<int>(golomb_bits[i]);
+  }
+}
+
 TEST(BitBufferTest, NoGolombOverread) {
   const uint8 bytes[] = {0x00, 0xFF, 0xFF};
   // Make sure the bit buffer correctly enforces byte length on golomb reads.