Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1256)

Unified Diff: content/common/gpu/media/h264_parser_unittest.cc

Issue 10834071: Add unittest for H264BitReader. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Remove MultiFileStreamParser and empty ctor/dtor. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/common/gpu/media/h264_parser.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/gpu/media/h264_parser_unittest.cc
diff --git a/content/common/gpu/media/h264_parser_unittest.cc b/content/common/gpu/media/h264_parser_unittest.cc
index 53d1b3565223c92d1f21aa5634f6c2d0cd9dc3a0..9822af44fbb93ec7ff7e133e50efd82418e8bb16 100644
--- a/content/common/gpu/media/h264_parser_unittest.cc
+++ b/content/common/gpu/media/h264_parser_unittest.cc
@@ -72,6 +72,158 @@ TEST(H264ParserTest, StreamFileParsing) {
}
}
+class H264BitReaderTest : public ::testing::Test {
Ami GONE FROM CHROMIUM 2012/07/31 17:24:15 AFAICT this class's sole purpose is to forward cal
xiaomings 2012/07/31 19:24:32 The class H264BitReader is a private nested class
Ami GONE FROM CHROMIUM 2012/07/31 20:30:25 Any reason not to extract the bitreader outside of
+ public:
+ bool Initialize(const uint8* data, off_t size) {
+ return reader_.Initialize(data, size);
+ }
+
+ bool ReadBits(int num_bits, int *out) {
+ return reader_.ReadBits(num_bits, out);
+ }
+
+ off_t NumBitsLeft() {
+ return reader_.NumBitsLeft();
+ }
+
+ bool HasMoreRBSPData() {
+ return reader_.HasMoreRBSPData();
+ }
+
+ private:
+ H264Parser::H264BitReader reader_;
+};
+
+TEST_F(H264BitReaderTest, ReadStreamWithoutEscapeAndTrailingZeroBytes) {
+ const unsigned char rbsp[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xa0};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, sizeof(rbsp)));
+
+ EXPECT_TRUE(ReadBits(1, &dummy));
+ EXPECT_EQ(dummy, 0x00);
+ EXPECT_EQ(NumBitsLeft(), 47);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(8, &dummy));
+ EXPECT_EQ(dummy, 0x02);
+ EXPECT_EQ(NumBitsLeft(), 39);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(31, &dummy));
+ EXPECT_EQ(dummy, 0x23456789);
+ EXPECT_EQ(NumBitsLeft(), 8);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(1, &dummy));
+ EXPECT_EQ(dummy, 1);
+ EXPECT_EQ(NumBitsLeft(), 7);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(1, &dummy));
+ EXPECT_EQ(dummy, 0);
+ EXPECT_EQ(NumBitsLeft(), 6);
+ EXPECT_FALSE(HasMoreRBSPData());
+}
+
+TEST_F(H264BitReaderTest, EmptyStream) {
+ const unsigned char rbsp[] = {0x80, 0x00, 0x00};
+
+ EXPECT_FALSE(Initialize(rbsp, 0));
+ EXPECT_FALSE(Initialize(rbsp, 1));
+ EXPECT_FALSE(Initialize(rbsp, sizeof(rbsp)));
+}
+
+TEST_F(H264BitReaderTest, SingleByteStream) {
+ const unsigned char rbsp[] = {0x18};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, sizeof(rbsp)));
+ EXPECT_EQ(NumBitsLeft(), 8);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(4, &dummy));
+ EXPECT_EQ(dummy, 0x01);
+ EXPECT_EQ(NumBitsLeft(), 4);
+ EXPECT_FALSE(HasMoreRBSPData());
+}
+
+TEST_F(H264BitReaderTest, StopBitOccupyFullByte) {
+ const unsigned char rbsp[] = {0xab, 0x80};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, sizeof(rbsp)));
+ EXPECT_EQ(NumBitsLeft(), 16);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(8, &dummy));
+ EXPECT_EQ(dummy, 0xab);
+ EXPECT_EQ(NumBitsLeft(), 8);
+ EXPECT_FALSE(HasMoreRBSPData());
+}
+
+TEST_F(H264BitReaderTest, ReadFailure) {
+ const unsigned char rbsp[] = {0x18};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, 1));
+ EXPECT_FALSE(ReadBits(5, &dummy));
+}
+
+TEST_F(H264BitReaderTest, MalformedStream) {
+ const unsigned char rbsp[] = {0x00, 0x00, 0x03, 0x00, 0x00};
+
+ EXPECT_FALSE(Initialize(rbsp, 1));
+ EXPECT_FALSE(Initialize(rbsp, sizeof(rbsp)));
+}
+
+TEST_F(H264BitReaderTest, EscapeSequence) {
+ const unsigned char rbsp[] =
+ {0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, sizeof(rbsp)));
+
+ EXPECT_TRUE(ReadBits(8, &dummy));
+ EXPECT_EQ(dummy, 0x00);
+ EXPECT_EQ(NumBitsLeft(), 80);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(24, &dummy));
+ EXPECT_EQ(dummy, 0x00);
+ EXPECT_EQ(NumBitsLeft(), 48);
+ EXPECT_TRUE(HasMoreRBSPData());
+
+ EXPECT_TRUE(ReadBits(15, &dummy));
+ EXPECT_EQ(dummy, 0x01);
+ EXPECT_EQ(NumBitsLeft(), 25);
+ EXPECT_FALSE(HasMoreRBSPData());
+}
+
+TEST_F(H264BitReaderTest, NonEscapeFollowedByStopBit) {
+ const unsigned char rbsp[] = {0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, sizeof(rbsp)));
+ EXPECT_TRUE(ReadBits(23, &dummy));
+ EXPECT_EQ(dummy, 0x03);
+ EXPECT_EQ(NumBitsLeft(), 33);
+ EXPECT_FALSE(HasMoreRBSPData());
+}
+
+TEST_F(H264BitReaderTest, TrailingZero) {
+ const unsigned char rbsp[] = {0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00};
+ int dummy = 0;
+
+ EXPECT_TRUE(Initialize(rbsp, sizeof(rbsp)));
+ EXPECT_TRUE(ReadBits(8, &dummy));
+ EXPECT_EQ(dummy, 0x01);
+ EXPECT_TRUE(HasMoreRBSPData());
+ EXPECT_TRUE(ReadBits(15, &dummy));
+ EXPECT_EQ(dummy, 0x01);
+ EXPECT_FALSE(HasMoreRBSPData());
+}
+
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
CommandLine::Init(argc, argv);
@@ -91,4 +243,3 @@ int main(int argc, char **argv) {
return RUN_ALL_TESTS();
}
-
« no previous file with comments | « content/common/gpu/media/h264_parser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698