Bug 1572460 - Refactor `selection` out of the `InspectorFront`. r=yulia
[gecko.git] / dom / media / BitReader.h
blob640150bf6dc8037a5b48c5a6b2621a9d6912a9b2
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef BIT_READER_H_
6 #define BIT_READER_H_
8 #include "MediaData.h"
10 namespace mozilla {
12 class BitReader {
13 public:
14 explicit BitReader(const MediaByteBuffer* aBuffer);
15 BitReader(const MediaByteBuffer* aBuffer, size_t aBits);
16 BitReader(const uint8_t* aBuffer, size_t aBits);
17 ~BitReader();
18 uint32_t ReadBits(size_t aNum);
19 bool ReadBit() { return ReadBits(1) != 0; }
20 uint32_t ReadU32() { return ReadBits(32); }
21 uint64_t ReadU64();
23 // Read the UTF-8 sequence and convert it to its 64-bit UCS-4 encoded form.
24 // Return 0xfffffffffffffff if sequence was invalid.
25 uint64_t ReadUTF8();
26 // Read unsigned integer Exp-Golomb-coded.
27 uint32_t ReadUE();
28 // Read signed integer Exp-Golomb-coded.
29 int32_t ReadSE();
31 // Return the number of bits parsed so far;
32 size_t BitCount() const;
33 // Return the number of bits left.
34 size_t BitsLeft() const;
36 // Return RBSP bit length.
37 static uint32_t GetBitLength(const MediaByteBuffer* aNAL);
39 private:
40 void FillReservoir();
41 const uint8_t* mData;
42 const size_t mOriginalBitSize;
43 size_t mTotalBitsLeft;
44 size_t mSize; // Size left in bytes
45 uint32_t mReservoir; // Left-aligned bits
46 size_t mNumBitsLeft; // Number of bits left in reservoir.
49 } // namespace mozilla
51 #endif // BIT_READER_H_