1// Copyright 2014 The Chromium Authors. All rights reserved. 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 <vector> 6 7#include "base/logging.h" 8#include "base/port.h" 9#include "base/test/perf_test_suite.h" 10#include "media/formats/mp2t/timestamp_unroller.h" 11#include "testing/gtest/include/gtest/gtest.h" 12 13namespace media { 14namespace mp2t { 15 16static std::vector<int64> TruncateTimestamps( 17 const std::vector<int64>& timestamps) { 18 const int nbits = 33; 19 int64 truncate_mask = (GG_INT64_C(1) << nbits) - 1; 20 std::vector<int64> truncated_timestamps(timestamps.size()); 21 for (size_t k = 0; k < timestamps.size(); k++) 22 truncated_timestamps[k] = timestamps[k] & truncate_mask; 23 return truncated_timestamps; 24} 25 26static void RunUnrollTest(const std::vector<int64>& timestamps) { 27 std::vector<int64> truncated_timestamps = TruncateTimestamps(timestamps); 28 29 TimestampUnroller timestamp_unroller; 30 for (size_t k = 0; k < timestamps.size(); k++) { 31 int64 unrolled_timestamp = 32 timestamp_unroller.GetUnrolledTimestamp(truncated_timestamps[k]); 33 EXPECT_EQ(timestamps[k], unrolled_timestamp); 34 } 35} 36 37TEST(TimestampUnrollerTest, SingleStream) { 38 // Array of 64 bit timestamps. 39 // This is the expected result from unrolling these timestamps 40 // truncated to 33 bits. 41 int64 timestamps[] = { 42 GG_INT64_C(0x0000000000000000), 43 GG_INT64_C(-190), // - 190 44 GG_INT64_C(0x00000000aaaaa9ed), // + 0xaaaaaaab 45 GG_INT64_C(0x0000000155555498), // + 0xaaaaaaab 46 GG_INT64_C(0x00000001ffffff43), // + 0xaaaaaaab 47 GG_INT64_C(0x00000002aaaaa9ee), // + 0xaaaaaaab 48 GG_INT64_C(0x0000000355555499), // + 0xaaaaaaab 49 GG_INT64_C(0x00000003ffffff44), // + 0xaaaaaaab 50 }; 51 52 std::vector<int64> timestamps_vector( 53 timestamps, timestamps + arraysize(timestamps)); 54 RunUnrollTest(timestamps_vector); 55} 56 57} // namespace mp2t 58} // namespace media 59