Index: media/base/bit_reader.cc |
diff --git a/media/base/bit_reader.cc b/media/base/bit_reader.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..50ac4b38903910e6157cc3617dd7067ea32890c1 |
--- /dev/null |
+++ b/media/base/bit_reader.cc |
@@ -0,0 +1,80 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "media/base/bit_reader.h" |
+ |
+namespace media { |
+ |
+BitReader::BitReader() |
+ : data_(NULL), |
+ bytes_left_(0), |
+ position_(0), |
+ curr_byte_(0), |
+ num_remaining_bits_in_curr_byte_(0) { |
+} |
+ |
+BitReader::BitReader(const void* data, off_t size) { |
+ Initialize(data, size); |
+} |
+ |
+BitReader::~BitReader() {} |
+ |
+void BitReader::Initialize(const void* data, off_t size) { |
acolwell GONE FROM CHROMIUM
2012/06/28 17:31:25
nit: Use uint8* here and above so you don't need t
|
+ DCHECK(data != NULL || size == 0); // Data cannot be NULL if size if not 0. |
+ |
+ data_ = reinterpret_cast<const uint8*>(data); |
+ bytes_left_ = size; |
+ position_ = 0; |
+ num_remaining_bits_in_curr_byte_ = 0; |
+ |
+ UpdateCurrByte(); |
+} |
+ |
+void BitReader::UpdateCurrByte() { |
+ DCHECK_EQ(num_remaining_bits_in_curr_byte_, 0); |
+ |
+ if (bytes_left_ >= 1) { |
+ // Load a new byte and advance pointers. |
+ curr_byte_ = *data_; |
+ ++data_; |
+ --bytes_left_; |
+ num_remaining_bits_in_curr_byte_ = 8; |
+ } |
+} |
+ |
+bool BitReader::SkipBits(int num_bits) { |
+ BitReader save = *this; |
+ uint64 dummy; |
acolwell GONE FROM CHROMIUM
2012/06/28 17:31:25
How about just using int here and adding a dummySi
|
+ bool result = true; |
+ |
+ while (num_bits > 64) { |
+ if (ReadBits(64, &dummy)) { |
+ num_bits -= 64; |
+ } else { |
+ result = false; |
+ break; |
+ } |
+ } |
+ |
+ result = result && ReadBits(num_bits, &dummy); |
+ |
+ if (!result) |
+ *this = save; |
+ |
+ return result; |
+} |
+ |
+off_t BitReader::Tell() const { |
+ return position_; |
+} |
+ |
+off_t BitReader::NumBitsLeft() const { |
+ return (num_remaining_bits_in_curr_byte_ + bytes_left_ * 8); |
+} |
+ |
+bool BitReader::HasMoreData() const { |
+ return num_remaining_bits_in_curr_byte_ != 0; |
+} |
+ |
+} // namespace media |