| Index: media/filters/ffmpeg_demuxer_unittest.cc
|
| diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
|
| index 4225530af56ace84f41d510283508a68498d263f..f1e4a26ac51bee8da879463387dd92933c450e60 100644
|
| --- a/media/filters/ffmpeg_demuxer_unittest.cc
|
| +++ b/media/filters/ffmpeg_demuxer_unittest.cc
|
| @@ -532,15 +532,22 @@ TEST_F(FFmpegDemuxerTest, Seeking_PreferredStreamSelection) {
|
| // prefer the video stream for seeking.
|
| EXPECT_EQ(video, preferred_seeking_stream(video_start_time));
|
|
|
| - // A disabled stream should not be preferred for seeking.
|
| + // A disabled stream should be preferred only when there's no other viable
|
| + // option among enabled streams.
|
| 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 stream is preferred, even though it is disabled, since video stream
|
| + // start time is higher than the seek target == audio_start_time in this case.
|
| + EXPECT_EQ(audio, preferred_seeking_stream(audio_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));
|
| +
|
| + // When both audio and video streams are disabled and there's no enabled
|
| + // streams, then audio is preferred since it has lower start time.
|
| + audio->set_enabled(false, base::TimeDelta());
|
| EXPECT_EQ(audio, preferred_seeking_stream(audio_start_time));
|
| EXPECT_EQ(audio, preferred_seeking_stream(video_start_time));
|
| }
|
| @@ -1471,4 +1478,38 @@ TEST_F(FFmpegDemuxerTest, Read_Flac) {
|
| EXPECT_EQ(kSampleFormatS32, audio_config.sample_format());
|
| }
|
|
|
| +// Verify that FFmpeg demuxer falls back to choosing disabled streams for
|
| +// seeking if there's no suitable enabled stream found.
|
| +TEST_F(FFmpegDemuxerTest, Seek_FallbackToDisabledVideoStream) {
|
| + // Input has only video stream, no audio.
|
| + CreateDemuxer("bear-320x240-video-only.webm");
|
| + InitializeDemuxer();
|
| + EXPECT_EQ(nullptr, demuxer_->GetStream(DemuxerStream::AUDIO));
|
| + DemuxerStream* vstream = demuxer_->GetStream(DemuxerStream::VIDEO);
|
| + EXPECT_NE(nullptr, vstream);
|
| + EXPECT_EQ(vstream, preferred_seeking_stream(base::TimeDelta()));
|
| +
|
| + // Now pretend that video stream got disabled, e.g. due to current tab going
|
| + // into background.
|
| + vstream->set_enabled(false, base::TimeDelta());
|
| + // Since there's no other enabled streams, the preferred seeking stream should
|
| + // still be the video stream.
|
| + EXPECT_EQ(vstream, preferred_seeking_stream(base::TimeDelta()));
|
| +}
|
| +
|
| +TEST_F(FFmpegDemuxerTest, Seek_FallbackToDisabledAudioStream) {
|
| + CreateDemuxer("bear-320x240-audio-only.webm");
|
| + InitializeDemuxer();
|
| + DemuxerStream* astream = demuxer_->GetStream(DemuxerStream::AUDIO);
|
| + EXPECT_NE(nullptr, astream);
|
| + EXPECT_EQ(nullptr, demuxer_->GetStream(DemuxerStream::VIDEO));
|
| + EXPECT_EQ(astream, preferred_seeking_stream(base::TimeDelta()));
|
| +
|
| + // Now pretend that audio stream got disabled.
|
| + astream->set_enabled(false, base::TimeDelta());
|
| + // Since there's no other enabled streams, the preferred seeking stream should
|
| + // still be the audio stream.
|
| + EXPECT_EQ(astream, preferred_seeking_stream(base::TimeDelta()));
|
| +}
|
| +
|
| } // namespace media
|
|
|