Index: media/filters/chunk_demuxer_unittest.cc |
diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc |
index a05d2342e6945d832f9f3c29d8823571c92ae1ac..9d41121dad1307587586f7716d9ca95de964457f 100644 |
--- a/media/filters/chunk_demuxer_unittest.cc |
+++ b/media/filters/chunk_demuxer_unittest.cc |
@@ -1801,4 +1801,81 @@ TEST_F(ChunkDemuxerTest, TestEndOfStreamDuringSeek) { |
end_of_stream_helper.CheckIfReadDonesWereCalled(true); |
} |
+TEST_F(ChunkDemuxerTest, TestTimestampPositiveOffset) { |
+ ASSERT_TRUE(InitDemuxer(true, true, false)); |
+ |
+ demuxer_->SetTimestampOffset(kSourceId, 30); |
acolwell GONE FROM CHROMIUM
2012/07/25 18:22:43
nit: ASSERT_TRUE() here and below.
vrk (LEFT CHROMIUM)
2012/07/25 22:56:50
Done.
|
+ scoped_ptr<Cluster> cluster(GenerateCluster(0, 2)); |
+ ASSERT_TRUE(AppendData(cluster->data(), cluster->size())); |
+ |
+ scoped_refptr<DemuxerStream> audio = |
+ demuxer_->GetStream(DemuxerStream::AUDIO); |
+ scoped_refptr<DemuxerStream> video = |
+ demuxer_->GetStream(DemuxerStream::VIDEO); |
+ |
+ bool audio_read_done = false; |
+ bool video_read_done = false; |
+ audio->Read(base::Bind(&OnReadDone, |
acolwell GONE FROM CHROMIUM
2012/07/25 18:22:43
nit: I think using GenerateExpectedReads(30000, 2,
vrk (LEFT CHROMIUM)
2012/07/25 22:56:50
Done.
|
+ base::TimeDelta::FromSeconds(30), |
+ &audio_read_done)); |
+ video->Read(base::Bind(&OnReadDone, |
+ base::TimeDelta::FromSeconds(30), |
+ &video_read_done)); |
+ |
+ EXPECT_TRUE(audio_read_done); |
+ EXPECT_TRUE(video_read_done); |
+} |
+ |
+TEST_F(ChunkDemuxerTest, TestTimestampNegativeOffset) { |
+ ASSERT_TRUE(InitDemuxer(true, true, false)); |
+ |
+ demuxer_->SetTimestampOffset(kSourceId, -1); |
+ scoped_ptr<Cluster> cluster = GenerateCluster(1000, 2); |
+ ASSERT_TRUE(AppendData(cluster->data(), cluster->size())); |
+ |
+ scoped_refptr<DemuxerStream> audio = |
+ demuxer_->GetStream(DemuxerStream::AUDIO); |
+ scoped_refptr<DemuxerStream> video = |
+ demuxer_->GetStream(DemuxerStream::VIDEO); |
+ |
+ bool audio_read_done = false; |
+ bool video_read_done = false; |
+ audio->Read(base::Bind(&OnReadDone, |
acolwell GONE FROM CHROMIUM
2012/07/25 18:22:43
nit: ditto w/ different timestamp
vrk (LEFT CHROMIUM)
2012/07/25 22:56:50
Done.
|
+ base::TimeDelta::FromSeconds(0), |
+ &audio_read_done)); |
+ video->Read(base::Bind(&OnReadDone, |
+ base::TimeDelta::FromSeconds(0), |
+ &video_read_done)); |
+ |
+ EXPECT_TRUE(audio_read_done); |
+ EXPECT_TRUE(video_read_done); |
+} |
+ |
+TEST_F(ChunkDemuxerTest, TestTimestampOffsetSeparateStreams) { |
+ std::string audio_id = "audio1"; |
+ std::string video_id = "video1"; |
+ ASSERT_TRUE(InitDemuxerAudioAndVideoSources(audio_id, video_id)); |
+ |
+ scoped_refptr<DemuxerStream> audio = |
+ demuxer_->GetStream(DemuxerStream::AUDIO); |
+ scoped_refptr<DemuxerStream> video = |
+ demuxer_->GetStream(DemuxerStream::VIDEO); |
+ |
+ scoped_ptr<Cluster> cluster_a( |
+ GenerateSingleStreamCluster( |
+ 2500, 2500 + kAudioBlockDuration * 4, kAudioTrackNum, |
+ kAudioBlockDuration)); |
+ |
+ scoped_ptr<Cluster> cluster_v( |
+ GenerateSingleStreamCluster( |
+ 0, kVideoBlockDuration * 4, kVideoTrackNum, kVideoBlockDuration)); |
+ |
+ demuxer_->SetTimestampOffset(audio_id, -2.5f); |
+ ASSERT_TRUE(AppendData(audio_id, cluster_a->data(), cluster_a->size())); |
+ GenerateSingleStreamExpectedReads(0, 4, audio, kAudioBlockDuration); |
+ |
+ demuxer_->SetTimestampOffset(video_id, 27.3f); |
+ ASSERT_TRUE(AppendData(video_id, cluster_v->data(), cluster_v->size())); |
+ GenerateSingleStreamExpectedReads(27300, 4, video, kVideoBlockDuration); |
+} |
} // namespace media |
acolwell GONE FROM CHROMIUM
2012/07/25 18:22:43
nit: Add a test for rejecting an offset change mid
vrk (LEFT CHROMIUM)
2012/07/25 22:56:50
Good idea, done.
|