| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 16 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 17 #include "base/run_loop.h" |
| 17 #include "base/single_thread_task_runner.h" | 18 #include "base/single_thread_task_runner.h" |
| 18 #include "base/strings/string_split.h" | 19 #include "base/strings/string_split.h" |
| 19 #include "base/strings/string_util.h" | 20 #include "base/strings/string_util.h" |
| 20 #include "base/threading/thread_task_runner_handle.h" | 21 #include "base/threading/thread_task_runner_handle.h" |
| 21 #include "build/build_config.h" | 22 #include "build/build_config.h" |
| 22 #include "media/base/cdm_callback_promise.h" | 23 #include "media/base/cdm_callback_promise.h" |
| 23 #include "media/base/cdm_context.h" | 24 #include "media/base/cdm_context.h" |
| 24 #include "media/base/cdm_key_information.h" | 25 #include "media/base/cdm_key_information.h" |
| 25 #include "media/base/decoder_buffer.h" | 26 #include "media/base/decoder_buffer.h" |
| 26 #include "media/base/media.h" | 27 #include "media/base/media.h" |
| (...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 | 783 |
| 783 pipeline_->Start(demuxer_.get(), CreateRenderer(), this, | 784 pipeline_->Start(demuxer_.get(), CreateRenderer(), this, |
| 784 base::Bind(&PipelineIntegrationTest::OnStatusCallback, | 785 base::Bind(&PipelineIntegrationTest::OnStatusCallback, |
| 785 base::Unretained(this))); | 786 base::Unretained(this))); |
| 786 | 787 |
| 787 if (encrypted_media) { | 788 if (encrypted_media) { |
| 788 source->set_encrypted_media_init_data_cb( | 789 source->set_encrypted_media_init_data_cb( |
| 789 base::Bind(&FakeEncryptedMedia::OnEncryptedMediaInitData, | 790 base::Bind(&FakeEncryptedMedia::OnEncryptedMediaInitData, |
| 790 base::Unretained(encrypted_media))); | 791 base::Unretained(encrypted_media))); |
| 791 } | 792 } |
| 792 message_loop_.Run(); | 793 base::RunLoop().Run(); |
| 793 return pipeline_status_; | 794 return pipeline_status_; |
| 794 } | 795 } |
| 795 | 796 |
| 796 // Verifies that seeking works properly for ChunkDemuxer when the | 797 // Verifies that seeking works properly for ChunkDemuxer when the |
| 797 // seek happens while there is a pending read on the ChunkDemuxer | 798 // seek happens while there is a pending read on the ChunkDemuxer |
| 798 // and no data is available. | 799 // and no data is available. |
| 799 bool TestSeekDuringRead(const std::string& filename, | 800 bool TestSeekDuringRead(const std::string& filename, |
| 800 const std::string& mimetype, | 801 const std::string& mimetype, |
| 801 int initial_append_size, | 802 int initial_append_size, |
| 802 base::TimeDelta start_seek_time, | 803 base::TimeDelta start_seek_time, |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 MockMediaSource source(input_filename, kWebM, kAppendWholeFile); | 1321 MockMediaSource source(input_filename, kWebM, kAppendWholeFile); |
| 1321 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); | 1322 EXPECT_EQ(PIPELINE_OK, StartPipelineWithMediaSource(&source)); |
| 1322 | 1323 |
| 1323 auto buffered_ranges = pipeline_->GetBufferedTimeRanges(); | 1324 auto buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
| 1324 EXPECT_EQ(1u, buffered_ranges.size()); | 1325 EXPECT_EQ(1u, buffered_ranges.size()); |
| 1325 EXPECT_EQ(0, buffered_ranges.start(0).InMilliseconds()); | 1326 EXPECT_EQ(0, buffered_ranges.start(0).InMilliseconds()); |
| 1326 EXPECT_EQ(k320WebMFileDurationMs, buffered_ranges.end(0).InMilliseconds()); | 1327 EXPECT_EQ(k320WebMFileDurationMs, buffered_ranges.end(0).InMilliseconds()); |
| 1327 | 1328 |
| 1328 source.RemoveRange(base::TimeDelta::FromMilliseconds(1000), | 1329 source.RemoveRange(base::TimeDelta::FromMilliseconds(1000), |
| 1329 base::TimeDelta::FromMilliseconds(k320WebMFileDurationMs)); | 1330 base::TimeDelta::FromMilliseconds(k320WebMFileDurationMs)); |
| 1330 message_loop_.RunUntilIdle(); | 1331 base::RunLoop().RunUntilIdle(); |
| 1331 | 1332 |
| 1332 buffered_ranges = pipeline_->GetBufferedTimeRanges(); | 1333 buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
| 1333 EXPECT_EQ(1u, buffered_ranges.size()); | 1334 EXPECT_EQ(1u, buffered_ranges.size()); |
| 1334 EXPECT_EQ(0, buffered_ranges.start(0).InMilliseconds()); | 1335 EXPECT_EQ(0, buffered_ranges.start(0).InMilliseconds()); |
| 1335 EXPECT_EQ(1001, buffered_ranges.end(0).InMilliseconds()); | 1336 EXPECT_EQ(1001, buffered_ranges.end(0).InMilliseconds()); |
| 1336 | 1337 |
| 1337 source.Shutdown(); | 1338 source.Shutdown(); |
| 1338 Stop(); | 1339 Stop(); |
| 1339 } | 1340 } |
| 1340 | 1341 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1356 EXPECT_EQ(1u, buffered_ranges.size()); | 1357 EXPECT_EQ(1u, buffered_ranges.size()); |
| 1357 do { | 1358 do { |
| 1358 // Advance media_time to the end of the currently buffered data | 1359 // Advance media_time to the end of the currently buffered data |
| 1359 base::TimeDelta media_time = buffered_ranges.end(0); | 1360 base::TimeDelta media_time = buffered_ranges.end(0); |
| 1360 source.Seek(media_time); | 1361 source.Seek(media_time); |
| 1361 // Ask MediaSource to evict buffered data if buffering limit has been | 1362 // Ask MediaSource to evict buffered data if buffering limit has been |
| 1362 // reached (the data will be evicted from the front of the buffered range). | 1363 // reached (the data will be evicted from the front of the buffered range). |
| 1363 source.EvictCodedFrames(media_time, file->data_size()); | 1364 source.EvictCodedFrames(media_time, file->data_size()); |
| 1364 ASSERT_TRUE( | 1365 ASSERT_TRUE( |
| 1365 source.AppendAtTime(media_time, file->data(), file->data_size())); | 1366 source.AppendAtTime(media_time, file->data(), file->data_size())); |
| 1366 message_loop_.RunUntilIdle(); | 1367 base::RunLoop().RunUntilIdle(); |
| 1367 | 1368 |
| 1368 buffered_ranges = pipeline_->GetBufferedTimeRanges(); | 1369 buffered_ranges = pipeline_->GetBufferedTimeRanges(); |
| 1369 } while (buffered_ranges.size() == 1 && | 1370 } while (buffered_ranges.size() == 1 && |
| 1370 buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0)); | 1371 buffered_ranges.start(0) == base::TimeDelta::FromSeconds(0)); |
| 1371 | 1372 |
| 1372 EXPECT_EQ(1u, buffered_ranges.size()); | 1373 EXPECT_EQ(1u, buffered_ranges.size()); |
| 1373 source.Shutdown(); | 1374 source.Shutdown(); |
| 1374 Stop(); | 1375 Stop(); |
| 1375 } | 1376 } |
| 1376 | 1377 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1413 | 1414 |
| 1414 scoped_refptr<DecoderBuffer> second_file = | 1415 scoped_refptr<DecoderBuffer> second_file = |
| 1415 ReadTestDataFile("bear-640x360-av_enc-av.webm"); | 1416 ReadTestDataFile("bear-640x360-av_enc-av.webm"); |
| 1416 | 1417 |
| 1417 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), | 1418 ASSERT_FALSE(source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), |
| 1418 second_file->data(), | 1419 second_file->data(), |
| 1419 second_file->data_size())); | 1420 second_file->data_size())); |
| 1420 | 1421 |
| 1421 source.EndOfStream(); | 1422 source.EndOfStream(); |
| 1422 | 1423 |
| 1423 message_loop_.Run(); | 1424 base::RunLoop().Run(); |
| 1424 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); | 1425 EXPECT_EQ(CHUNK_DEMUXER_ERROR_APPEND_FAILED, pipeline_status_); |
| 1425 | 1426 |
| 1426 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 1427 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
| 1427 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); | 1428 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); |
| 1428 // The second video was not added, so its time has not been added. | 1429 // The second video was not added, so its time has not been added. |
| 1429 EXPECT_EQ(k320WebMFileDurationMs, | 1430 EXPECT_EQ(k320WebMFileDurationMs, |
| 1430 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); | 1431 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); |
| 1431 | 1432 |
| 1432 Play(); | 1433 Play(); |
| 1433 | 1434 |
| (...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2398 | 2399 |
| 2399 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 2400 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
| 2400 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 2401 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
| 2401 Play(); | 2402 Play(); |
| 2402 ASSERT_TRUE(WaitUntilOnEnded()); | 2403 ASSERT_TRUE(WaitUntilOnEnded()); |
| 2403 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 2404 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
| 2404 demuxer_->GetStartTime()); | 2405 demuxer_->GetStartTime()); |
| 2405 } | 2406 } |
| 2406 | 2407 |
| 2407 } // namespace media | 2408 } // namespace media |
| OLD | NEW |