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.
8 #include "base/logging.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"
16 static std::vector
<int64
> TruncateTimestamps(
17 const std::vector
<int64
>& timestamps
) {
19 int64 truncate_mask
= (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
;
26 static void RunUnrollTest(const std::vector
<int64
>& timestamps
) {
27 std::vector
<int64
> truncated_timestamps
= TruncateTimestamps(timestamps
);
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
);
37 TEST(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 INT64_C(0x0000000000000000),
43 INT64_C(-190), // - 190
44 INT64_C(0x00000000aaaaa9ed), // + 0xaaaaaaab
45 INT64_C(0x0000000155555498), // + 0xaaaaaaab
46 INT64_C(0x00000001ffffff43), // + 0xaaaaaaab
47 INT64_C(0x00000002aaaaa9ee), // + 0xaaaaaaab
48 INT64_C(0x0000000355555499), // + 0xaaaaaaab
49 INT64_C(0x00000003ffffff44), // + 0xaaaaaaab
52 std::vector
<int64
> timestamps_vector(
53 timestamps
, timestamps
+ arraysize(timestamps
));
54 RunUnrollTest(timestamps_vector
);