OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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 "base/strings/string_split.h" | 8 #include "base/strings/string_split.h" |
9 #include "media/formats/mp4/box_definitions.h" | 9 #include "media/formats/mp4/box_definitions.h" |
10 #include "media/formats/mp4/rcheck.h" | 10 #include "media/formats/mp4/rcheck.h" |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 MovieFragment moof = CreateFragment(); | 284 MovieFragment moof = CreateFragment(); |
285 | 285 |
286 // Test that runs are sorted correctly, and that properties of the initial | 286 // Test that runs are sorted correctly, and that properties of the initial |
287 // sample of the first run are correct | 287 // sample of the first run are correct |
288 ASSERT_TRUE(iter_->Init(moof)); | 288 ASSERT_TRUE(iter_->Init(moof)); |
289 EXPECT_TRUE(iter_->IsRunValid()); | 289 EXPECT_TRUE(iter_->IsRunValid()); |
290 EXPECT_FALSE(iter_->is_encrypted()); | 290 EXPECT_FALSE(iter_->is_encrypted()); |
291 EXPECT_EQ(iter_->track_id(), 1u); | 291 EXPECT_EQ(iter_->track_id(), 1u); |
292 EXPECT_EQ(iter_->sample_offset(), 100); | 292 EXPECT_EQ(iter_->sample_offset(), 100); |
293 EXPECT_EQ(iter_->sample_size(), 1); | 293 EXPECT_EQ(iter_->sample_size(), 1); |
294 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(0, kAudioScale)); | 294 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(0, kAudioScale)); |
295 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(0, kAudioScale)); | 295 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(0, kAudioScale)); |
296 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1024, kAudioScale)); | 296 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1024, kAudioScale)); |
297 EXPECT_TRUE(iter_->is_keyframe()); | 297 EXPECT_TRUE(iter_->is_keyframe()); |
298 | 298 |
299 // Advance to the last sample in the current run, and test its properties | 299 // Advance to the last sample in the current run, and test its properties |
300 for (int i = 0; i < 9; i++) iter_->AdvanceSample(); | 300 for (int i = 0; i < 9; i++) iter_->AdvanceSample(); |
301 EXPECT_EQ(iter_->track_id(), 1u); | 301 EXPECT_EQ(iter_->track_id(), 1u); |
302 EXPECT_EQ(iter_->sample_offset(), 100 + kSumAscending1); | 302 EXPECT_EQ(iter_->sample_offset(), 100 + kSumAscending1); |
303 EXPECT_EQ(iter_->sample_size(), 10); | 303 EXPECT_EQ(iter_->sample_size(), 10); |
304 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(1024 * 9, kAudioScale)); | 304 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(1024 * 9, kAudioScale)); |
305 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1024, kAudioScale)); | 305 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1024, kAudioScale)); |
306 EXPECT_TRUE(iter_->is_keyframe()); | 306 EXPECT_TRUE(iter_->is_keyframe()); |
307 | 307 |
308 // Test end-of-run | 308 // Test end-of-run |
309 iter_->AdvanceSample(); | 309 iter_->AdvanceSample(); |
310 EXPECT_FALSE(iter_->IsSampleValid()); | 310 EXPECT_FALSE(iter_->IsSampleValid()); |
311 | 311 |
312 // Test last sample of next run | 312 // Test last sample of next run |
313 iter_->AdvanceRun(); | 313 iter_->AdvanceRun(); |
314 EXPECT_TRUE(iter_->is_keyframe()); | 314 EXPECT_TRUE(iter_->is_keyframe()); |
315 for (int i = 0; i < 9; i++) iter_->AdvanceSample(); | 315 for (int i = 0; i < 9; i++) iter_->AdvanceSample(); |
316 EXPECT_EQ(iter_->track_id(), 2u); | 316 EXPECT_EQ(iter_->track_id(), 2u); |
317 EXPECT_EQ(iter_->sample_offset(), 200 + kSumAscending1); | 317 EXPECT_EQ(iter_->sample_offset(), 200 + kSumAscending1); |
318 EXPECT_EQ(iter_->sample_size(), 10); | 318 EXPECT_EQ(iter_->sample_size(), 10); |
319 int64 base_dts = kSumAscending1 + moof.tracks[1].decode_time.decode_time; | 319 int64 base_dts = kSumAscending1 + moof.tracks[1].decode_time.decode_time; |
320 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(base_dts, kVideoScale)); | 320 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(base_dts, kVideoScale)); |
321 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(10, kVideoScale)); | 321 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(10, kVideoScale)); |
322 EXPECT_FALSE(iter_->is_keyframe()); | 322 EXPECT_FALSE(iter_->is_keyframe()); |
323 | 323 |
324 // Test final run | 324 // Test final run |
325 iter_->AdvanceRun(); | 325 iter_->AdvanceRun(); |
326 EXPECT_EQ(iter_->track_id(), 1u); | 326 EXPECT_EQ(iter_->track_id(), 1u); |
327 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(1024 * 10, kAudioScale)); | 327 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(1024 * 10, kAudioScale)); |
328 iter_->AdvanceSample(); | 328 iter_->AdvanceSample(); |
329 EXPECT_EQ(moof.tracks[0].runs[1].data_offset + | 329 EXPECT_EQ(moof.tracks[0].runs[1].data_offset + |
330 moof.tracks[0].header.default_sample_size, | 330 moof.tracks[0].header.default_sample_size, |
331 iter_->sample_offset()); | 331 iter_->sample_offset()); |
332 iter_->AdvanceRun(); | 332 iter_->AdvanceRun(); |
333 EXPECT_FALSE(iter_->IsRunValid()); | 333 EXPECT_FALSE(iter_->IsRunValid()); |
334 } | 334 } |
335 | 335 |
336 TEST_F(TrackRunIteratorTest, TrackExtendsDefaultsTest) { | 336 TEST_F(TrackRunIteratorTest, TrackExtendsDefaultsTest) { |
337 moov_.extends.tracks[0].default_sample_duration = 50; | 337 moov_.extends.tracks[0].default_sample_duration = 50; |
338 moov_.extends.tracks[0].default_sample_size = 3; | 338 moov_.extends.tracks[0].default_sample_size = 3; |
339 moov_.extends.tracks[0].default_sample_flags = ToSampleFlags("UN"); | 339 moov_.extends.tracks[0].default_sample_flags = ToSampleFlags("UN"); |
340 iter_.reset(new TrackRunIterator(&moov_, log_cb_)); | 340 iter_.reset(new TrackRunIterator(&moov_, log_cb_)); |
341 MovieFragment moof = CreateFragment(); | 341 MovieFragment moof = CreateFragment(); |
342 moof.tracks[0].header.has_default_sample_flags = false; | 342 moof.tracks[0].header.has_default_sample_flags = false; |
343 moof.tracks[0].header.default_sample_size = 0; | 343 moof.tracks[0].header.default_sample_size = 0; |
344 moof.tracks[0].header.default_sample_duration = 0; | 344 moof.tracks[0].header.default_sample_duration = 0; |
345 moof.tracks[0].runs[0].sample_sizes.clear(); | 345 moof.tracks[0].runs[0].sample_sizes.clear(); |
346 ASSERT_TRUE(iter_->Init(moof)); | 346 ASSERT_TRUE(iter_->Init(moof)); |
347 iter_->AdvanceSample(); | 347 iter_->AdvanceSample(); |
348 EXPECT_FALSE(iter_->is_keyframe()); | 348 EXPECT_FALSE(iter_->is_keyframe()); |
349 EXPECT_EQ(iter_->sample_size(), 3); | 349 EXPECT_EQ(iter_->sample_size(), 3); |
350 EXPECT_EQ(iter_->sample_offset(), moof.tracks[0].runs[0].data_offset + 3); | 350 EXPECT_EQ(iter_->sample_offset(), moof.tracks[0].runs[0].data_offset + 3); |
351 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(50, kAudioScale)); | 351 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(50, kAudioScale)); |
352 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(50, kAudioScale)); | 352 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(50, kAudioScale)); |
353 } | 353 } |
354 | 354 |
355 TEST_F(TrackRunIteratorTest, FirstSampleFlagTest) { | 355 TEST_F(TrackRunIteratorTest, FirstSampleFlagTest) { |
356 // Ensure that keyframes are flagged correctly in the face of BMFF boxes which | 356 // Ensure that keyframes are flagged correctly in the face of BMFF boxes which |
357 // explicitly specify the flags for the first sample in a run and rely on | 357 // explicitly specify the flags for the first sample in a run and rely on |
358 // defaults for all subsequent samples | 358 // defaults for all subsequent samples |
359 iter_.reset(new TrackRunIterator(&moov_, log_cb_)); | 359 iter_.reset(new TrackRunIterator(&moov_, log_cb_)); |
360 MovieFragment moof = CreateFragment(); | 360 MovieFragment moof = CreateFragment(); |
361 moof.tracks[1].header.has_default_sample_flags = true; | 361 moof.tracks[1].header.has_default_sample_flags = true; |
362 moof.tracks[1].header.default_sample_flags = ToSampleFlags("UN"); | 362 moof.tracks[1].header.default_sample_flags = ToSampleFlags("UN"); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 std::vector<int32>& cts_offsets = | 401 std::vector<int32>& cts_offsets = |
402 moof.tracks[1].runs[0].sample_composition_time_offsets; | 402 moof.tracks[1].runs[0].sample_composition_time_offsets; |
403 cts_offsets.resize(10); | 403 cts_offsets.resize(10); |
404 cts_offsets[0] = 2; | 404 cts_offsets[0] = 2; |
405 cts_offsets[1] = 5; | 405 cts_offsets[1] = 5; |
406 cts_offsets[2] = 0; | 406 cts_offsets[2] = 0; |
407 moof.tracks[1].decode_time.decode_time = 0; | 407 moof.tracks[1].decode_time.decode_time = 0; |
408 | 408 |
409 ASSERT_TRUE(iter_->Init(moof)); | 409 ASSERT_TRUE(iter_->Init(moof)); |
410 iter_->AdvanceRun(); | 410 iter_->AdvanceRun(); |
411 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(0, kVideoScale)); | 411 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(0, kVideoScale)); |
412 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(0, kVideoScale)); | 412 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(0, kVideoScale)); |
413 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1, kVideoScale)); | 413 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(1, kVideoScale)); |
414 iter_->AdvanceSample(); | 414 iter_->AdvanceSample(); |
415 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(1, kVideoScale)); | 415 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(1, kVideoScale)); |
416 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(4, kVideoScale)); | 416 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(4, kVideoScale)); |
417 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(2, kVideoScale)); | 417 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(2, kVideoScale)); |
418 iter_->AdvanceSample(); | 418 iter_->AdvanceSample(); |
419 EXPECT_EQ(iter_->dts(), TimeDeltaFromRational(3, kVideoScale)); | 419 EXPECT_EQ(iter_->dts(), DecodeTimestampFromRational(3, kVideoScale)); |
420 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(1, kVideoScale)); | 420 EXPECT_EQ(iter_->cts(), TimeDeltaFromRational(1, kVideoScale)); |
421 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(3, kVideoScale)); | 421 EXPECT_EQ(iter_->duration(), TimeDeltaFromRational(3, kVideoScale)); |
422 } | 422 } |
423 | 423 |
424 TEST_F(TrackRunIteratorTest, IgnoreUnknownAuxInfoTest) { | 424 TEST_F(TrackRunIteratorTest, IgnoreUnknownAuxInfoTest) { |
425 iter_.reset(new TrackRunIterator(&moov_, log_cb_)); | 425 iter_.reset(new TrackRunIterator(&moov_, log_cb_)); |
426 MovieFragment moof = CreateFragment(); | 426 MovieFragment moof = CreateFragment(); |
427 moof.tracks[1].auxiliary_offset.offsets.push_back(50); | 427 moof.tracks[1].auxiliary_offset.offsets.push_back(50); |
428 moof.tracks[1].auxiliary_size.default_sample_info_size = 2; | 428 moof.tracks[1].auxiliary_size.default_sample_info_size = 2; |
429 moof.tracks[1].auxiliary_size.sample_count = 2; | 429 moof.tracks[1].auxiliary_size.sample_count = 2; |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 | 657 |
658 iter_->AdvanceRun(); | 658 iter_->AdvanceRun(); |
659 | 659 |
660 // Verify that nothing is marked as a random access point. | 660 // Verify that nothing is marked as a random access point. |
661 EXPECT_EQ("2 KR P PR P KR K", KeyframeAndRAPInfo(iter_.get())); | 661 EXPECT_EQ("2 KR P PR P KR K", KeyframeAndRAPInfo(iter_.get())); |
662 } | 662 } |
663 | 663 |
664 | 664 |
665 } // namespace mp4 | 665 } // namespace mp4 |
666 } // namespace media | 666 } // namespace media |
OLD | NEW |