| Index: media/filters/chunk_demuxer_unittest.cc
|
| diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc
|
| index d2c410da9c02c7040b36b8490254b88b8b8cd447..c9e32771262c47b405dda506f91311a351a11d50 100644
|
| --- a/media/filters/chunk_demuxer_unittest.cc
|
| +++ b/media/filters/chunk_demuxer_unittest.cc
|
| @@ -491,6 +491,8 @@ class ChunkDemuxerTest : public testing::Test {
|
| if (AddId(kSourceId, stream_flags) != ChunkDemuxer::kOk)
|
| return false;
|
|
|
| + EXPECT_EQ(0.0, demuxer_->GetTimestampOffset(kSourceId));
|
| +
|
| AppendInitSegmentWithEncryptedInfo(
|
| kSourceId, stream_flags,
|
| is_audio_encrypted, is_video_encrypted);
|
| @@ -2579,11 +2581,21 @@ TEST_F(ChunkDemuxerTest, ConfigChange_Seek) {
|
| ASSERT_TRUE(video_config_1.Matches(video->video_decoder_config()));
|
| }
|
|
|
| +TEST_F(ChunkDemuxerTest, TimestampOffsetUserRoundTrips) {
|
| + ASSERT_TRUE(InitDemuxer(HAS_AUDIO));
|
| +
|
| + // Set an offset value that has greater precision than base::TimeDelta
|
| + // microsecond granularity, and confirm that the exact value is returned
|
| + // when getting the offset.
|
| + double super_precise_offset = 99.123456789;
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId, super_precise_offset));
|
| + EXPECT_EQ(super_precise_offset, demuxer_->GetTimestampOffset(kSourceId));
|
| +}
|
| +
|
| TEST_F(ChunkDemuxerTest, TimestampPositiveOffset) {
|
| ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
|
|
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - kSourceId, base::TimeDelta::FromSeconds(30)));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId, 30));
|
| AppendCluster(GenerateCluster(0, 2));
|
|
|
| Seek(base::TimeDelta::FromMilliseconds(30000));
|
| @@ -2594,8 +2606,7 @@ TEST_F(ChunkDemuxerTest, TimestampPositiveOffset) {
|
| TEST_F(ChunkDemuxerTest, TimestampNegativeOffset) {
|
| ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
|
|
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - kSourceId, base::TimeDelta::FromSeconds(-1)));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId, -1));
|
| AppendCluster(GenerateCluster(1000, 2));
|
|
|
| GenerateExpectedReads(0, 2);
|
| @@ -2606,10 +2617,8 @@ TEST_F(ChunkDemuxerTest, TimestampOffsetSeparateStreams) {
|
| std::string video_id = "video1";
|
| ASSERT_TRUE(InitDemuxerAudioAndVideoSources(audio_id, video_id));
|
|
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - audio_id, base::TimeDelta::FromMilliseconds(-2500)));
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - video_id, base::TimeDelta::FromMilliseconds(-2500)));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(audio_id, -2.5));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(video_id, -2.5));
|
| AppendCluster(audio_id, GenerateSingleStreamCluster(2500,
|
| 2500 + kAudioBlockDuration * 4, kAudioTrackNum, kAudioBlockDuration));
|
| AppendCluster(video_id, GenerateSingleStreamCluster(2500,
|
| @@ -2619,10 +2628,8 @@ TEST_F(ChunkDemuxerTest, TimestampOffsetSeparateStreams) {
|
|
|
| Seek(base::TimeDelta::FromMilliseconds(27300));
|
|
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - audio_id, base::TimeDelta::FromMilliseconds(27300)));
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - video_id, base::TimeDelta::FromMilliseconds(27300)));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(audio_id, 27.3));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(video_id, 27.3));
|
| AppendCluster(audio_id, GenerateSingleStreamCluster(
|
| 0, kAudioBlockDuration * 4, kAudioTrackNum, kAudioBlockDuration));
|
| AppendCluster(video_id, GenerateSingleStreamCluster(
|
| @@ -2639,14 +2646,12 @@ TEST_F(ChunkDemuxerTest, TimestampOffsetMidMediaSegment) {
|
| 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, base::TimeDelta::FromSeconds(25)));
|
| + ASSERT_FALSE(demuxer_->SetTimestampOffset(kSourceId, 25));
|
|
|
| demuxer_->Abort(kSourceId);
|
| // After Abort(), setting a timestamp should succeed since we're no longer
|
| // in the middle of a cluster
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(
|
| - kSourceId, base::TimeDelta::FromSeconds(25)));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId, 25));
|
| }
|
|
|
| TEST_F(ChunkDemuxerTest, WebMParsingMediaSegmentDetection) {
|
| @@ -2677,7 +2682,7 @@ TEST_F(ChunkDemuxerTest, WebMParsingMediaSegmentDetection) {
|
| AppendData(kBuffer + i, 1);
|
| bool expected_return_value = kExpectedReturnValues[i];
|
| EXPECT_EQ(expected_return_value, demuxer_->SetTimestampOffset(
|
| - kSourceId, base::TimeDelta::FromSeconds(25)));
|
| + kSourceId, 25));
|
| EXPECT_EQ(expected_return_value, demuxer_->SetSequenceMode(
|
| kSourceId, true));
|
| EXPECT_EQ(expected_return_value, demuxer_->SetSequenceMode(
|
| @@ -2735,7 +2740,8 @@ TEST_F(ChunkDemuxerTest, DurationChange) {
|
| TEST_F(ChunkDemuxerTest, DurationChangeTimestampOffset) {
|
| ASSERT_TRUE(InitDemuxer(HAS_AUDIO | HAS_VIDEO));
|
|
|
| - ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId, kDefaultDuration()));
|
| + ASSERT_TRUE(demuxer_->SetTimestampOffset(kSourceId,
|
| + kDefaultDuration().InSecondsF()));
|
|
|
| EXPECT_CALL(host_, SetDuration(
|
| kDefaultDuration() + base::TimeDelta::FromMilliseconds(
|
|
|