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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/logging.h" | 6 #include "base/logging.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "media/mp4/box_definitions.h" | 8 #include "media/mp4/box_definitions.h" |
9 #include "media/mp4/rcheck.h" | 9 #include "media/mp4/rcheck.h" |
10 #include "media/mp4/track_run_iterator.h" | 10 #include "media/mp4/track_run_iterator.h" |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
254 iter_.reset(new TrackRunIterator(&moov_)); | 254 iter_.reset(new TrackRunIterator(&moov_)); |
255 MovieFragment moof = CreateFragment(); | 255 MovieFragment moof = CreateFragment(); |
256 moof.tracks[0].decode_time.decode_time = kAudioScale; | 256 moof.tracks[0].decode_time.decode_time = kAudioScale; |
257 ASSERT_TRUE(iter_->Init(moof)); | 257 ASSERT_TRUE(iter_->Init(moof)); |
258 EXPECT_EQ(TimeDeltaFromRational(moof.tracks[1].decode_time.decode_time, | 258 EXPECT_EQ(TimeDeltaFromRational(moof.tracks[1].decode_time.decode_time, |
259 kVideoScale), | 259 kVideoScale), |
260 iter_->GetMinDecodeTimestamp()); | 260 iter_->GetMinDecodeTimestamp()); |
261 } | 261 } |
262 | 262 |
263 TEST_F(TrackRunIteratorTest, ReorderingTest) { | 263 TEST_F(TrackRunIteratorTest, ReorderingTest) { |
264 // Test frame reordering and edit list support. The frames have the following | |
265 // decode timestamps: | |
266 // | |
267 // 0ms 40ms 120ms 240ms | |
268 // | 0 | 1 - | 2 - - | | |
269 // | |
270 // ...and these composition timestamps, after edit list adjustment: | |
271 // | |
272 // 0ms 40ms 160ms 240ms | |
273 // | 0 | 2 - - | 1 - | | |
274 // | |
264 iter_.reset(new TrackRunIterator(&moov_)); | 275 iter_.reset(new TrackRunIterator(&moov_)); |
276 EditListEntry entry; | |
acolwell GONE FROM CHROMIUM
2012/08/07 20:12:13
I don't really understand what is happening here.
strobe_
2012/08/07 22:54:39
Done.
| |
277 entry.segment_duration = 0; | |
278 entry.media_time = 2; | |
279 entry.media_rate_integer = 1; | |
280 entry.media_rate_fraction = 0; | |
281 moov_.tracks[1].edit.list.edits.push_back(entry); | |
265 MovieFragment moof = CreateFragment(); | 282 MovieFragment moof = CreateFragment(); |
266 std::vector<int32>& cts_offsets = | 283 std::vector<int32>& cts_offsets = |
267 moof.tracks[1].runs[0].sample_composition_time_offsets; | 284 moof.tracks[1].runs[0].sample_composition_time_offsets; |
268 cts_offsets.resize(10); | 285 cts_offsets.resize(10); |
269 cts_offsets[0] = 2; | 286 cts_offsets[0] = 2; |
acolwell GONE FROM CHROMIUM
2012/08/07 20:12:13
Documenting these values would be nice as well. It
strobe_
2012/08/07 22:54:39
Done.
| |
270 cts_offsets[1] = -1; | 287 cts_offsets[1] = 5; |
288 cts_offsets[2] = 0; | |
271 moof.tracks[1].decode_time.decode_time = 0; | 289 moof.tracks[1].decode_time.decode_time = 0; |
272 ASSERT_TRUE(iter_->Init(moof)); | 290 ASSERT_TRUE(iter_->Init(moof)); |
273 iter_->AdvanceRun(); | 291 iter_->AdvanceRun(); |
274 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(0, kVideoScale)); | 292 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(0, kVideoScale)); |
275 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(2, kVideoScale)); | 293 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(0, kVideoScale)); |
276 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1, kVideoScale)); | 294 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1, kVideoScale)); |
277 iter_->AdvanceSample(); | 295 iter_->AdvanceSample(); |
278 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(1, kVideoScale)); | 296 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(1, kVideoScale)); |
279 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(0, kVideoScale)); | 297 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(4, kVideoScale)); |
280 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(2, kVideoScale)); | 298 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(2, kVideoScale)); |
299 iter_->AdvanceSample(); | |
300 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(3, kVideoScale)); | |
301 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(1, kVideoScale)); | |
302 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(3, kVideoScale)); | |
281 } | 303 } |
282 | 304 |
283 TEST_F(TrackRunIteratorTest, IgnoreUnknownAuxInfoTest) { | 305 TEST_F(TrackRunIteratorTest, IgnoreUnknownAuxInfoTest) { |
284 iter_.reset(new TrackRunIterator(&moov_)); | 306 iter_.reset(new TrackRunIterator(&moov_)); |
285 MovieFragment moof = CreateFragment(); | 307 MovieFragment moof = CreateFragment(); |
286 moof.tracks[1].auxiliary_offset.offsets.push_back(50); | 308 moof.tracks[1].auxiliary_offset.offsets.push_back(50); |
287 moof.tracks[1].auxiliary_size.default_sample_info_size = 2; | 309 moof.tracks[1].auxiliary_size.default_sample_info_size = 2; |
288 moof.tracks[1].auxiliary_size.sample_count = 2; | 310 moof.tracks[1].auxiliary_size.sample_count = 2; |
289 moof.tracks[1].runs[0].sample_count = 2; | 311 moof.tracks[1].runs[0].sample_count = 2; |
290 ASSERT_TRUE(iter_->Init(moof)); | 312 ASSERT_TRUE(iter_->Init(moof)); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
405 EXPECT_EQ(iter_->track_id(), 1u); | 427 EXPECT_EQ(iter_->track_id(), 1u); |
406 EXPECT_EQ(iter_->aux_info_offset(), 201); | 428 EXPECT_EQ(iter_->aux_info_offset(), 201); |
407 EXPECT_EQ(iter_->sample_offset(), 10000); | 429 EXPECT_EQ(iter_->sample_offset(), 10000); |
408 EXPECT_EQ(iter_->GetMaxClearOffset(), 201); | 430 EXPECT_EQ(iter_->GetMaxClearOffset(), 201); |
409 EXPECT_TRUE(iter_->CacheAuxInfo(kAuxInfo, arraysize(kAuxInfo))); | 431 EXPECT_TRUE(iter_->CacheAuxInfo(kAuxInfo, arraysize(kAuxInfo))); |
410 EXPECT_EQ(iter_->GetMaxClearOffset(), 10000); | 432 EXPECT_EQ(iter_->GetMaxClearOffset(), 10000); |
411 } | 433 } |
412 | 434 |
413 } // namespace mp4 | 435 } // namespace mp4 |
414 } // namespace media | 436 } // namespace media |
OLD | NEW |