| Index: media/filters/ffmpeg_demuxer_unittest.cc
|
| diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
|
| index 2c468942ddf90fc0e46dcc50471d7a1e8dcacc39..79c3b4418b0d491ccbe7061676e88f07b8365b0a 100644
|
| --- a/media/filters/ffmpeg_demuxer_unittest.cc
|
| +++ b/media/filters/ffmpeg_demuxer_unittest.cc
|
| @@ -126,6 +126,12 @@ class FFmpegDemuxerTest : public testing::Test {
|
| return demuxer_->GetBitrate() > 0;
|
| }
|
|
|
| + bool IsStreamStopped(DemuxerStream::Type type) {
|
| + DemuxerStream* stream = demuxer_->GetStream(type);
|
| + CHECK(stream);
|
| + return static_cast<FFmpegDemuxerStream*>(stream)->stopped_;
|
| + }
|
| +
|
| // Fixture members.
|
| scoped_refptr<FFmpegDemuxer> demuxer_;
|
| StrictMock<MockFilterHost> host_;
|
| @@ -157,7 +163,7 @@ TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) {
|
| //}
|
|
|
| TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) {
|
| - // Open a file with no parseable streams.
|
| + // Open a file with no streams whatsoever.
|
| EXPECT_CALL(host_, SetCurrentReadPosition(_));
|
| demuxer_->Initialize(
|
| CreateDataSource("no_streams.webm"),
|
| @@ -165,14 +171,13 @@ TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) {
|
| message_loop_.RunAllPending();
|
| }
|
|
|
| -// TODO(acolwell): Find a subtitle only file so we can uncomment this test.
|
| -//
|
| -//TEST_F(FFmpegDemuxerTest, Initialize_DataStreamOnly) {
|
| -// demuxer_->Initialize(
|
| -// CreateDataSource("subtitles_only.mp4"),,
|
| -// NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS));
|
| -// message_loop_.RunAllPending();
|
| -//}
|
| +TEST_F(FFmpegDemuxerTest, Initialize_NoAudioVideo) {
|
| + // Open a file containing streams but none of which are audio/video streams.
|
| + demuxer_->Initialize(
|
| + CreateDataSource("no_audio_video.webm"),
|
| + NewExpectedStatusCB(DEMUXER_ERROR_NO_SUPPORTED_STREAMS));
|
| + message_loop_.RunAllPending();
|
| +}
|
|
|
| TEST_F(FFmpegDemuxerTest, Initialize_Successful) {
|
| InitializeDemuxer(CreateDataSource("bear-320x240.webm"));
|
| @@ -211,6 +216,37 @@ TEST_F(FFmpegDemuxerTest, Initialize_Successful) {
|
| EXPECT_EQ(44100, audio_config.samples_per_second());
|
| EXPECT_TRUE(audio_config.extra_data());
|
| EXPECT_GT(audio_config.extra_data_size(), 0u);
|
| +
|
| + // Unknown stream should never be present.
|
| + EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN));
|
| +}
|
| +
|
| +TEST_F(FFmpegDemuxerTest, Initialize_Multitrack) {
|
| + // Open a file containing the following streams:
|
| + // Stream #0: Video (VP8)
|
| + // Stream #1: Audio (Vorbis)
|
| + // Stream #2: Subtitles (SRT)
|
| + // Stream #3: Video (Theora)
|
| + // Stream #4: Audio (16-bit signed little endian PCM)
|
| + //
|
| + // We should only pick the first audio/video streams we come across.
|
| + InitializeDemuxer(CreateDataSource("bear-320x240-multitrack.webm"));
|
| +
|
| + // Video stream should be VP8.
|
| + scoped_refptr<DemuxerStream> stream =
|
| + demuxer_->GetStream(DemuxerStream::VIDEO);
|
| + ASSERT_TRUE(stream);
|
| + EXPECT_EQ(DemuxerStream::VIDEO, stream->type());
|
| + EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec());
|
| +
|
| + // Audio stream should be Vorbis.
|
| + stream = demuxer_->GetStream(DemuxerStream::AUDIO);
|
| + ASSERT_TRUE(stream);
|
| + EXPECT_EQ(DemuxerStream::AUDIO, stream->type());
|
| + EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec());
|
| +
|
| + // Unknown stream should never be present.
|
| + EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN));
|
| }
|
|
|
| TEST_F(FFmpegDemuxerTest, Read_Audio) {
|
| @@ -491,17 +527,22 @@ TEST_F(FFmpegDemuxerTest, DisableAudioStream) {
|
| ASSERT_TRUE(video);
|
| ASSERT_TRUE(audio);
|
|
|
| - // Attempt a read from the video stream and run the message loop until done.
|
| + // The audio stream should have been prematurely stopped.
|
| + EXPECT_FALSE(IsStreamStopped(DemuxerStream::VIDEO));
|
| + EXPECT_TRUE(IsStreamStopped(DemuxerStream::AUDIO));
|
| +
|
| + // Attempt a read from the video stream: it should return valid data.
|
| scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
|
| reader->Read(video);
|
| message_loop_.RunAllPending();
|
| - EXPECT_TRUE(reader->called());
|
| + ASSERT_TRUE(reader->called());
|
| ValidateBuffer(FROM_HERE, reader->buffer(), 22084, 0);
|
|
|
| + // Attempt a read from the audio stream: it should immediately return end of
|
| + // stream without requiring the message loop to read data.
|
| reader->Reset();
|
| reader->Read(audio);
|
| - message_loop_.RunAllPending();
|
| - EXPECT_TRUE(reader->called());
|
| + ASSERT_TRUE(reader->called());
|
| EXPECT_TRUE(reader->buffer()->IsEndOfStream());
|
| }
|
|
|
|
|