1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include <stdint.h>
- #include "base/bits.h"
- #include "media/filters/h264_bitstream_buffer.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace media {
- namespace {
- const uint64_t kTestPattern = 0xfedcba0987654321;
- uint64_t GetDataFromBuffer(const uint8_t* ptr, uint64_t num_bits) {
- uint64_t got = 0;
- while (num_bits > 8) {
- got |= (*ptr & 0xff);
- num_bits -= 8;
- got <<= (num_bits > 8 ? 8 : num_bits);
- ptr++;
- }
- if (num_bits > 0) {
- uint64_t temp = (*ptr & 0xff);
- temp >>= (8 - num_bits);
- got |= temp;
- }
- return got;
- }
- }
- class H264BitstreamBufferAppendBitsTest
- : public ::testing::TestWithParam<uint64_t> {};
- // TODO(posciak): More tests!
- TEST_P(H264BitstreamBufferAppendBitsTest, AppendAndVerifyBits) {
- auto b = base::MakeRefCounted<H264BitstreamBuffer>();
- uint64_t num_bits = GetParam();
- // TODO(posciak): Tests for >64 bits.
- ASSERT_LE(num_bits, 64u);
- uint64_t num_bytes = base::bits::AlignUp(num_bits, uint64_t{8}) / 8;
- b->AppendBits(num_bits, kTestPattern);
- b->FlushReg();
- EXPECT_EQ(b->BytesInBuffer(), num_bytes);
- const uint8_t* ptr = b->data();
- uint64_t got = GetDataFromBuffer(ptr, num_bits);
- uint64_t expected = kTestPattern;
- if (num_bits < 64)
- expected &= ((1ull << num_bits) - 1);
- EXPECT_EQ(got, expected) << std::hex << "0x" << got << " vs 0x" << expected;
- }
- TEST_F(H264BitstreamBufferAppendBitsTest, VerifyFlushAndBitsInBuffer) {
- auto b = base::MakeRefCounted<H264BitstreamBuffer>();
- uint64_t num_bits = 20;
- uint64_t num_bytes = base::bits::AlignUp(num_bits, uint64_t{8}) / 8;
- b->AppendBits(num_bits, kTestPattern);
- b->Flush();
- EXPECT_EQ(b->BytesInBuffer(), num_bytes);
- EXPECT_EQ(b->BitsInBuffer(), num_bits);
- const uint8_t* ptr = b->data();
- uint64_t got = GetDataFromBuffer(ptr, num_bits);
- uint64_t expected = kTestPattern;
- expected &= ((1ull << num_bits) - 1);
- EXPECT_EQ(got, expected) << std::hex << "0x" << got << " vs 0x" << expected;
- }
- INSTANTIATE_TEST_SUITE_P(AppendNumBits,
- H264BitstreamBufferAppendBitsTest,
- ::testing::Range(static_cast<uint64_t>(1),
- static_cast<uint64_t>(65)));
- } // namespace media
|