| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <deque> | 5 #include <deque> |
| 6 | 6 |
| 7 #include "media/base/filters.h" | 7 #include "media/base/filters.h" |
| 8 #include "media/base/mock_ffmpeg.h" | 8 #include "media/base/mock_ffmpeg.h" |
| 9 #include "media/base/mock_filter_host.h" | 9 #include "media/base/mock_filter_host.h" |
| 10 #include "media/base/mock_filters.h" | 10 #include "media/base/mock_filters.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 MockFFmpeg::set(&mock_ffmpeg_); | 108 MockFFmpeg::set(&mock_ffmpeg_); |
| 109 } | 109 } |
| 110 | 110 |
| 111 virtual ~FFmpegDemuxerTest() { | 111 virtual ~FFmpegDemuxerTest() { |
| 112 // Call Stop() to shut down internal threads. | 112 // Call Stop() to shut down internal threads. |
| 113 demuxer_->Stop(); | 113 demuxer_->Stop(); |
| 114 | 114 |
| 115 // Finish up any remaining tasks. | 115 // Finish up any remaining tasks. |
| 116 message_loop_.RunAllPending(); | 116 message_loop_.RunAllPending(); |
| 117 | 117 |
| 118 // Release the reference to the demuxer. |
| 119 demuxer_ = NULL; |
| 120 |
| 121 // Filter host also holds a reference to demuxer, destroy it. |
| 122 filter_host_.reset(); |
| 123 |
| 118 // Reset MockFFmpeg. | 124 // Reset MockFFmpeg. |
| 119 MockFFmpeg::set(NULL); | 125 MockFFmpeg::set(NULL); |
| 120 } | 126 } |
| 121 | 127 |
| 122 // Sets up MockFFmpeg to allow FFmpegDemuxer to successfully initialize. | 128 // Sets up MockFFmpeg to allow FFmpegDemuxer to successfully initialize. |
| 123 void InitializeDemuxerMocks() { | 129 void InitializeDemuxerMocks() { |
| 124 EXPECT_CALL(*MockFFmpeg::get(), AVOpenInputFile(_, _, NULL, 0, NULL)) | 130 EXPECT_CALL(*MockFFmpeg::get(), AVOpenInputFile(_, _, NULL, 0, NULL)) |
| 125 .WillOnce(DoAll(SetArgumentPointee<0>(&format_context_), Return(0))); | 131 .WillOnce(DoAll(SetArgumentPointee<0>(&format_context_), Return(0))); |
| 126 EXPECT_CALL(*MockFFmpeg::get(), AVFindStreamInfo(&format_context_)) | 132 EXPECT_CALL(*MockFFmpeg::get(), AVFindStreamInfo(&format_context_)) |
| 127 .WillOnce(Return(0)); | 133 .WillOnce(Return(0)); |
| 128 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&format_context_)); | 134 EXPECT_CALL(*MockFFmpeg::get(), AVCloseInputFile(&format_context_)); |
| 129 } | 135 } |
| 130 | 136 |
| 131 // Initializes both MockFFmpeg and FFmpegDemuxer. | 137 // Initializes both MockFFmpeg and FFmpegDemuxer. |
| 132 void InitializeDemuxer() { | 138 void InitializeDemuxer() { |
| 133 InitializeDemuxerMocks(); | 139 InitializeDemuxerMocks(); |
| 134 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); | 140 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); |
| 135 message_loop_.RunAllPending(); | 141 message_loop_.RunAllPending(); |
| 136 EXPECT_TRUE(filter_host_->WaitForInitialized()); | 142 EXPECT_TRUE(filter_host_->WaitForInitialized()); |
| 137 EXPECT_TRUE(filter_host_->IsInitialized()); | 143 EXPECT_TRUE(filter_host_->IsInitialized()); |
| 138 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 144 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 EXPECT_TRUE(filter_host_->WaitForError(DEMUXER_ERROR_COULD_NOT_OPEN)); | 201 EXPECT_TRUE(filter_host_->WaitForError(DEMUXER_ERROR_COULD_NOT_OPEN)); |
| 196 EXPECT_FALSE(filter_host_->IsInitialized()); | 202 EXPECT_FALSE(filter_host_->IsInitialized()); |
| 197 } | 203 } |
| 198 | 204 |
| 199 TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) { | 205 TEST_F(FFmpegDemuxerTest, Initialize_ParseFails) { |
| 200 // Simulate av_find_stream_info() failing. | 206 // Simulate av_find_stream_info() failing. |
| 201 EXPECT_CALL(*MockFFmpeg::get(), AVOpenInputFile(_, _, NULL, 0, NULL)) | 207 EXPECT_CALL(*MockFFmpeg::get(), AVOpenInputFile(_, _, NULL, 0, NULL)) |
| 202 .WillOnce(DoAll(SetArgumentPointee<0>(&format_context_), Return(0))); | 208 .WillOnce(DoAll(SetArgumentPointee<0>(&format_context_), Return(0))); |
| 203 EXPECT_CALL(*MockFFmpeg::get(), AVFindStreamInfo(&format_context_)) | 209 EXPECT_CALL(*MockFFmpeg::get(), AVFindStreamInfo(&format_context_)) |
| 204 .WillOnce(Return(AVERROR_IO)); | 210 .WillOnce(Return(AVERROR_IO)); |
| 205 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&format_context_)); | 211 EXPECT_CALL(*MockFFmpeg::get(), AVCloseInputFile(&format_context_)); |
| 206 | 212 |
| 207 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); | 213 EXPECT_TRUE(demuxer_->Initialize(data_source_.get())); |
| 208 message_loop_.RunAllPending(); | 214 message_loop_.RunAllPending(); |
| 209 EXPECT_TRUE(filter_host_->WaitForError(DEMUXER_ERROR_COULD_NOT_PARSE)); | 215 EXPECT_TRUE(filter_host_->WaitForError(DEMUXER_ERROR_COULD_NOT_PARSE)); |
| 210 EXPECT_FALSE(filter_host_->IsInitialized()); | 216 EXPECT_FALSE(filter_host_->IsInitialized()); |
| 211 } | 217 } |
| 212 | 218 |
| 213 TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) { | 219 TEST_F(FFmpegDemuxerTest, Initialize_NoStreams) { |
| 214 // Simulate media with no parseable streams. | 220 // Simulate media with no parseable streams. |
| 215 { | 221 { |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 | 649 |
| 644 // Attempt the read... | 650 // Attempt the read... |
| 645 audio->Read(callback.release()); | 651 audio->Read(callback.release()); |
| 646 message_loop_.RunAllPending(); | 652 message_loop_.RunAllPending(); |
| 647 | 653 |
| 648 // ...and verify that |callback| was deleted. | 654 // ...and verify that |callback| was deleted. |
| 649 MockFFmpeg::get()->CheckPoint(1); | 655 MockFFmpeg::get()->CheckPoint(1); |
| 650 } | 656 } |
| 651 | 657 |
| 652 } // namespace media | 658 } // namespace media |
| OLD | NEW |