| 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 |