OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/base/bit_reader.h" | 5 #include "media/base/bit_reader.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 namespace media { | 9 namespace media { |
10 | 10 |
11 static void SetBit(uint8* buf, size_t size, size_t bit_pos) { | 11 static void SetBit(uint8_t* buf, size_t size, size_t bit_pos) { |
12 size_t byte_pos = bit_pos / 8; | 12 size_t byte_pos = bit_pos / 8; |
13 bit_pos -= byte_pos * 8; | 13 bit_pos -= byte_pos * 8; |
14 DCHECK_LT(byte_pos, size); | 14 DCHECK_LT(byte_pos, size); |
15 buf[byte_pos] |= (1 << (7 - bit_pos)); | 15 buf[byte_pos] |= (1 << (7 - bit_pos)); |
16 } | 16 } |
17 | 17 |
18 TEST(BitReaderTest, NormalOperationTest) { | 18 TEST(BitReaderTest, NormalOperationTest) { |
19 uint8 value8; | 19 uint8_t value8; |
20 uint64 value64; | 20 uint64_t value64; |
21 // 0101 0101 1001 1001 repeats 4 times | 21 // 0101 0101 1001 1001 repeats 4 times |
22 uint8 buffer[] = {0x55, 0x99, 0x55, 0x99, 0x55, 0x99, 0x55, 0x99}; | 22 uint8_t buffer[] = {0x55, 0x99, 0x55, 0x99, 0x55, 0x99, 0x55, 0x99}; |
23 BitReader reader1(buffer, 6); // Initialize with 6 bytes only | 23 BitReader reader1(buffer, 6); // Initialize with 6 bytes only |
24 | 24 |
25 EXPECT_TRUE(reader1.ReadBits(1, &value8)); | 25 EXPECT_TRUE(reader1.ReadBits(1, &value8)); |
26 EXPECT_EQ(value8, 0); | 26 EXPECT_EQ(value8, 0); |
27 EXPECT_TRUE(reader1.ReadBits(8, &value8)); | 27 EXPECT_TRUE(reader1.ReadBits(8, &value8)); |
28 EXPECT_EQ(value8, 0xab); // 1010 1011 | 28 EXPECT_EQ(value8, 0xab); // 1010 1011 |
29 EXPECT_TRUE(reader1.ReadBits(7, &value64)); | 29 EXPECT_TRUE(reader1.ReadBits(7, &value64)); |
30 EXPECT_TRUE(reader1.ReadBits(32, &value64)); | 30 EXPECT_TRUE(reader1.ReadBits(32, &value64)); |
31 EXPECT_EQ(value64, 0x55995599u); | 31 EXPECT_EQ(value64, 0x55995599u); |
32 EXPECT_FALSE(reader1.ReadBits(1, &value8)); | 32 EXPECT_FALSE(reader1.ReadBits(1, &value8)); |
33 value8 = 0xff; | 33 value8 = 0xff; |
34 EXPECT_TRUE(reader1.ReadBits(0, &value8)); | 34 EXPECT_TRUE(reader1.ReadBits(0, &value8)); |
35 EXPECT_EQ(value8, 0); | 35 EXPECT_EQ(value8, 0); |
36 | 36 |
37 BitReader reader2(buffer, 8); | 37 BitReader reader2(buffer, 8); |
38 EXPECT_TRUE(reader2.ReadBits(64, &value64)); | 38 EXPECT_TRUE(reader2.ReadBits(64, &value64)); |
39 EXPECT_EQ(value64, 0x5599559955995599ull); | 39 EXPECT_EQ(value64, 0x5599559955995599ull); |
40 EXPECT_FALSE(reader2.ReadBits(1, &value8)); | 40 EXPECT_FALSE(reader2.ReadBits(1, &value8)); |
41 EXPECT_TRUE(reader2.ReadBits(0, &value8)); | 41 EXPECT_TRUE(reader2.ReadBits(0, &value8)); |
42 } | 42 } |
43 | 43 |
44 TEST(BitReaderTest, ReadBeyondEndTest) { | 44 TEST(BitReaderTest, ReadBeyondEndTest) { |
45 uint8 value8; | 45 uint8_t value8; |
46 uint8 buffer[] = {0x12}; | 46 uint8_t buffer[] = {0x12}; |
47 BitReader reader1(buffer, sizeof(buffer)); | 47 BitReader reader1(buffer, sizeof(buffer)); |
48 | 48 |
49 EXPECT_TRUE(reader1.ReadBits(4, &value8)); | 49 EXPECT_TRUE(reader1.ReadBits(4, &value8)); |
50 EXPECT_FALSE(reader1.ReadBits(5, &value8)); | 50 EXPECT_FALSE(reader1.ReadBits(5, &value8)); |
51 EXPECT_FALSE(reader1.ReadBits(1, &value8)); | 51 EXPECT_FALSE(reader1.ReadBits(1, &value8)); |
52 EXPECT_TRUE(reader1.ReadBits(0, &value8)); | 52 EXPECT_TRUE(reader1.ReadBits(0, &value8)); |
53 } | 53 } |
54 | 54 |
55 TEST(BitReaderTest, SkipBitsTest) { | 55 TEST(BitReaderTest, SkipBitsTest) { |
56 uint8 value8; | 56 uint8_t value8; |
57 uint8 buffer[] = { 0x0a, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; | 57 uint8_t buffer[] = {0x0a, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; |
58 BitReader reader1(buffer, sizeof(buffer)); | 58 BitReader reader1(buffer, sizeof(buffer)); |
59 | 59 |
60 EXPECT_TRUE(reader1.SkipBits(2)); | 60 EXPECT_TRUE(reader1.SkipBits(2)); |
61 EXPECT_TRUE(reader1.ReadBits(3, &value8)); | 61 EXPECT_TRUE(reader1.ReadBits(3, &value8)); |
62 EXPECT_EQ(value8, 1); | 62 EXPECT_EQ(value8, 1); |
63 EXPECT_TRUE(reader1.SkipBits(11)); | 63 EXPECT_TRUE(reader1.SkipBits(11)); |
64 EXPECT_TRUE(reader1.ReadBits(8, &value8)); | 64 EXPECT_TRUE(reader1.ReadBits(8, &value8)); |
65 EXPECT_EQ(value8, 3); | 65 EXPECT_EQ(value8, 3); |
66 EXPECT_TRUE(reader1.SkipBits(76)); | 66 EXPECT_TRUE(reader1.SkipBits(76)); |
67 EXPECT_TRUE(reader1.ReadBits(4, &value8)); | 67 EXPECT_TRUE(reader1.ReadBits(4, &value8)); |
68 EXPECT_EQ(value8, 13); | 68 EXPECT_EQ(value8, 13); |
69 EXPECT_FALSE(reader1.SkipBits(100)); | 69 EXPECT_FALSE(reader1.SkipBits(100)); |
70 EXPECT_TRUE(reader1.SkipBits(0)); | 70 EXPECT_TRUE(reader1.SkipBits(0)); |
71 EXPECT_FALSE(reader1.SkipBits(1)); | 71 EXPECT_FALSE(reader1.SkipBits(1)); |
72 } | 72 } |
73 | 73 |
74 TEST(BitReaderTest, VariableSkipBitsTest) { | 74 TEST(BitReaderTest, VariableSkipBitsTest) { |
75 uint8 buffer[256] = {0}; | 75 uint8_t buffer[256] = {0}; |
76 | 76 |
77 // The test alternates between ReadBits and SkipBits. | 77 // The test alternates between ReadBits and SkipBits. |
78 // The first number is the number of bits to read, the second one is the | 78 // The first number is the number of bits to read, the second one is the |
79 // number of bits to skip. The number of bits to read was arbitrarily chosen | 79 // number of bits to skip. The number of bits to read was arbitrarily chosen |
80 // while the number of bits to skip was chosen so as to cover from small skips | 80 // while the number of bits to skip was chosen so as to cover from small skips |
81 // to large skips. | 81 // to large skips. |
82 const size_t pattern_read_skip[][2] = { | 82 const size_t pattern_read_skip[][2] = { |
83 { 5, 17 }, | 83 { 5, 17 }, |
84 { 4, 34 }, | 84 { 4, 34 }, |
85 { 0, 44 }, | 85 { 0, 44 }, |
(...skipping 27 matching lines...) Expand all Loading... |
113 EXPECT_TRUE(bit_reader.ReadBits(read_bit_count, &value)); | 113 EXPECT_TRUE(bit_reader.ReadBits(read_bit_count, &value)); |
114 EXPECT_EQ(value, 1 | (1 << (read_bit_count - 1))); | 114 EXPECT_EQ(value, 1 | (1 << (read_bit_count - 1))); |
115 } | 115 } |
116 EXPECT_TRUE(bit_reader.SkipBits(pattern_read_skip[k][1])); | 116 EXPECT_TRUE(bit_reader.SkipBits(pattern_read_skip[k][1])); |
117 } | 117 } |
118 } | 118 } |
119 | 119 |
120 TEST(BitReaderTest, BitsReadTest) { | 120 TEST(BitReaderTest, BitsReadTest) { |
121 int value; | 121 int value; |
122 bool flag; | 122 bool flag; |
123 uint8 buffer[] = { 0x0a, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; | 123 uint8_t buffer[] = {0x0a, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; |
124 BitReader reader1(buffer, sizeof(buffer)); | 124 BitReader reader1(buffer, sizeof(buffer)); |
125 EXPECT_EQ(reader1.bits_available(), 120); | 125 EXPECT_EQ(reader1.bits_available(), 120); |
126 | 126 |
127 EXPECT_TRUE(reader1.SkipBits(2)); | 127 EXPECT_TRUE(reader1.SkipBits(2)); |
128 EXPECT_EQ(reader1.bits_read(), 2); | 128 EXPECT_EQ(reader1.bits_read(), 2); |
129 EXPECT_EQ(reader1.bits_available(), 118); | 129 EXPECT_EQ(reader1.bits_available(), 118); |
130 EXPECT_TRUE(reader1.ReadBits(3, &value)); | 130 EXPECT_TRUE(reader1.ReadBits(3, &value)); |
131 EXPECT_EQ(reader1.bits_read(), 5); | 131 EXPECT_EQ(reader1.bits_read(), 5); |
132 EXPECT_EQ(reader1.bits_available(), 115); | 132 EXPECT_EQ(reader1.bits_available(), 115); |
133 EXPECT_TRUE(reader1.ReadFlag(&flag)); | 133 EXPECT_TRUE(reader1.ReadFlag(&flag)); |
134 EXPECT_EQ(reader1.bits_read(), 6); | 134 EXPECT_EQ(reader1.bits_read(), 6); |
135 EXPECT_EQ(reader1.bits_available(), 114); | 135 EXPECT_EQ(reader1.bits_available(), 114); |
136 EXPECT_TRUE(reader1.SkipBits(76)); | 136 EXPECT_TRUE(reader1.SkipBits(76)); |
137 EXPECT_EQ(reader1.bits_read(), 82); | 137 EXPECT_EQ(reader1.bits_read(), 82); |
138 EXPECT_EQ(reader1.bits_available(), 38); | 138 EXPECT_EQ(reader1.bits_available(), 38); |
139 } | 139 } |
140 | 140 |
141 } // namespace media | 141 } // namespace media |
OLD | NEW |