Upload upstream chromium 108.0.5359.1
[platform/framework/web/chromium-efl.git] / media / filters / h264_bitstream_buffer_unittest.cc
1 // Copyright 2014 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <stdint.h>
6
7 #include "base/bits.h"
8 #include "media/filters/h264_bitstream_buffer.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace media {
12
13 namespace {
14 const uint64_t kTestPattern = 0xfedcba0987654321;
15
16 uint64_t GetDataFromBuffer(const uint8_t* ptr, uint64_t num_bits) {
17   uint64_t got = 0;
18   while (num_bits > 8) {
19     got |= (*ptr & 0xff);
20     num_bits -= 8;
21     got <<= (num_bits > 8 ? 8 : num_bits);
22     ptr++;
23   }
24   if (num_bits > 0) {
25     uint64_t temp = (*ptr & 0xff);
26     temp >>= (8 - num_bits);
27     got |= temp;
28   }
29   return got;
30 }
31 }
32
33 class H264BitstreamBufferAppendBitsTest
34     : public ::testing::TestWithParam<uint64_t> {};
35
36 // TODO(posciak): More tests!
37
38 TEST_P(H264BitstreamBufferAppendBitsTest, AppendAndVerifyBits) {
39   auto b = base::MakeRefCounted<H264BitstreamBuffer>();
40   uint64_t num_bits = GetParam();
41   // TODO(posciak): Tests for >64 bits.
42   ASSERT_LE(num_bits, 64u);
43   uint64_t num_bytes = base::bits::AlignUp(num_bits, uint64_t{8}) / 8;
44
45   b->AppendBits(num_bits, kTestPattern);
46   b->FlushReg();
47
48   EXPECT_EQ(b->BytesInBuffer(), num_bytes);
49
50   const uint8_t* ptr = b->data();
51   uint64_t got = GetDataFromBuffer(ptr, num_bits);
52   uint64_t expected = kTestPattern;
53
54   if (num_bits < 64)
55     expected &= ((1ull << num_bits) - 1);
56
57   EXPECT_EQ(got, expected) << std::hex << "0x" << got << " vs 0x" << expected;
58 }
59
60 TEST_F(H264BitstreamBufferAppendBitsTest, VerifyFlushAndBitsInBuffer) {
61   auto b = base::MakeRefCounted<H264BitstreamBuffer>();
62   uint64_t num_bits = 20;
63   uint64_t num_bytes = base::bits::AlignUp(num_bits, uint64_t{8}) / 8;
64
65   b->AppendBits(num_bits, kTestPattern);
66   b->Flush();
67
68   EXPECT_EQ(b->BytesInBuffer(), num_bytes);
69   EXPECT_EQ(b->BitsInBuffer(), num_bits);
70
71   const uint8_t* ptr = b->data();
72   uint64_t got = GetDataFromBuffer(ptr, num_bits);
73   uint64_t expected = kTestPattern;
74   expected &= ((1ull << num_bits) - 1);
75
76   EXPECT_EQ(got, expected) << std::hex << "0x" << got << " vs 0x" << expected;
77 }
78
79 INSTANTIATE_TEST_SUITE_P(AppendNumBits,
80                          H264BitstreamBufferAppendBitsTest,
81                          ::testing::Range(static_cast<uint64_t>(1),
82                                           static_cast<uint64_t>(65)));
83 }  // namespace media