Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Unified Diff: media/filters/ffmpeg_demuxer_unittest.cc

Issue 2549263002: FFmpegDemuxer should fall back to disabled streams for seeking (Closed)
Patch Set: Set start time to 0 for streams with unknown start time Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698