Index: media/filters/ffmpeg_demuxer_unittest.cc |
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc |
index 50175c696d8a69e2076a909d66006c9eeb4f4261..483feed3bf3e574f063fc428252451b8bc63084c 100644 |
--- a/media/filters/ffmpeg_demuxer_unittest.cc |
+++ b/media/filters/ffmpeg_demuxer_unittest.cc |
@@ -240,8 +240,8 @@ class FFmpegDemuxerTest : public testing::Test { |
return demuxer_->glue_->format_context(); |
} |
- int preferred_seeking_stream_index() const { |
- return demuxer_->preferred_stream_for_seeking_.first; |
+ DemuxerStream* preferred_seeking_stream(base::TimeDelta seek_time) const { |
+ return demuxer_->FindPreferredStreamForSeeking(seek_time); |
} |
void ReadUntilEndOfStream(DemuxerStream* stream) { |
@@ -472,7 +472,49 @@ TEST_F(FFmpegDemuxerTest, Read_Text) { |
TEST_F(FFmpegDemuxerTest, SeekInitialized_NoVideoStartTime) { |
CreateDemuxer("audio-start-time-only.webm"); |
InitializeDemuxer(); |
- EXPECT_EQ(0, preferred_seeking_stream_index()); |
+ // Video stream should be preferred for seeking even if video start time is |
+ // unknown. |
+ DemuxerStream* vstream = demuxer_->GetStream(DemuxerStream::VIDEO); |
+ EXPECT_EQ(vstream, preferred_seeking_stream(base::TimeDelta())); |
+} |
+ |
+TEST_F(FFmpegDemuxerTest, Seeking_PreferredStreamSelection) { |
+ const int64_t kTimelineOffsetMs = 1352550896000LL; |
+ |
+ // Test the start time is the first timestamp of the video and audio stream. |
+ CreateDemuxer("nonzero-start-time.webm"); |
+ InitializeDemuxerWithTimelineOffset( |
+ base::Time::FromJsTime(kTimelineOffsetMs)); |
+ |
+ DemuxerStream* video = demuxer_->GetStream(DemuxerStream::VIDEO); |
+ DemuxerStream* audio = demuxer_->GetStream(DemuxerStream::AUDIO); |
+ |
+ const base::TimeDelta video_start_time = |
+ base::TimeDelta::FromMicroseconds(400000); |
+ const base::TimeDelta audio_start_time = |
+ base::TimeDelta::FromMicroseconds(396000); |
+ |
+ // Seeking to a position lower than the start time of either stream should |
+ // prefer video stream for seeking. |
+ EXPECT_EQ(video, preferred_seeking_stream(base::TimeDelta())); |
+ // Seeking to a position that has audio data, but not video, should prefer |
+ // the audio stream for seeking. |
+ EXPECT_EQ(audio, preferred_seeking_stream(audio_start_time)); |
+ // Seeking to a position where both audio and video streams have data should |
+ // prefer the video stream for seeking. |
+ EXPECT_EQ(video, preferred_seeking_stream(video_start_time)); |
+ |
+ // A disabled stream should not be preferred for seeking. |
+ audio->set_enabled(false, base::TimeDelta()); |
+ EXPECT_EQ(video, preferred_seeking_stream(base::TimeDelta())); |
+ EXPECT_EQ(video, preferred_seeking_stream(audio_start_time)); |
+ EXPECT_EQ(video, preferred_seeking_stream(video_start_time)); |
+ |
+ audio->set_enabled(true, base::TimeDelta()); |
+ video->set_enabled(false, base::TimeDelta()); |
+ EXPECT_EQ(audio, preferred_seeking_stream(base::TimeDelta())); |
+ EXPECT_EQ(audio, preferred_seeking_stream(audio_start_time)); |
+ EXPECT_EQ(audio, preferred_seeking_stream(video_start_time)); |
} |
TEST_F(FFmpegDemuxerTest, Read_VideoPositiveStartTime) { |