Chromium Code Reviews| Index: media/filters/ffmpeg_demuxer_unittest.cc |
| diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc |
| index 3189e080c69eaedffedd81401e1a21346f93c1d5..520b59bf1bd349fc1520613998e7b58f0efb9ea3 100644 |
| --- a/media/filters/ffmpeg_demuxer_unittest.cc |
| +++ b/media/filters/ffmpeg_demuxer_unittest.cc |
| @@ -41,19 +41,7 @@ MATCHER(IsEndOfStreamBuffer, |
| class FFmpegDemuxerTest : public testing::Test { |
| protected: |
| - FFmpegDemuxerTest() { |
| - // Create an FFmpegDemuxer with local data source. |
| - demuxer_ = new FFmpegDemuxer(&message_loop_, true); |
| - demuxer_->disable_first_seek_hack_for_testing(); |
| - |
| - // Inject a filter host and message loop and prepare a data source. |
| - demuxer_->set_host(&host_); |
| - |
| - EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); |
| - EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber()); |
| - EXPECT_CALL(host_, SetCurrentReadPosition(_)) |
| - .WillRepeatedly(SaveArg<0>(¤t_read_position_)); |
| - } |
| + FFmpegDemuxerTest() {} |
| virtual ~FFmpegDemuxerTest() { |
| if (demuxer_) { |
| @@ -67,34 +55,33 @@ class FFmpegDemuxerTest : public testing::Test { |
| demuxer_ = NULL; |
| } |
| - scoped_refptr<FileDataSource> CreateDataSource(const std::string& name) { |
| - return CreateDataSource(name, false); |
| + void CreateDemuxer(const std::string& name) { |
| + CreateDemuxer(name, false); |
| } |
| - scoped_refptr<FileDataSource> CreateDataSource(const std::string& name, |
| - bool disable_file_size) { |
| - FilePath file_path; |
| - EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &file_path)); |
| + void CreateDemuxer(const std::string& name, bool disable_file_size) { |
| + CHECK(!demuxer_); |
| - file_path = file_path.Append(FILE_PATH_LITERAL("media")) |
| - .Append(FILE_PATH_LITERAL("test")) |
| - .Append(FILE_PATH_LITERAL("data")) |
| - .AppendASCII(name); |
| + EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); |
| + EXPECT_CALL(host_, SetBufferedBytes(_)).Times(AnyNumber()); |
| + EXPECT_CALL(host_, SetCurrentReadPosition(_)) |
| + .WillRepeatedly(SaveArg<0>(¤t_read_position_)); |
| - scoped_refptr<FileDataSource> data_source = new FileDataSource( |
| - disable_file_size); |
| + CreateDataSource(name, disable_file_size); |
| - EXPECT_EQ(PIPELINE_OK, data_source->Initialize(file_path.MaybeAsASCII())); |
| + // Create an FFmpegDemuxer with local data source. |
| + demuxer_ = new FFmpegDemuxer(&message_loop_, data_source_, true); |
| + demuxer_->disable_first_seek_hack_for_testing(); |
| - return data_source.get(); |
| + // Inject a filter host and message loop and prepare a data source. |
| + demuxer_->set_host(&host_); |
| } |
| MOCK_METHOD1(CheckPoint, void(int v)); |
| - // Initializes FFmpegDemuxer. |
| - void InitializeDemuxer(const scoped_refptr<DataSource>& data_source) { |
| + void InitializeDemuxer() { |
| EXPECT_CALL(host_, SetDuration(_)); |
| - demuxer_->Initialize(data_source, NewExpectedStatusCB(PIPELINE_OK)); |
| + demuxer_->Initialize(NewExpectedStatusCB(PIPELINE_OK)); |
| message_loop_.RunAllPending(); |
| } |
| @@ -120,9 +107,8 @@ class FFmpegDemuxerTest : public testing::Test { |
| // returns true if the bitrate is valid, false otherwise. |
| bool VideoHasValidBitrate( |
| const std::string& file_name, bool disable_file_size) { |
| - scoped_refptr<FileDataSource> data_source = |
| - CreateDataSource(file_name, disable_file_size); |
| - InitializeDemuxer(data_source); |
| + CreateDemuxer(file_name, disable_file_size); |
| + InitializeDemuxer(); |
| return demuxer_->GetBitrate() > 0; |
| } |
| @@ -133,6 +119,7 @@ class FFmpegDemuxerTest : public testing::Test { |
| } |
| // Fixture members. |
| + scoped_refptr<FileDataSource> data_source_; |
| scoped_refptr<FFmpegDemuxer> demuxer_; |
| StrictMock<MockDemuxerHost> host_; |
| MessageLoop message_loop_; |
| @@ -140,14 +127,29 @@ class FFmpegDemuxerTest : public testing::Test { |
| int64 current_read_position_; |
| private: |
| + void CreateDataSource(const std::string& name, bool disable_file_size) { |
| + CHECK(!data_source_); |
| + |
| + FilePath file_path; |
| + EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &file_path)); |
| + |
| + file_path = file_path.Append(FILE_PATH_LITERAL("media")) |
| + .Append(FILE_PATH_LITERAL("test")) |
| + .Append(FILE_PATH_LITERAL("data")) |
| + .AppendASCII(name); |
| + |
| + data_source_ = new FileDataSource(disable_file_size); |
| + EXPECT_EQ(PIPELINE_OK, data_source_->Initialize(file_path.MaybeAsASCII())); |
| + } |
| + |
| DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest); |
| }; |
| TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) { |
| // Simulate avformat_open_input() failing. |
| + CreateDemuxer("ten_byte_file"), |
| EXPECT_CALL(host_, SetCurrentReadPosition(_)); |
| - demuxer_->Initialize(CreateDataSource("ten_byte_file"), |
| - NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); |
| + demuxer_->Initialize(NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_OPEN)); |
| message_loop_.RunAllPending(); |
| } |
| @@ -156,31 +158,32 @@ TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) { |
| // avformat_open_input(), but has avformat_find_stream_info() fail. |
| // |
| //TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) { |
| +// CreateDemuxer("find_stream_info_fail.webm"); |
| // demuxer_->Initialize( |
| -// CreateDataSource("find_stream_info_fail.webm"), |
| // NewExpectedStatusCB(DEMUXER_ERROR_COULD_NOT_PARSE)); |
| // message_loop_.RunAllPending(); |
| //} |
| TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) { |
| // Open a file with no streams whatsoever. |
| + CreateDemuxer("no_streams.webm"); |
| EXPECT_CALL(host_, SetCurrentReadPosition(_)); |
| demuxer_->Initialize( |
| - CreateDataSource("no_streams.webm"), |
| 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. |
| + CreateDemuxer("no_audio_video.webm"); |
| 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")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Video stream should be present. |
| scoped_refptr<DemuxerStream> stream = |
| @@ -230,7 +233,8 @@ TEST_F(FFmpegDemuxerTest, Initialize_Multitrack) { |
| // 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")); |
| + CreateDemuxer("bear-320x240-multitrack.webm"); |
| + InitializeDemuxer(); |
| // Video stream should be VP8. |
| scoped_refptr<DemuxerStream> stream = |
| @@ -251,7 +255,8 @@ TEST_F(FFmpegDemuxerTest, Initialize_Multitrack) { |
| TEST_F(FFmpegDemuxerTest, Read_Audio) { |
| // We test that on a successful audio packet read. |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Attempt a read from the audio stream and run the message loop until done. |
| scoped_refptr<DemuxerStream> audio = |
| @@ -271,7 +276,8 @@ TEST_F(FFmpegDemuxerTest, Read_Audio) { |
| TEST_F(FFmpegDemuxerTest, Read_Video) { |
| // We test that on a successful video packet read. |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Attempt a read from the video stream and run the message loop until done. |
| scoped_refptr<DemuxerStream> video = |
| @@ -292,7 +298,8 @@ TEST_F(FFmpegDemuxerTest, Read_Video) { |
| TEST_F(FFmpegDemuxerTest, Read_VideoNonZeroStart) { |
| // Test the start time is the first timestamp of the video and audio stream. |
| - InitializeDemuxer(CreateDataSource("nonzero-start-time.webm")); |
| + CreateDemuxer("nonzero-start-time.webm"); |
| + InitializeDemuxer(); |
| // Attempt a read from the video stream and run the message loop until done. |
| scoped_refptr<DemuxerStream> video = |
| @@ -323,7 +330,8 @@ TEST_F(FFmpegDemuxerTest, Read_VideoNonZeroStart) { |
| TEST_F(FFmpegDemuxerTest, Read_EndOfStream) { |
| // Verify that end of stream buffers are created. |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // We should now expect an end of stream buffer. |
| scoped_refptr<DemuxerStream> audio = |
| @@ -356,7 +364,8 @@ TEST_F(FFmpegDemuxerTest, Read_EndOfStream) { |
| TEST_F(FFmpegDemuxerTest, Seek) { |
| // We're testing that the demuxer frees all queued packets when it receives |
| // a Seek(). |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Get our streams. |
| scoped_refptr<DemuxerStream> video = |
| @@ -434,7 +443,8 @@ class MockReadCB : public base::RefCountedThreadSafe<MockReadCB> { |
| TEST_F(FFmpegDemuxerTest, Stop) { |
| // Tests that calling Read() on a stopped demuxer stream immediately deletes |
| // the callback. |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Get our stream. |
| scoped_refptr<DemuxerStream> audio = |
| @@ -470,7 +480,8 @@ TEST_F(FFmpegDemuxerTest, Stop) { |
| // This test verifies that DemuxerStream::Read() does not use an invalid demuxer |
| // pointer (no crash occurs) and calls the callback with an EndOfStream buffer. |
| TEST_F(FFmpegDemuxerTest, StreamReadAfterStopAndDemuxerDestruction) { |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Get our stream. |
| scoped_refptr<DemuxerStream> audio = |
| @@ -513,7 +524,8 @@ TEST_F(FFmpegDemuxerTest, DisableAudioStream) { |
| // 1. Initialize the demuxer with audio and video stream. |
| // 2. Send a "disable audio stream" message to the demuxer. |
| // 3. Demuxer will free audio packets even if audio stream was initialized. |
| - InitializeDemuxer(CreateDataSource("bear-320x240.webm")); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| // Submit a "disable audio stream" message to the demuxer. |
| demuxer_->OnAudioRendererDisabled(); |
| @@ -548,8 +560,9 @@ TEST_F(FFmpegDemuxerTest, DisableAudioStream) { |
| class MockFFmpegDemuxer : public FFmpegDemuxer { |
| public: |
| - explicit MockFFmpegDemuxer(MessageLoop* message_loop) |
| - : FFmpegDemuxer(message_loop, true) { |
| + MockFFmpegDemuxer(MessageLoop* message_loop, |
| + const scoped_refptr<DataSource>& data_source) |
| + : FFmpegDemuxer(message_loop, data_source, true) { |
| } |
| virtual ~MockFFmpegDemuxer() {} |
| @@ -575,10 +588,8 @@ TEST_F(FFmpegDemuxerTest, ProtocolRead) { |
| // Creates a demuxer. |
| scoped_refptr<MockFFmpegDemuxer> demuxer( |
| - new MockFFmpegDemuxer(&message_loop_)); |
| - ASSERT_TRUE(demuxer); |
| + new MockFFmpegDemuxer(&message_loop_, data_source)); |
| demuxer->set_host(&host_); |
| - demuxer->data_source_ = data_source; |
| uint8 kBuffer[1]; |
| InSequence s; |
| @@ -643,8 +654,8 @@ TEST_F(FFmpegDemuxerTest, GetBitrate_UnsetInContainer_NoFileSize) { |
| } |
| TEST_F(FFmpegDemuxerTest, ProtocolGetSetPosition) { |
| - scoped_refptr<DataSource> data_source = CreateDataSource("bear-320x240.webm"); |
| - InitializeDemuxer(data_source); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| InSequence s; |
| @@ -663,29 +674,30 @@ TEST_F(FFmpegDemuxerTest, ProtocolGetSetPosition) { |
| } |
| TEST_F(FFmpegDemuxerTest, ProtocolGetSize) { |
| - scoped_refptr<DataSource> data_source = CreateDataSource("bear-320x240.webm"); |
| - InitializeDemuxer(data_source); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| int64 data_source_size = 0; |
| int64 demuxer_size = 0; |
| - EXPECT_TRUE(data_source->GetSize(&data_source_size)); |
| + EXPECT_TRUE(data_source_->GetSize(&data_source_size)); |
| EXPECT_TRUE(demuxer_->GetSize(&demuxer_size)); |
| EXPECT_NE(0, data_source_size); |
| EXPECT_EQ(data_source_size, demuxer_size); |
| } |
| TEST_F(FFmpegDemuxerTest, ProtocolIsStreaming) { |
| - scoped_refptr<DataSource> data_source = CreateDataSource("bear-320x240.webm"); |
| - InitializeDemuxer(data_source); |
| + CreateDemuxer("bear-320x240.webm"); |
| + InitializeDemuxer(); |
| - EXPECT_FALSE(data_source->IsStreaming()); |
| + EXPECT_FALSE(data_source_->IsStreaming()); |
| EXPECT_FALSE(demuxer_->IsStreaming()); |
| } |
| // Verify that seek works properly when the WebM cues data is at the start of |
| // the file instead of at the end. |
| TEST_F(FFmpegDemuxerTest, SeekWithCuesBeforeFirstCluster) { |
| - InitializeDemuxer(CreateDataSource("bear-320x240-cues-in-front.webm")); |
| + CreateDemuxer("bear-320x240-cues-in-front.webm"); |
| + InitializeDemuxer(); |
|
acolwell GONE FROM CHROMIUM
2012/03/27 20:11:35
nit: How about making InitializeDemuxer() just tak
|
| // Get our streams. |
| scoped_refptr<DemuxerStream> video = |