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

Unified Diff: media/filters/chunk_demuxer_unittest.cc

Issue 16867010: Move pending seek cancellation logic from ChunkDemuxerStream to ChunkDemuxer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address CR comments 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« 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