Index: media/base/bit_reader_unittest.cc |
diff --git a/media/base/bit_reader_unittest.cc b/media/base/bit_reader_unittest.cc |
index 3dca9c632da77b509e432ff708e38a14d386f712..f3e92b0919e6ad1a727667563e86b4112d21b844 100644 |
--- a/media/base/bit_reader_unittest.cc |
+++ b/media/base/bit_reader_unittest.cc |
@@ -64,4 +64,63 @@ TEST(BitReaderTest, SkipBitsTest) { |
EXPECT_FALSE(reader1.SkipBits(1)); |
} |
+TEST(BitReaderTest, H264ReadStreamWithoutEscapeAndTrailingZeroBytes) { |
+ const unsigned char rbsp[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xa0}; |
+ int dummy = 0; |
+ BitReader reader(rbsp, sizeof(rbsp), true); |
+ |
+ EXPECT_TRUE(reader.ReadBits(1, &dummy)); |
+ EXPECT_EQ(dummy, 0x00); |
+ EXPECT_EQ(reader.bits_available(), 47); |
+ EXPECT_TRUE(reader.HasMoreRBSPData()); |
+ |
+ EXPECT_TRUE(reader.ReadBits(8, &dummy)); |
+ EXPECT_EQ(dummy, 0x02); |
+ EXPECT_EQ(reader.bits_available(), 39); |
+ EXPECT_TRUE(reader.HasMoreRBSPData()); |
+ |
+ EXPECT_TRUE(reader.ReadBits(31, &dummy)); |
+ EXPECT_EQ(dummy, 0x23456789); |
+ EXPECT_EQ(reader.bits_available(), 8); |
+ EXPECT_TRUE(reader.HasMoreRBSPData()); |
+ |
+ EXPECT_TRUE(reader.ReadBits(1, &dummy)); |
+ EXPECT_EQ(dummy, 1); |
+ EXPECT_EQ(reader.bits_available(), 7); |
+ EXPECT_TRUE(reader.HasMoreRBSPData()); |
+ |
+ EXPECT_TRUE(reader.ReadBits(1, &dummy)); |
+ EXPECT_EQ(dummy, 0); |
+ EXPECT_EQ(reader.bits_available(), 6); |
+ EXPECT_FALSE(reader.HasMoreRBSPData()); |
+} |
+ |
+TEST(BitReaderTest, H264SingleByteStream) { |
+ const unsigned char rbsp[] = {0x18}; |
+ int dummy = 0; |
+ BitReader reader(rbsp, sizeof(rbsp), true); |
+ |
+ EXPECT_EQ(reader.bits_available(), 8); |
+ EXPECT_TRUE(reader.HasMoreRBSPData()); |
+ |
+ EXPECT_TRUE(reader.ReadBits(4, &dummy)); |
+ EXPECT_EQ(dummy, 0x01); |
+ EXPECT_EQ(reader.bits_available(), 4); |
+ EXPECT_FALSE(reader.HasMoreRBSPData()); |
+} |
+ |
+TEST(BitReaderTest, H264StopBitOccupyFullByte) { |
+ const unsigned char rbsp[] = {0xab, 0x80}; |
+ int dummy = 0; |
+ BitReader reader(rbsp, sizeof(rbsp), true); |
+ |
+ EXPECT_EQ(reader.bits_available(), 16); |
+ EXPECT_TRUE(reader.HasMoreRBSPData()); |
+ |
+ EXPECT_TRUE(reader.ReadBits(8, &dummy)); |
+ EXPECT_EQ(dummy, 0xab); |
+ EXPECT_EQ(reader.bits_available(), 8); |
+ EXPECT_FALSE(reader.HasMoreRBSPData()); |
+} |
+ |
} // namespace media |