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