| Index: media/filters/chunk_demuxer_unittest.cc
|
| diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
|
| index c0f7ec061b7a50b2ad499213357e0c2f4dd81baa..32d0d0de53055b8bd806e3825e28ddcba3afbbee 100644
|
| --- a/media/filters/chunk_demuxer_unittest.cc
|
| +++ b/media/filters/chunk_demuxer_unittest.cc
|
| @@ -790,6 +790,12 @@ class ChunkDemuxerTest : public testing::Test {
|
| return scoped_ptr<TextTrack>();
|
| }
|
|
|
| + void Seek(base::TimeDelta seek_time) {
|
| + demuxer_->StartWaitingForSeek();
|
| + demuxer_->Seek(seek_time, NewExpectedStatusCB(PIPELINE_OK));
|
| + message_loop_.RunUntilIdle();
|
| + }
|
| +
|
| base::MessageLoop message_loop_;
|
| MockDemuxerHost host_;
|
|
|
| @@ -884,8 +890,7 @@ TEST_F(ChunkDemuxerTest, TestAppendDataAfterSeek) {
|
|
|
| EXPECT_CALL(*this, Checkpoint(1));
|
|
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(46),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(46));
|
|
|
| EXPECT_CALL(*this, Checkpoint(2));
|
|
|
| @@ -935,9 +940,7 @@ TEST_F(ChunkDemuxerTest, TestSeekWhileParsingCluster) {
|
| // in the cluster the cluster.
|
| ExpectRead(DemuxerStream::AUDIO, 2 * kAudioBlockDuration);
|
|
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(5),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(5));
|
|
|
| // Append the rest of the cluster.
|
| AppendData(cluster_a->data() + first_append_size, second_append_size);
|
| @@ -1268,20 +1271,14 @@ TEST_F(ChunkDemuxerTest, TestEndOfStreamDuringCanceledSeek) {
|
| demuxer_->EndOfStream(PIPELINE_OK);
|
|
|
| // Start the first seek.
|
| - demuxer_->StartWaitingForSeek();
|
| -
|
| - // Simulate the pipeline finally calling Seek().
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(20),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(20));
|
|
|
| // Simulate another seek being requested before the first
|
| // seek has finished prerolling.
|
| demuxer_->CancelPendingSeek();
|
|
|
| // Finish second seek.
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(30),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(30));
|
|
|
| DemuxerStream::Status status;
|
| base::TimeDelta last_timestamp;
|
| @@ -1601,9 +1598,7 @@ TEST_F(ChunkDemuxerTest, TestSeekCanceled) {
|
| AppendData(start_cluster->data(), start_cluster->size());
|
|
|
| // Seek to an unbuffered region.
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(50),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(50));
|
|
|
| // Attempt to read in unbuffered area; should not fulfill the read.
|
| bool audio_read_done = false;
|
| @@ -1620,9 +1615,7 @@ TEST_F(ChunkDemuxerTest, TestSeekCanceled) {
|
| EXPECT_TRUE(video_read_done);
|
|
|
| // A seek back to the buffered region should succeed.
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(0),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(0));
|
| GenerateExpectedReads(0, 4);
|
| }
|
|
|
| @@ -1650,9 +1643,7 @@ TEST_F(ChunkDemuxerTest, TestSeekCanceledWhileWaitingForSeek) {
|
| EXPECT_TRUE(video_read_done);
|
|
|
| // A seek back to the buffered region should succeed.
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(0),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(0));
|
| GenerateExpectedReads(0, 4);
|
| }
|
|
|
| @@ -1684,9 +1675,7 @@ TEST_F(ChunkDemuxerTest, TestSeekAudioAndVideoSources) {
|
| EXPECT_TRUE(video_read_done);
|
|
|
| // Seek to 3 (an unbuffered region).
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(3),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(3));
|
|
|
| audio_read_done = false;
|
| video_read_done = false;
|
| @@ -1971,14 +1960,11 @@ TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodes) {
|
| scoped_ptr<Cluster> start_cluster(GenerateCluster(0, 25, 8));
|
| AppendData(start_cluster->data(), start_cluster->size());
|
|
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(0),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(0));
|
| GenerateExpectedReads(0, 25, 8);
|
|
|
| // Seek to 5 seconds.
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromSeconds(5),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromSeconds(5));
|
|
|
| // Generate a cluster to fulfill this seek, where audio timecode begins 25ms
|
| // after the video.
|
| @@ -2004,8 +1990,7 @@ TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodesSeparateSources) {
|
| AppendData(video_id, cluster_v->data(), cluster_v->size());
|
|
|
| // Both streams should be able to fulfill a seek to 25.
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(25),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(25));
|
| GenerateAudioStreamExpectedReads(25, 4);
|
| GenerateVideoStreamExpectedReads(30, 4);
|
| }
|
| @@ -2027,6 +2012,7 @@ TEST_F(ChunkDemuxerTest, TestDifferentStreamTimecodesOutOfRange) {
|
| AppendData(video_id, cluster_v->data(), cluster_v->size());
|
|
|
| // Should not be able to fulfill a seek to 0.
|
| + demuxer_->StartWaitingForSeek();
|
| demuxer_->Seek(base::TimeDelta::FromMilliseconds(0),
|
| NewExpectedStatusCB(PIPELINE_ERROR_ABORT));
|
| ExpectRead(DemuxerStream::AUDIO, 0);
|
| @@ -2116,9 +2102,7 @@ TEST_F(ChunkDemuxerTest, TestEndOfStreamStillSetAfterSeek) {
|
| EXPECT_EQ(kLastVideoTimestamp, last_timestamp);
|
|
|
| // Seek back to 0 and verify that we can read to the end again..
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(0),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(0));
|
|
|
| ReadUntilNotOkOrEndOfStream(DemuxerStream::AUDIO, &status, &last_timestamp);
|
| EXPECT_EQ(DemuxerStream::kOk, status);
|
| @@ -2278,8 +2262,7 @@ TEST_F(ChunkDemuxerTest, TestConfigChange_Seek) {
|
| ExpectRead(DemuxerStream::VIDEO, 0);
|
|
|
| // Seek to a location with a different config.
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(527),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(527));
|
|
|
| // Verify that the config change is signalled.
|
| ExpectConfigChanged(DemuxerStream::VIDEO);
|
| @@ -2294,8 +2277,7 @@ TEST_F(ChunkDemuxerTest, TestConfigChange_Seek) {
|
| ExpectRead(DemuxerStream::VIDEO, 527);
|
|
|
| // Seek back to the beginning and verify we get another config change.
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(0),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(0));
|
| ExpectConfigChanged(DemuxerStream::VIDEO);
|
| ASSERT_TRUE(video_config_1.Matches(video->video_decoder_config()));
|
| ExpectRead(DemuxerStream::VIDEO, 0);
|
| @@ -2303,10 +2285,8 @@ TEST_F(ChunkDemuxerTest, TestConfigChange_Seek) {
|
| // Seek to a location that requires a config change and then
|
| // seek to a new location that has the same configuration as
|
| // the start of the file without a Read() in the middle.
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(527),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(801),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(527));
|
| + Seek(base::TimeDelta::FromMilliseconds(801));
|
|
|
| // Verify that no config change is signalled.
|
| ExpectRead(DemuxerStream::VIDEO, 801);
|
| @@ -2321,9 +2301,7 @@ TEST_F(ChunkDemuxerTest, TestTimestampPositiveOffset) {
|
| scoped_ptr<Cluster> cluster(GenerateCluster(0, 2));
|
| AppendData(cluster->data(), cluster->size());
|
|
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(30000),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(30000));
|
|
|
| GenerateExpectedReads(30000, 2);
|
| }
|
| @@ -2371,9 +2349,7 @@ TEST_F(ChunkDemuxerTest, TestTimestampOffsetSeparateStreams) {
|
| GenerateAudioStreamExpectedReads(0, 4);
|
| GenerateVideoStreamExpectedReads(0, 4);
|
|
|
| - demuxer_->StartWaitingForSeek();
|
| - demuxer_->Seek(base::TimeDelta::FromMilliseconds(27300),
|
| - NewExpectedStatusCB(PIPELINE_OK));
|
| + Seek(base::TimeDelta::FromMilliseconds(27300));
|
|
|
| ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| audio_id, base::TimeDelta::FromMilliseconds(27300)));
|
| @@ -2573,4 +2549,18 @@ TEST_F(ChunkDemuxerTest, TestEndOfStreamWhileWaitingForGapToBeFilled) {
|
| EXPECT_TRUE(video_read_done);
|
| }
|
|
|
| +TEST_F(ChunkDemuxerTest, TestCanceledSeekDuringInitialPreroll) {
|
| + ASSERT_TRUE(InitDemuxer(true, true));
|
| +
|
| + // Cancel preroll.
|
| + demuxer_->CancelPendingSeek();
|
| +
|
| + // Initiate the seek to the new location.
|
| + int seek_time_in_ms = 200;
|
| + Seek(base::TimeDelta::FromMilliseconds(seek_time_in_ms));
|
| +
|
| + // Append data to satisfy the seek.
|
| + AppendCluster(seek_time_in_ms, 10);
|
| +}
|
| +
|
| } // namespace media
|
|
|