| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/waitable_event.h" | 7 #include "base/waitable_event.h" |
| 8 #include "media/base/pipeline_impl.h" | 8 #include "media/base/pipeline_impl.h" |
| 9 #include "media/base/media_format.h" | 9 #include "media/base/media_format.h" |
| 10 #include "media/base/filters.h" | 10 #include "media/base/filters.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) | 68 EXPECT_CALL(*mocks_->data_source(), Initialize("", NotNull())) |
| 69 .WillOnce(Invoke(&RunFilterCallback)); | 69 .WillOnce(Invoke(&RunFilterCallback)); |
| 70 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(0.0f)); | 70 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(0.0f)); |
| 71 EXPECT_CALL(*mocks_->data_source(), Seek(base::TimeDelta(), NotNull())) | 71 EXPECT_CALL(*mocks_->data_source(), Seek(base::TimeDelta(), NotNull())) |
| 72 .WillOnce(Invoke(&RunFilterCallback)); | 72 .WillOnce(Invoke(&RunFilterCallback)); |
| 73 EXPECT_CALL(*mocks_->data_source(), Stop()); | 73 EXPECT_CALL(*mocks_->data_source(), Stop()); |
| 74 } | 74 } |
| 75 | 75 |
| 76 // Sets up expectations to allow the demuxer to initialize. | 76 // Sets up expectations to allow the demuxer to initialize. |
| 77 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; | 77 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; |
| 78 void InitializeDemuxer(MockDemuxerStreamVector* streams) { | 78 void InitializeDemuxer(MockDemuxerStreamVector* streams, |
| 79 const base::TimeDelta& duration) { |
| 79 EXPECT_CALL(*mocks_->demuxer(), | 80 EXPECT_CALL(*mocks_->demuxer(), |
| 80 Initialize(mocks_->data_source(), NotNull())) | 81 Initialize(mocks_->data_source(), NotNull())) |
| 81 .WillOnce(Invoke(&RunFilterCallback)); | 82 .WillOnce(DoAll(SetDuration(mocks_->data_source(), duration), |
| 83 Invoke(&RunFilterCallback))); |
| 82 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) | 84 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) |
| 83 .WillRepeatedly(Return(streams->size())); | 85 .WillRepeatedly(Return(streams->size())); |
| 84 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); | 86 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); |
| 85 EXPECT_CALL(*mocks_->demuxer(), Seek(base::TimeDelta(), NotNull())) | 87 EXPECT_CALL(*mocks_->demuxer(), Seek(base::TimeDelta(), NotNull())) |
| 86 .WillOnce(Invoke(&RunFilterCallback)); | 88 .WillOnce(Invoke(&RunFilterCallback)); |
| 87 EXPECT_CALL(*mocks_->demuxer(), Stop()); | 89 EXPECT_CALL(*mocks_->demuxer(), Stop()); |
| 88 | 90 |
| 89 // Configure the demuxer to return the streams. | 91 // Configure the demuxer to return the streams. |
| 90 for (size_t i = 0; i < streams->size(); ++i) { | 92 for (size_t i = 0; i < streams->size(); ++i) { |
| 91 scoped_refptr<DemuxerStream> stream = (*streams)[i]; | 93 scoped_refptr<DemuxerStream> stream = (*streams)[i]; |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 EXPECT_EQ(PIPELINE_ERROR_COULD_NOT_RENDER, pipeline_->GetError()); | 272 EXPECT_EQ(PIPELINE_ERROR_COULD_NOT_RENDER, pipeline_->GetError()); |
| 271 } | 273 } |
| 272 | 274 |
| 273 TEST_F(PipelineImplTest, AudioStream) { | 275 TEST_F(PipelineImplTest, AudioStream) { |
| 274 scoped_refptr<StrictMock<MockDemuxerStream> > stream = | 276 scoped_refptr<StrictMock<MockDemuxerStream> > stream = |
| 275 new StrictMock<MockDemuxerStream>("audio/x-foo"); | 277 new StrictMock<MockDemuxerStream>("audio/x-foo"); |
| 276 MockDemuxerStreamVector streams; | 278 MockDemuxerStreamVector streams; |
| 277 streams.push_back(stream); | 279 streams.push_back(stream); |
| 278 | 280 |
| 279 InitializeDataSource(); | 281 InitializeDataSource(); |
| 280 InitializeDemuxer(&streams); | 282 InitializeDemuxer(&streams, base::TimeDelta()); |
| 281 InitializeAudioDecoder(stream); | 283 InitializeAudioDecoder(stream); |
| 282 InitializeAudioRenderer(); | 284 InitializeAudioRenderer(); |
| 283 | 285 |
| 284 InitializePipeline(); | 286 InitializePipeline(); |
| 285 EXPECT_TRUE(pipeline_->IsInitialized()); | 287 EXPECT_TRUE(pipeline_->IsInitialized()); |
| 286 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 288 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 287 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); | 289 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); |
| 288 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); | 290 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); |
| 289 } | 291 } |
| 290 | 292 |
| 291 TEST_F(PipelineImplTest, VideoStream) { | 293 TEST_F(PipelineImplTest, VideoStream) { |
| 292 scoped_refptr<StrictMock<MockDemuxerStream> > stream = | 294 scoped_refptr<StrictMock<MockDemuxerStream> > stream = |
| 293 new StrictMock<MockDemuxerStream>("video/x-foo"); | 295 new StrictMock<MockDemuxerStream>("video/x-foo"); |
| 294 MockDemuxerStreamVector streams; | 296 MockDemuxerStreamVector streams; |
| 295 streams.push_back(stream); | 297 streams.push_back(stream); |
| 296 | 298 |
| 297 InitializeDataSource(); | 299 InitializeDataSource(); |
| 298 InitializeDemuxer(&streams); | 300 InitializeDemuxer(&streams, base::TimeDelta()); |
| 299 InitializeVideoDecoder(stream); | 301 InitializeVideoDecoder(stream); |
| 300 InitializeVideoRenderer(); | 302 InitializeVideoRenderer(); |
| 301 | 303 |
| 302 InitializePipeline(); | 304 InitializePipeline(); |
| 303 EXPECT_TRUE(pipeline_->IsInitialized()); | 305 EXPECT_TRUE(pipeline_->IsInitialized()); |
| 304 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 306 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 305 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); | 307 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); |
| 306 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); | 308 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); |
| 307 } | 309 } |
| 308 | 310 |
| 309 TEST_F(PipelineImplTest, AudioVideoStream) { | 311 TEST_F(PipelineImplTest, AudioVideoStream) { |
| 310 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream = | 312 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream = |
| 311 new StrictMock<MockDemuxerStream>("audio/x-foo"); | 313 new StrictMock<MockDemuxerStream>("audio/x-foo"); |
| 312 scoped_refptr<StrictMock<MockDemuxerStream> > video_stream = | 314 scoped_refptr<StrictMock<MockDemuxerStream> > video_stream = |
| 313 new StrictMock<MockDemuxerStream>("video/x-foo"); | 315 new StrictMock<MockDemuxerStream>("video/x-foo"); |
| 314 MockDemuxerStreamVector streams; | 316 MockDemuxerStreamVector streams; |
| 315 streams.push_back(audio_stream); | 317 streams.push_back(audio_stream); |
| 316 streams.push_back(video_stream); | 318 streams.push_back(video_stream); |
| 317 | 319 |
| 318 InitializeDataSource(); | 320 InitializeDataSource(); |
| 319 InitializeDemuxer(&streams); | 321 InitializeDemuxer(&streams, base::TimeDelta()); |
| 320 InitializeAudioDecoder(audio_stream); | 322 InitializeAudioDecoder(audio_stream); |
| 321 InitializeAudioRenderer(); | 323 InitializeAudioRenderer(); |
| 322 InitializeVideoDecoder(video_stream); | 324 InitializeVideoDecoder(video_stream); |
| 323 InitializeVideoRenderer(); | 325 InitializeVideoRenderer(); |
| 324 | 326 |
| 325 InitializePipeline(); | 327 InitializePipeline(); |
| 326 EXPECT_TRUE(pipeline_->IsInitialized()); | 328 EXPECT_TRUE(pipeline_->IsInitialized()); |
| 327 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); | 329 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); |
| 328 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); | 330 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); |
| 329 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); | 331 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); |
| 330 } | 332 } |
| 331 | 333 |
| 332 TEST_F(PipelineImplTest, Seek) { | 334 TEST_F(PipelineImplTest, Seek) { |
| 333 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream = | 335 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream = |
| 334 new StrictMock<MockDemuxerStream>("audio/x-foo"); | 336 new StrictMock<MockDemuxerStream>("audio/x-foo"); |
| 335 scoped_refptr<StrictMock<MockDemuxerStream> > video_stream = | 337 scoped_refptr<StrictMock<MockDemuxerStream> > video_stream = |
| 336 new StrictMock<MockDemuxerStream>("video/x-foo"); | 338 new StrictMock<MockDemuxerStream>("video/x-foo"); |
| 337 MockDemuxerStreamVector streams; | 339 MockDemuxerStreamVector streams; |
| 338 streams.push_back(audio_stream); | 340 streams.push_back(audio_stream); |
| 339 streams.push_back(video_stream); | 341 streams.push_back(video_stream); |
| 340 | 342 |
| 341 InitializeDataSource(); | 343 InitializeDataSource(); |
| 342 InitializeDemuxer(&streams); | 344 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); |
| 343 InitializeAudioDecoder(audio_stream); | 345 InitializeAudioDecoder(audio_stream); |
| 344 InitializeAudioRenderer(); | 346 InitializeAudioRenderer(); |
| 345 InitializeVideoDecoder(video_stream); | 347 InitializeVideoDecoder(video_stream); |
| 346 InitializeVideoRenderer(); | 348 InitializeVideoRenderer(); |
| 347 | 349 |
| 348 // Every filter should receive a call to Seek(). | 350 // Every filter should receive a call to Seek(). |
| 349 base::TimeDelta expected = base::TimeDelta::FromSeconds(2000); | 351 base::TimeDelta expected = base::TimeDelta::FromSeconds(2000); |
| 350 EXPECT_CALL(*mocks_->data_source(), Seek(expected, NotNull())) | 352 EXPECT_CALL(*mocks_->data_source(), Seek(expected, NotNull())) |
| 351 .WillOnce(Invoke(&RunFilterCallback)); | 353 .WillOnce(Invoke(&RunFilterCallback)); |
| 352 EXPECT_CALL(*mocks_->demuxer(), Seek(expected, NotNull())) | 354 EXPECT_CALL(*mocks_->demuxer(), Seek(expected, NotNull())) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 375 EXPECT_TRUE(expected == pipeline_->GetCurrentTime()); | 377 EXPECT_TRUE(expected == pipeline_->GetCurrentTime()); |
| 376 } | 378 } |
| 377 | 379 |
| 378 TEST_F(PipelineImplTest, SetVolume) { | 380 TEST_F(PipelineImplTest, SetVolume) { |
| 379 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream = | 381 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream = |
| 380 new StrictMock<MockDemuxerStream>("audio/x-foo"); | 382 new StrictMock<MockDemuxerStream>("audio/x-foo"); |
| 381 MockDemuxerStreamVector streams; | 383 MockDemuxerStreamVector streams; |
| 382 streams.push_back(audio_stream); | 384 streams.push_back(audio_stream); |
| 383 | 385 |
| 384 InitializeDataSource(); | 386 InitializeDataSource(); |
| 385 InitializeDemuxer(&streams); | 387 InitializeDemuxer(&streams, base::TimeDelta()); |
| 386 InitializeAudioDecoder(audio_stream); | 388 InitializeAudioDecoder(audio_stream); |
| 387 InitializeAudioRenderer(); | 389 InitializeAudioRenderer(); |
| 388 | 390 |
| 389 // The audio renderer should receive a call to SetVolume(). | 391 // The audio renderer should receive a call to SetVolume(). |
| 390 float expected = 0.5f; | 392 float expected = 0.5f; |
| 391 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(expected)); | 393 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(expected)); |
| 392 | 394 |
| 393 // Initialize then set volume! | 395 // Initialize then set volume! |
| 394 InitializePipeline(); | 396 InitializePipeline(); |
| 395 pipeline_->SetVolume(expected); | 397 pipeline_->SetVolume(expected); |
| 396 } | 398 } |
| 397 | 399 |
| 398 } // namespace media | 400 } // namespace media |
| OLD | NEW |