Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(727)

Side by Side Diff: media/filters/chunk_demuxer_unittest.cc

Issue 17261029: Fix ChunkDemuxer seek and init callback dispatch. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address CR comment Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698