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 |