| 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 <algorithm> | 5 #include <algorithm> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "media/base/audio_decoder_config.h" | 9 #include "media/base/audio_decoder_config.h" |
| 10 #include "media/base/decoder_buffer.h" | 10 #include "media/base/decoder_buffer.h" |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 // segment. | 453 // segment. |
| 454 AppendData(bear1->GetData(), 4370); | 454 AppendData(bear1->GetData(), 4370); |
| 455 AppendData(bear1->GetData() + 72737, 28183); | 455 AppendData(bear1->GetData() + 72737, 28183); |
| 456 CheckExpectedRanges(kSourceId, "{ [0,2737) }"); | 456 CheckExpectedRanges(kSourceId, "{ [0,2737) }"); |
| 457 | 457 |
| 458 demuxer_->EndOfStream(PIPELINE_OK); | 458 demuxer_->EndOfStream(PIPELINE_OK); |
| 459 return true; | 459 return true; |
| 460 } | 460 } |
| 461 | 461 |
| 462 void ShutdownDemuxer() { | 462 void ShutdownDemuxer() { |
| 463 if (demuxer_) | 463 if (demuxer_) { |
| 464 demuxer_->Shutdown(); | 464 demuxer_->Shutdown(); |
| 465 message_loop_.RunUntilIdle(); |
| 466 } |
| 465 } | 467 } |
| 466 | 468 |
| 467 void AddSimpleBlock(ClusterBuilder* cb, int track_num, int64 timecode) { | 469 void AddSimpleBlock(ClusterBuilder* cb, int track_num, int64 timecode) { |
| 468 uint8 data[] = { 0x00 }; | 470 uint8 data[] = { 0x00 }; |
| 469 cb->AddSimpleBlock(track_num, timecode, 0, data, sizeof(data)); | 471 cb->AddSimpleBlock(track_num, timecode, 0, data, sizeof(data)); |
| 470 } | 472 } |
| 471 | 473 |
| 472 scoped_ptr<Cluster> GenerateCluster(int timecode, int block_count) { | 474 scoped_ptr<Cluster> GenerateCluster(int timecode, int block_count) { |
| 473 return GenerateCluster(timecode, timecode, block_count); | 475 return GenerateCluster(timecode, timecode, block_count); |
| 474 } | 476 } |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 NewExpectedStatusCB(PIPELINE_OK)); | 888 NewExpectedStatusCB(PIPELINE_OK)); |
| 887 | 889 |
| 888 EXPECT_CALL(*this, Checkpoint(2)); | 890 EXPECT_CALL(*this, Checkpoint(2)); |
| 889 | 891 |
| 890 scoped_ptr<Cluster> cluster(kDefaultSecondCluster()); | 892 scoped_ptr<Cluster> cluster(kDefaultSecondCluster()); |
| 891 | 893 |
| 892 Checkpoint(1); | 894 Checkpoint(1); |
| 893 | 895 |
| 894 AppendData(cluster->data(), cluster->size()); | 896 AppendData(cluster->data(), cluster->size()); |
| 895 | 897 |
| 898 message_loop_.RunUntilIdle(); |
| 899 |
| 896 Checkpoint(2); | 900 Checkpoint(2); |
| 897 } | 901 } |
| 898 | 902 |
| 899 // Test that parsing errors are handled for clusters appended after init. | 903 // Test that parsing errors are handled for clusters appended after init. |
| 900 TEST_F(ChunkDemuxerTest, TestErrorWhileParsingClusterAfterInit) { | 904 TEST_F(ChunkDemuxerTest, TestErrorWhileParsingClusterAfterInit) { |
| 901 ASSERT_TRUE(InitDemuxer(true, true)); | 905 ASSERT_TRUE(InitDemuxer(true, true)); |
| 902 scoped_ptr<Cluster> first_cluster(kDefaultFirstCluster()); | 906 scoped_ptr<Cluster> first_cluster(kDefaultFirstCluster()); |
| 903 AppendData(first_cluster->data(), first_cluster->size()); | 907 AppendData(first_cluster->data(), first_cluster->size()); |
| 904 | 908 |
| 905 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); | 909 EXPECT_CALL(host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); |
| (...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1726 | 1730 |
| 1727 AppendData(cluster_a1->data(), cluster_a1->size()); | 1731 AppendData(cluster_a1->data(), cluster_a1->size()); |
| 1728 AppendData(cluster_v1->data(), cluster_v1->size()); | 1732 AppendData(cluster_v1->data(), cluster_v1->size()); |
| 1729 | 1733 |
| 1730 // Seeking past the end of video. | 1734 // Seeking past the end of video. |
| 1731 // Note: audio data is available for that seek point. | 1735 // Note: audio data is available for that seek point. |
| 1732 bool seek_cb_was_called = false; | 1736 bool seek_cb_was_called = false; |
| 1733 demuxer_->StartWaitingForSeek(); | 1737 demuxer_->StartWaitingForSeek(); |
| 1734 demuxer_->Seek(base::TimeDelta::FromMilliseconds(110), | 1738 demuxer_->Seek(base::TimeDelta::FromMilliseconds(110), |
| 1735 base::Bind(OnSeekDone_OKExpected, &seek_cb_was_called)); | 1739 base::Bind(OnSeekDone_OKExpected, &seek_cb_was_called)); |
| 1740 message_loop_.RunUntilIdle(); |
| 1741 |
| 1736 EXPECT_FALSE(seek_cb_was_called); | 1742 EXPECT_FALSE(seek_cb_was_called); |
| 1737 | 1743 |
| 1738 EXPECT_CALL(host_, SetDuration( | 1744 EXPECT_CALL(host_, SetDuration( |
| 1739 base::TimeDelta::FromMilliseconds(120))); | 1745 base::TimeDelta::FromMilliseconds(120))); |
| 1740 demuxer_->EndOfStream(PIPELINE_OK); | 1746 demuxer_->EndOfStream(PIPELINE_OK); |
| 1747 message_loop_.RunUntilIdle(); |
| 1748 |
| 1741 EXPECT_TRUE(seek_cb_was_called); | 1749 EXPECT_TRUE(seek_cb_was_called); |
| 1742 | 1750 |
| 1743 ShutdownDemuxer(); | 1751 ShutdownDemuxer(); |
| 1744 } | 1752 } |
| 1745 | 1753 |
| 1746 // Test that EndOfStream is ignored if coming during a pending seek | 1754 // Test that EndOfStream is ignored if coming during a pending seek |
| 1747 // whose seek time is before some existing ranges. | 1755 // whose seek time is before some existing ranges. |
| 1748 TEST_F(ChunkDemuxerTest, TestEndOfStreamDuringPendingSeek) { | 1756 TEST_F(ChunkDemuxerTest, TestEndOfStreamDuringPendingSeek) { |
| 1749 ASSERT_TRUE(InitDemuxer(true, true)); | 1757 ASSERT_TRUE(InitDemuxer(true, true)); |
| 1750 | 1758 |
| 1751 scoped_ptr<Cluster> cluster_a1( | 1759 scoped_ptr<Cluster> cluster_a1( |
| 1752 GenerateSingleStreamCluster(0, 120, kAudioTrackNum, 10)); | 1760 GenerateSingleStreamCluster(0, 120, kAudioTrackNum, 10)); |
| 1753 scoped_ptr<Cluster> cluster_v1( | 1761 scoped_ptr<Cluster> cluster_v1( |
| 1754 GenerateSingleStreamCluster(0, 100, kVideoTrackNum, 5)); | 1762 GenerateSingleStreamCluster(0, 100, kVideoTrackNum, 5)); |
| 1755 | 1763 |
| 1756 scoped_ptr<Cluster> cluster_a2( | 1764 scoped_ptr<Cluster> cluster_a2( |
| 1757 GenerateSingleStreamCluster(200, 300, kAudioTrackNum, 10)); | 1765 GenerateSingleStreamCluster(200, 300, kAudioTrackNum, 10)); |
| 1758 scoped_ptr<Cluster> cluster_v2( | 1766 scoped_ptr<Cluster> cluster_v2( |
| 1759 GenerateSingleStreamCluster(200, 300, kVideoTrackNum, 5)); | 1767 GenerateSingleStreamCluster(200, 300, kVideoTrackNum, 5)); |
| 1760 | 1768 |
| 1761 AppendData(cluster_a1->data(), cluster_a1->size()); | 1769 AppendData(cluster_a1->data(), cluster_a1->size()); |
| 1762 AppendData(cluster_v1->data(), cluster_v1->size()); | 1770 AppendData(cluster_v1->data(), cluster_v1->size()); |
| 1763 AppendData(cluster_a2->data(), cluster_a2->size()); | 1771 AppendData(cluster_a2->data(), cluster_a2->size()); |
| 1764 AppendData(cluster_v2->data(), cluster_v2->size()); | 1772 AppendData(cluster_v2->data(), cluster_v2->size()); |
| 1765 | 1773 |
| 1766 bool seek_cb_was_called = false; | 1774 bool seek_cb_was_called = false; |
| 1767 demuxer_->StartWaitingForSeek(); | 1775 demuxer_->StartWaitingForSeek(); |
| 1768 demuxer_->Seek(base::TimeDelta::FromMilliseconds(160), | 1776 demuxer_->Seek(base::TimeDelta::FromMilliseconds(160), |
| 1769 base::Bind(OnSeekDone_OKExpected, &seek_cb_was_called)); | 1777 base::Bind(OnSeekDone_OKExpected, &seek_cb_was_called)); |
| 1778 message_loop_.RunUntilIdle(); |
| 1779 |
| 1770 EXPECT_FALSE(seek_cb_was_called); | 1780 EXPECT_FALSE(seek_cb_was_called); |
| 1771 | 1781 |
| 1772 EXPECT_CALL(host_, SetDuration( | 1782 EXPECT_CALL(host_, SetDuration( |
| 1773 base::TimeDelta::FromMilliseconds(300))); | 1783 base::TimeDelta::FromMilliseconds(300))); |
| 1774 demuxer_->EndOfStream(PIPELINE_OK); | 1784 demuxer_->EndOfStream(PIPELINE_OK); |
| 1785 message_loop_.RunUntilIdle(); |
| 1786 |
| 1775 EXPECT_FALSE(seek_cb_was_called); | 1787 EXPECT_FALSE(seek_cb_was_called); |
| 1776 | 1788 |
| 1777 scoped_ptr<Cluster> cluster_a3( | 1789 scoped_ptr<Cluster> cluster_a3( |
| 1778 GenerateSingleStreamCluster(140, 180, kAudioTrackNum, 10)); | 1790 GenerateSingleStreamCluster(140, 180, kAudioTrackNum, 10)); |
| 1779 scoped_ptr<Cluster> cluster_v3( | 1791 scoped_ptr<Cluster> cluster_v3( |
| 1780 GenerateSingleStreamCluster(140, 180, kVideoTrackNum, 5)); | 1792 GenerateSingleStreamCluster(140, 180, kVideoTrackNum, 5)); |
| 1781 AppendData(cluster_a3->data(), cluster_a3->size()); | 1793 AppendData(cluster_a3->data(), cluster_a3->size()); |
| 1782 AppendData(cluster_v3->data(), cluster_v3->size()); | 1794 AppendData(cluster_v3->data(), cluster_v3->size()); |
| 1795 |
| 1796 message_loop_.RunUntilIdle(); |
| 1797 |
| 1783 EXPECT_TRUE(seek_cb_was_called); | 1798 EXPECT_TRUE(seek_cb_was_called); |
| 1784 | 1799 |
| 1785 ShutdownDemuxer(); | 1800 ShutdownDemuxer(); |
| 1786 } | 1801 } |
| 1787 | 1802 |
| 1788 // Test ranges in an audio-only stream. | 1803 // Test ranges in an audio-only stream. |
| 1789 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioIdOnly) { | 1804 TEST_F(ChunkDemuxerTest, GetBufferedRanges_AudioIdOnly) { |
| 1790 EXPECT_CALL(*this, DemuxerOpened()); | 1805 EXPECT_CALL(*this, DemuxerOpened()); |
| 1791 demuxer_->Initialize( | 1806 demuxer_->Initialize( |
| 1792 &host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK)); | 1807 &host_, CreateInitDoneCB(kDefaultDuration(), PIPELINE_OK)); |
| (...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2552 EXPECT_FALSE(audio_read_done); | 2567 EXPECT_FALSE(audio_read_done); |
| 2553 EXPECT_FALSE(video_read_done); | 2568 EXPECT_FALSE(video_read_done); |
| 2554 | 2569 |
| 2555 demuxer_->EndOfStream(PIPELINE_OK); | 2570 demuxer_->EndOfStream(PIPELINE_OK); |
| 2556 | 2571 |
| 2557 EXPECT_TRUE(audio_read_done); | 2572 EXPECT_TRUE(audio_read_done); |
| 2558 EXPECT_TRUE(video_read_done); | 2573 EXPECT_TRUE(video_read_done); |
| 2559 } | 2574 } |
| 2560 | 2575 |
| 2561 } // namespace media | 2576 } // namespace media |
| OLD | NEW |