| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/stl_util-inl.h" | 8 #include "base/stl_util-inl.h" |
| 9 #include "base/waitable_event.h" | 9 #include "base/waitable_event.h" |
| 10 #include "media/base/pipeline_impl.h" | 10 #include "media/base/pipeline_impl.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 protected: | 91 protected: |
| 92 // Sets up expectations to allow the data source to initialize. | 92 // Sets up expectations to allow the data source to initialize. |
| 93 void InitializeDataSource() { | 93 void InitializeDataSource() { |
| 94 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) | 94 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) |
| 95 .WillOnce(DoAll(SetTotalBytes(mocks_->data_source(), kTotalBytes), | 95 .WillOnce(DoAll(SetTotalBytes(mocks_->data_source(), kTotalBytes), |
| 96 SetBufferedBytes(mocks_->data_source(), kBufferedBytes), | 96 SetBufferedBytes(mocks_->data_source(), kBufferedBytes), |
| 97 Invoke(&RunFilterCallback))); | 97 Invoke(&RunFilterCallback))); |
| 98 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(0.0f)); | 98 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(0.0f)); |
| 99 EXPECT_CALL(*mocks_->data_source(), Seek(base::TimeDelta(), NotNull())) | 99 EXPECT_CALL(*mocks_->data_source(), Seek(base::TimeDelta(), NotNull())) |
| 100 .WillOnce(Invoke(&RunFilterCallback)); | 100 .WillOnce(Invoke(&RunFilterCallback)); |
| 101 EXPECT_CALL(*mocks_->data_source(), Stop()); | 101 EXPECT_CALL(*mocks_->data_source(), Stop(NotNull())) |
| 102 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 102 EXPECT_CALL(*mocks_->data_source(), media_format()) | 103 EXPECT_CALL(*mocks_->data_source(), media_format()) |
| 103 .WillOnce(ReturnRef(data_source_media_format_)); | 104 .WillOnce(ReturnRef(data_source_media_format_)); |
| 104 } | 105 } |
| 105 | 106 |
| 106 // Sets up expectations to allow the demuxer to initialize. | 107 // Sets up expectations to allow the demuxer to initialize. |
| 107 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; | 108 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; |
| 108 void InitializeDemuxer(MockDemuxerStreamVector* streams, | 109 void InitializeDemuxer(MockDemuxerStreamVector* streams, |
| 109 const base::TimeDelta& duration) { | 110 const base::TimeDelta& duration) { |
| 110 EXPECT_CALL(*mocks_->demuxer(), | 111 EXPECT_CALL(*mocks_->demuxer(), |
| 111 Initialize(mocks_->data_source(), NotNull())) | 112 Initialize(mocks_->data_source(), NotNull())) |
| 112 .WillOnce(DoAll(SetDuration(mocks_->data_source(), duration), | 113 .WillOnce(DoAll(SetDuration(mocks_->data_source(), duration), |
| 113 Invoke(&RunFilterCallback))); | 114 Invoke(&RunFilterCallback))); |
| 114 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) | 115 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) |
| 115 .WillRepeatedly(Return(streams->size())); | 116 .WillRepeatedly(Return(streams->size())); |
| 116 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); | 117 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); |
| 117 EXPECT_CALL(*mocks_->demuxer(), Seek(base::TimeDelta(), NotNull())) | 118 EXPECT_CALL(*mocks_->demuxer(), Seek(base::TimeDelta(), NotNull())) |
| 118 .WillOnce(Invoke(&RunFilterCallback)); | 119 .WillOnce(Invoke(&RunFilterCallback)); |
| 119 EXPECT_CALL(*mocks_->demuxer(), Stop()); | 120 EXPECT_CALL(*mocks_->demuxer(), Stop(NotNull())) |
| 121 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 120 | 122 |
| 121 // Configure the demuxer to return the streams. | 123 // Configure the demuxer to return the streams. |
| 122 for (size_t i = 0; i < streams->size(); ++i) { | 124 for (size_t i = 0; i < streams->size(); ++i) { |
| 123 scoped_refptr<DemuxerStream> stream = (*streams)[i]; | 125 scoped_refptr<DemuxerStream> stream = (*streams)[i]; |
| 124 EXPECT_CALL(*mocks_->demuxer(), GetStream(i)) | 126 EXPECT_CALL(*mocks_->demuxer(), GetStream(i)) |
| 125 .WillRepeatedly(Return(stream)); | 127 .WillRepeatedly(Return(stream)); |
| 126 } | 128 } |
| 127 } | 129 } |
| 128 | 130 |
| 129 // Create a stream with an associated media format. | 131 // Create a stream with an associated media format. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 142 return stream; | 144 return stream; |
| 143 } | 145 } |
| 144 | 146 |
| 145 // Sets up expectations to allow the video decoder to initialize. | 147 // Sets up expectations to allow the video decoder to initialize. |
| 146 void InitializeVideoDecoder(MockDemuxerStream* stream) { | 148 void InitializeVideoDecoder(MockDemuxerStream* stream) { |
| 147 EXPECT_CALL(*mocks_->video_decoder(), Initialize(stream, NotNull())) | 149 EXPECT_CALL(*mocks_->video_decoder(), Initialize(stream, NotNull())) |
| 148 .WillOnce(Invoke(&RunFilterCallback)); | 150 .WillOnce(Invoke(&RunFilterCallback)); |
| 149 EXPECT_CALL(*mocks_->video_decoder(), SetPlaybackRate(0.0f)); | 151 EXPECT_CALL(*mocks_->video_decoder(), SetPlaybackRate(0.0f)); |
| 150 EXPECT_CALL(*mocks_->video_decoder(), Seek(base::TimeDelta(), NotNull())) | 152 EXPECT_CALL(*mocks_->video_decoder(), Seek(base::TimeDelta(), NotNull())) |
| 151 .WillOnce(Invoke(&RunFilterCallback)); | 153 .WillOnce(Invoke(&RunFilterCallback)); |
| 152 EXPECT_CALL(*mocks_->video_decoder(), Stop()); | 154 EXPECT_CALL(*mocks_->video_decoder(), Stop(NotNull())) |
| 155 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 153 EXPECT_CALL(*mocks_->video_decoder(), media_format()) | 156 EXPECT_CALL(*mocks_->video_decoder(), media_format()) |
| 154 .WillOnce(ReturnRef(video_decoder_media_format_)); | 157 .WillOnce(ReturnRef(video_decoder_media_format_)); |
| 155 } | 158 } |
| 156 | 159 |
| 157 // Sets up expectations to allow the audio decoder to initialize. | 160 // Sets up expectations to allow the audio decoder to initialize. |
| 158 void InitializeAudioDecoder(MockDemuxerStream* stream) { | 161 void InitializeAudioDecoder(MockDemuxerStream* stream) { |
| 159 EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, NotNull())) | 162 EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, NotNull())) |
| 160 .WillOnce(Invoke(&RunFilterCallback)); | 163 .WillOnce(Invoke(&RunFilterCallback)); |
| 161 EXPECT_CALL(*mocks_->audio_decoder(), SetPlaybackRate(0.0f)); | 164 EXPECT_CALL(*mocks_->audio_decoder(), SetPlaybackRate(0.0f)); |
| 162 EXPECT_CALL(*mocks_->audio_decoder(), Seek(base::TimeDelta(), NotNull())) | 165 EXPECT_CALL(*mocks_->audio_decoder(), Seek(base::TimeDelta(), NotNull())) |
| 163 .WillOnce(Invoke(&RunFilterCallback)); | 166 .WillOnce(Invoke(&RunFilterCallback)); |
| 164 EXPECT_CALL(*mocks_->audio_decoder(), Stop()); | 167 EXPECT_CALL(*mocks_->audio_decoder(), Stop(NotNull())) |
| 168 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 165 EXPECT_CALL(*mocks_->audio_decoder(), media_format()) | 169 EXPECT_CALL(*mocks_->audio_decoder(), media_format()) |
| 166 .WillOnce(ReturnRef(audio_decoder_media_format_)); | 170 .WillOnce(ReturnRef(audio_decoder_media_format_)); |
| 167 } | 171 } |
| 168 | 172 |
| 169 // Sets up expectations to allow the video renderer to initialize. | 173 // Sets up expectations to allow the video renderer to initialize. |
| 170 void InitializeVideoRenderer() { | 174 void InitializeVideoRenderer() { |
| 171 EXPECT_CALL(*mocks_->video_renderer(), | 175 EXPECT_CALL(*mocks_->video_renderer(), |
| 172 Initialize(mocks_->video_decoder(), NotNull())) | 176 Initialize(mocks_->video_decoder(), NotNull())) |
| 173 .WillOnce(Invoke(&RunFilterCallback)); | 177 .WillOnce(Invoke(&RunFilterCallback)); |
| 174 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f)); | 178 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f)); |
| 175 EXPECT_CALL(*mocks_->video_renderer(), Seek(base::TimeDelta(), NotNull())) | 179 EXPECT_CALL(*mocks_->video_renderer(), Seek(base::TimeDelta(), NotNull())) |
| 176 .WillOnce(Invoke(&RunFilterCallback)); | 180 .WillOnce(Invoke(&RunFilterCallback)); |
| 177 EXPECT_CALL(*mocks_->video_renderer(), Stop()); | 181 EXPECT_CALL(*mocks_->video_renderer(), Stop(NotNull())) |
| 182 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 178 } | 183 } |
| 179 | 184 |
| 180 // Sets up expectations to allow the audio renderer to initialize. | 185 // Sets up expectations to allow the audio renderer to initialize. |
| 181 void InitializeAudioRenderer() { | 186 void InitializeAudioRenderer() { |
| 182 EXPECT_CALL(*mocks_->audio_renderer(), | 187 EXPECT_CALL(*mocks_->audio_renderer(), |
| 183 Initialize(mocks_->audio_decoder(), NotNull())) | 188 Initialize(mocks_->audio_decoder(), NotNull())) |
| 184 .WillOnce(Invoke(&RunFilterCallback)); | 189 .WillOnce(Invoke(&RunFilterCallback)); |
| 185 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f)); | 190 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f)); |
| 186 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f)); | 191 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f)); |
| 187 EXPECT_CALL(*mocks_->audio_renderer(), Seek(base::TimeDelta(), NotNull())) | 192 EXPECT_CALL(*mocks_->audio_renderer(), Seek(base::TimeDelta(), NotNull())) |
| 188 .WillOnce(Invoke(&RunFilterCallback)); | 193 .WillOnce(Invoke(&RunFilterCallback)); |
| 189 EXPECT_CALL(*mocks_->audio_renderer(), Stop()); | 194 EXPECT_CALL(*mocks_->audio_renderer(), Stop(NotNull())) |
| 195 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 190 } | 196 } |
| 191 | 197 |
| 192 // Sets up expectations on the callback and initializes the pipeline. Called | 198 // Sets up expectations on the callback and initializes the pipeline. Called |
| 193 // after tests have set expectations any filters they wish to use. | 199 // after tests have set expectations any filters they wish to use. |
| 194 void InitializePipeline() { | 200 void InitializePipeline() { |
| 195 // Expect an initialization callback. | 201 // Expect an initialization callback. |
| 196 EXPECT_CALL(callbacks_, OnStart()); | 202 EXPECT_CALL(callbacks_, OnStart()); |
| 197 pipeline_->Start(mocks_, "", | 203 pipeline_->Start(mocks_, "", |
| 198 NewCallback(reinterpret_cast<CallbackHelper*>(&callbacks_), | 204 NewCallback(reinterpret_cast<CallbackHelper*>(&callbacks_), |
| 199 &CallbackHelper::OnStart)); | 205 &CallbackHelper::OnStart)); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 pipeline_->GetVideoSize(&width, &height); | 287 pipeline_->GetVideoSize(&width, &height); |
| 282 EXPECT_EQ(0u, width); | 288 EXPECT_EQ(0u, width); |
| 283 EXPECT_EQ(0u, height); | 289 EXPECT_EQ(0u, height); |
| 284 | 290 |
| 285 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 291 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 286 } | 292 } |
| 287 | 293 |
| 288 TEST_F(PipelineImplTest, NeverInitializes) { | 294 TEST_F(PipelineImplTest, NeverInitializes) { |
| 289 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) | 295 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) |
| 290 .WillOnce(Invoke(&DestroyFilterCallback)); | 296 .WillOnce(Invoke(&DestroyFilterCallback)); |
| 291 EXPECT_CALL(*mocks_->data_source(), Stop()); | 297 EXPECT_CALL(*mocks_->data_source(), Stop(NotNull())) |
| 298 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 292 | 299 |
| 293 // This test hangs during initialization by never calling | 300 // This test hangs during initialization by never calling |
| 294 // InitializationComplete(). StrictMock<> will ensure that the callback is | 301 // InitializationComplete(). StrictMock<> will ensure that the callback is |
| 295 // never executed. | 302 // never executed. |
| 296 pipeline_->Start(mocks_, "", | 303 pipeline_->Start(mocks_, "", |
| 297 NewCallback(reinterpret_cast<CallbackHelper*>(&callbacks_), | 304 NewCallback(reinterpret_cast<CallbackHelper*>(&callbacks_), |
| 298 &CallbackHelper::OnStart)); | 305 &CallbackHelper::OnStart)); |
| 299 message_loop_.RunAllPending(); | 306 message_loop_.RunAllPending(); |
| 300 | 307 |
| 301 EXPECT_FALSE(pipeline_->IsInitialized()); | 308 EXPECT_FALSE(pipeline_->IsInitialized()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 317 EXPECT_EQ(PIPELINE_ERROR_REQUIRED_FILTER_MISSING, | 324 EXPECT_EQ(PIPELINE_ERROR_REQUIRED_FILTER_MISSING, |
| 318 pipeline_->GetError()); | 325 pipeline_->GetError()); |
| 319 } | 326 } |
| 320 | 327 |
| 321 TEST_F(PipelineImplTest, URLNotFound) { | 328 TEST_F(PipelineImplTest, URLNotFound) { |
| 322 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) | 329 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) |
| 323 .WillOnce(DoAll(SetError(mocks_->data_source(), | 330 .WillOnce(DoAll(SetError(mocks_->data_source(), |
| 324 PIPELINE_ERROR_URL_NOT_FOUND), | 331 PIPELINE_ERROR_URL_NOT_FOUND), |
| 325 Invoke(&RunFilterCallback))); | 332 Invoke(&RunFilterCallback))); |
| 326 EXPECT_CALL(callbacks_, OnError()); | 333 EXPECT_CALL(callbacks_, OnError()); |
| 327 EXPECT_CALL(*mocks_->data_source(), Stop()); | 334 EXPECT_CALL(*mocks_->data_source(), Stop(NotNull())) |
| 335 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 328 | 336 |
| 329 InitializePipeline(); | 337 InitializePipeline(); |
| 330 EXPECT_FALSE(pipeline_->IsInitialized()); | 338 EXPECT_FALSE(pipeline_->IsInitialized()); |
| 331 EXPECT_EQ(PIPELINE_ERROR_URL_NOT_FOUND, pipeline_->GetError()); | 339 EXPECT_EQ(PIPELINE_ERROR_URL_NOT_FOUND, pipeline_->GetError()); |
| 332 } | 340 } |
| 333 | 341 |
| 334 TEST_F(PipelineImplTest, NoStreams) { | 342 TEST_F(PipelineImplTest, NoStreams) { |
| 335 // Manually set these expectations because SetPlaybackRate() is not called if | 343 // Manually set these expectations because SetPlaybackRate() is not called if |
| 336 // we cannot fully initialize the pipeline. | 344 // we cannot fully initialize the pipeline. |
| 337 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) | 345 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) |
| 338 .WillOnce(Invoke(&RunFilterCallback)); | 346 .WillOnce(Invoke(&RunFilterCallback)); |
| 339 EXPECT_CALL(*mocks_->data_source(), Stop()); | 347 EXPECT_CALL(*mocks_->data_source(), Stop(NotNull())) |
| 348 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 340 EXPECT_CALL(*mocks_->data_source(), media_format()) | 349 EXPECT_CALL(*mocks_->data_source(), media_format()) |
| 341 .WillOnce(ReturnRef(data_source_media_format_)); | 350 .WillOnce(ReturnRef(data_source_media_format_)); |
| 342 | 351 |
| 343 EXPECT_CALL(*mocks_->demuxer(), Initialize(mocks_->data_source(), NotNull())) | 352 EXPECT_CALL(*mocks_->demuxer(), Initialize(mocks_->data_source(), NotNull())) |
| 344 .WillOnce(Invoke(&RunFilterCallback)); | 353 .WillOnce(Invoke(&RunFilterCallback)); |
| 345 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) | 354 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) |
| 346 .WillRepeatedly(Return(0)); | 355 .WillRepeatedly(Return(0)); |
| 347 EXPECT_CALL(*mocks_->demuxer(), Stop()); | 356 EXPECT_CALL(*mocks_->demuxer(), Stop(NotNull())) |
| 357 .WillOnce(Invoke(&RunStopFilterCallback)); |
| 348 EXPECT_CALL(callbacks_, OnError()); | 358 EXPECT_CALL(callbacks_, OnError()); |
| 349 | 359 |
| 350 InitializePipeline(); | 360 InitializePipeline(); |
| 351 EXPECT_FALSE(pipeline_->IsInitialized()); | 361 EXPECT_FALSE(pipeline_->IsInitialized()); |
| 352 EXPECT_EQ(PIPELINE_ERROR_COULD_NOT_RENDER, pipeline_->GetError()); | 362 EXPECT_EQ(PIPELINE_ERROR_COULD_NOT_RENDER, pipeline_->GetError()); |
| 353 } | 363 } |
| 354 | 364 |
| 355 TEST_F(PipelineImplTest, AudioStream) { | 365 TEST_F(PipelineImplTest, AudioStream) { |
| 356 CreateAudioStream(); | 366 CreateAudioStream(); |
| 357 MockDemuxerStreamVector streams; | 367 MockDemuxerStreamVector streams; |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 | 577 |
| 568 EXPECT_CALL(*mocks_->audio_renderer(), HasEnded()) | 578 EXPECT_CALL(*mocks_->audio_renderer(), HasEnded()) |
| 569 .WillOnce(Return(true)); | 579 .WillOnce(Return(true)); |
| 570 EXPECT_CALL(*mocks_->video_renderer(), HasEnded()) | 580 EXPECT_CALL(*mocks_->video_renderer(), HasEnded()) |
| 571 .WillOnce(Return(true)); | 581 .WillOnce(Return(true)); |
| 572 EXPECT_CALL(callbacks_, OnEnded()); | 582 EXPECT_CALL(callbacks_, OnEnded()); |
| 573 host->NotifyEnded(); | 583 host->NotifyEnded(); |
| 574 } | 584 } |
| 575 | 585 |
| 576 } // namespace media | 586 } // namespace media |
| OLD | NEW |