| 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
|
|
|