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

Unified Diff: media/filters/chunk_demuxer_unittest.cc

Issue 10803019: Chrome-side implementation of media source timestamp offset (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase ToT Created 8 years, 5 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') | media/filters/source_buffer_stream.cc » ('j') | 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 fda9bb79689448635f1204a37cdeddbb31b83bb7..927636acfc3827081cf6fceb2b607bcf775ffed8 100644
--- a/media/filters/chunk_demuxer_unittest.cc
+++ b/media/filters/chunk_demuxer_unittest.cc
@@ -2064,4 +2064,70 @@ TEST_F(ChunkDemuxerTest, TestConfigChange_Seek) {
ASSERT_TRUE(video_config_1.Matches(stream->video_decoder_config()));
}
+TEST_F(ChunkDemuxerTest, TestTimestampPositiveOffset) {
+ ASSERT_TRUE(InitDemuxer(true, true, false));
+
+ ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId, 30));
+ 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);
+ GenerateExpectedReads(30000, 2, audio, video);
+}
+
+TEST_F(ChunkDemuxerTest, TestTimestampNegativeOffset) {
+ ASSERT_TRUE(InitDemuxer(true, true, false));
+
+ ASSERT_TRUE(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);
+ GenerateExpectedReads(0, 2, audio, video);
+}
+
+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));
+
+ ASSERT_TRUE(demuxer_->SetTimestampOffset(audio_id, -2.5));
+ ASSERT_TRUE(AppendData(audio_id, cluster_a->data(), cluster_a->size()));
+ GenerateSingleStreamExpectedReads(0, 4, audio, kAudioBlockDuration);
+
+ ASSERT_TRUE(demuxer_->SetTimestampOffset(video_id, 27.3));
+ ASSERT_TRUE(AppendData(video_id, cluster_v->data(), cluster_v->size()));
+ GenerateSingleStreamExpectedReads(27300, 4, video, kVideoBlockDuration);
+}
+
+TEST_F(ChunkDemuxerTest, TestTimestampOffsetMidParse) {
+ ASSERT_TRUE(InitDemuxer(true, true, false));
+
+ scoped_ptr<Cluster> cluster = GenerateCluster(0, 2);
+ // Append only part of the cluster data.
+ ASSERT_TRUE(AppendData(cluster->data(), cluster->size() - 13));
+
+ // Setting a timestamp should fail because we're in the middle of a cluster.
+ ASSERT_FALSE(demuxer_->SetTimestampOffset(kSourceId, 25));
+}
} // namespace media
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | media/filters/source_buffer_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698