| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/threading/simple_thread.h" | 10 #include "base/threading/simple_thread.h" |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 EXPECT_CALL(*mocks_->demuxer(), GetStartTime()) | 96 EXPECT_CALL(*mocks_->demuxer(), GetStartTime()) |
| 97 .WillRepeatedly(Return(base::TimeDelta())); | 97 .WillRepeatedly(Return(base::TimeDelta())); |
| 98 } | 98 } |
| 99 | 99 |
| 100 virtual ~PipelineTest() { | 100 virtual ~PipelineTest() { |
| 101 if (!pipeline_->IsRunning()) { | 101 if (!pipeline_->IsRunning()) { |
| 102 return; | 102 return; |
| 103 } | 103 } |
| 104 | 104 |
| 105 // Shutdown sequence. | 105 // Shutdown sequence. |
| 106 if (pipeline_->IsInitialized()) { | 106 // |
| 107 // TODO(scherkus): This check is required because in certain teardown |
| 108 // cases the pipeline is still "running" but has already stopped due to |
| 109 // errors. In an ideal world we stop running when we teardown, but that |
| 110 // requires cleaning up shutdown path, see http://crbug.com/110228 |
| 111 if (pipeline_->IsInitializedForTesting()) { |
| 107 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 112 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 108 .WillOnce(RunClosure()); | 113 .WillOnce(RunClosure()); |
| 109 | 114 |
| 110 // TODO(scherkus): Don't pause+flush on shutdown, | 115 // TODO(scherkus): Don't pause+flush on shutdown, |
| 111 // see http://crbug.com/110228 | 116 // see http://crbug.com/110228 |
| 112 if (audio_stream_) { | 117 if (audio_stream_) { |
| 113 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) | 118 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) |
| 114 .WillOnce(RunClosure()); | 119 .WillOnce(RunClosure()); |
| 115 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) | 120 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) |
| 116 .WillOnce(RunClosure()); | 121 .WillOnce(RunClosure()); |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 private: | 317 private: |
| 313 DISALLOW_COPY_AND_ASSIGN(PipelineTest); | 318 DISALLOW_COPY_AND_ASSIGN(PipelineTest); |
| 314 }; | 319 }; |
| 315 | 320 |
| 316 // Test that playback controls methods no-op when the pipeline hasn't been | 321 // Test that playback controls methods no-op when the pipeline hasn't been |
| 317 // started. | 322 // started. |
| 318 TEST_F(PipelineTest, NotStarted) { | 323 TEST_F(PipelineTest, NotStarted) { |
| 319 const base::TimeDelta kZero; | 324 const base::TimeDelta kZero; |
| 320 | 325 |
| 321 EXPECT_FALSE(pipeline_->IsRunning()); | 326 EXPECT_FALSE(pipeline_->IsRunning()); |
| 322 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 323 EXPECT_FALSE(pipeline_->HasAudio()); | 327 EXPECT_FALSE(pipeline_->HasAudio()); |
| 324 EXPECT_FALSE(pipeline_->HasVideo()); | 328 EXPECT_FALSE(pipeline_->HasVideo()); |
| 325 | 329 |
| 326 // Setting should still work. | 330 // Setting should still work. |
| 327 EXPECT_EQ(0.0f, pipeline_->GetPlaybackRate()); | 331 EXPECT_EQ(0.0f, pipeline_->GetPlaybackRate()); |
| 328 pipeline_->SetPlaybackRate(-1.0f); | 332 pipeline_->SetPlaybackRate(-1.0f); |
| 329 EXPECT_EQ(0.0f, pipeline_->GetPlaybackRate()); | 333 EXPECT_EQ(0.0f, pipeline_->GetPlaybackRate()); |
| 330 pipeline_->SetPlaybackRate(1.0f); | 334 pipeline_->SetPlaybackRate(1.0f); |
| 331 EXPECT_EQ(1.0f, pipeline_->GetPlaybackRate()); | 335 EXPECT_EQ(1.0f, pipeline_->GetPlaybackRate()); |
| 332 | 336 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 359 // This test hangs during initialization by never calling | 363 // This test hangs during initialization by never calling |
| 360 // InitializationComplete(). StrictMock<> will ensure that the callback is | 364 // InitializationComplete(). StrictMock<> will ensure that the callback is |
| 361 // never executed. | 365 // never executed. |
| 362 pipeline_->Start( | 366 pipeline_->Start( |
| 363 mocks_->Create().Pass(), | 367 mocks_->Create().Pass(), |
| 364 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 368 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 365 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 369 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 366 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); | 370 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); |
| 367 message_loop_.RunAllPending(); | 371 message_loop_.RunAllPending(); |
| 368 | 372 |
| 369 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 370 | 373 |
| 371 // Because our callback will get executed when the test tears down, we'll | 374 // Because our callback will get executed when the test tears down, we'll |
| 372 // verify that nothing has been called, then set our expectation for the call | 375 // verify that nothing has been called, then set our expectation for the call |
| 373 // made during tear down. | 376 // made during tear down. |
| 374 Mock::VerifyAndClear(&callbacks_); | 377 Mock::VerifyAndClear(&callbacks_); |
| 375 EXPECT_CALL(callbacks_, OnStart(PIPELINE_OK)); | 378 EXPECT_CALL(callbacks_, OnStart(PIPELINE_OK)); |
| 376 } | 379 } |
| 377 | 380 |
| 378 TEST_F(PipelineTest, RequiredFilterMissing) { | 381 TEST_F(PipelineTest, RequiredFilterMissing) { |
| 379 // Create a filter collection with missing filter. | 382 // Create a filter collection with missing filter. |
| 380 scoped_ptr<FilterCollection> collection(mocks_->Create()); | 383 scoped_ptr<FilterCollection> collection(mocks_->Create()); |
| 381 collection->SetDemuxer(NULL); | 384 collection->SetDemuxer(NULL); |
| 382 | 385 |
| 383 EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING)); | 386 EXPECT_CALL(callbacks_, OnStart(PIPELINE_ERROR_REQUIRED_FILTER_MISSING)); |
| 384 pipeline_->Start( | 387 pipeline_->Start( |
| 385 collection.Pass(), | 388 collection.Pass(), |
| 386 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), | 389 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), |
| 387 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), | 390 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), |
| 388 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); | 391 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_))); |
| 389 message_loop_.RunAllPending(); | 392 message_loop_.RunAllPending(); |
| 390 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 391 } | 393 } |
| 392 | 394 |
| 393 TEST_F(PipelineTest, URLNotFound) { | 395 TEST_F(PipelineTest, URLNotFound) { |
| 394 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) | 396 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) |
| 395 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_URL_NOT_FOUND)); | 397 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_URL_NOT_FOUND)); |
| 396 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 398 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 397 .WillOnce(RunClosure()); | 399 .WillOnce(RunClosure()); |
| 398 | 400 |
| 399 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); | 401 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); |
| 400 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 401 } | 402 } |
| 402 | 403 |
| 403 TEST_F(PipelineTest, NoStreams) { | 404 TEST_F(PipelineTest, NoStreams) { |
| 404 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) | 405 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) |
| 405 .WillOnce(RunPipelineStatusCB()); | 406 .WillOnce(RunPipelineStatusCB()); |
| 406 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 407 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 407 .WillOnce(RunClosure()); | 408 .WillOnce(RunClosure()); |
| 408 | 409 |
| 409 InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER); | 410 InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER); |
| 410 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 411 } | 411 } |
| 412 | 412 |
| 413 TEST_F(PipelineTest, AudioStream) { | 413 TEST_F(PipelineTest, AudioStream) { |
| 414 CreateAudioStream(); | 414 CreateAudioStream(); |
| 415 MockDemuxerStreamVector streams; | 415 MockDemuxerStreamVector streams; |
| 416 streams.push_back(audio_stream()); | 416 streams.push_back(audio_stream()); |
| 417 | 417 |
| 418 InitializeDemuxer(&streams); | 418 InitializeDemuxer(&streams); |
| 419 InitializeAudioDecoder(audio_stream()); | 419 InitializeAudioDecoder(audio_stream()); |
| 420 InitializeAudioRenderer(); | 420 InitializeAudioRenderer(); |
| 421 | 421 |
| 422 InitializePipeline(PIPELINE_OK); | 422 InitializePipeline(PIPELINE_OK); |
| 423 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 424 EXPECT_TRUE(pipeline_->HasAudio()); | 423 EXPECT_TRUE(pipeline_->HasAudio()); |
| 425 EXPECT_FALSE(pipeline_->HasVideo()); | 424 EXPECT_FALSE(pipeline_->HasVideo()); |
| 426 } | 425 } |
| 427 | 426 |
| 428 TEST_F(PipelineTest, VideoStream) { | 427 TEST_F(PipelineTest, VideoStream) { |
| 429 CreateVideoStream(); | 428 CreateVideoStream(); |
| 430 MockDemuxerStreamVector streams; | 429 MockDemuxerStreamVector streams; |
| 431 streams.push_back(video_stream()); | 430 streams.push_back(video_stream()); |
| 432 | 431 |
| 433 InitializeDemuxer(&streams); | 432 InitializeDemuxer(&streams); |
| 434 InitializeVideoDecoder(video_stream()); | 433 InitializeVideoDecoder(video_stream()); |
| 435 InitializeVideoRenderer(); | 434 InitializeVideoRenderer(); |
| 436 | 435 |
| 437 InitializePipeline(PIPELINE_OK); | 436 InitializePipeline(PIPELINE_OK); |
| 438 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 439 EXPECT_FALSE(pipeline_->HasAudio()); | 437 EXPECT_FALSE(pipeline_->HasAudio()); |
| 440 EXPECT_TRUE(pipeline_->HasVideo()); | 438 EXPECT_TRUE(pipeline_->HasVideo()); |
| 441 } | 439 } |
| 442 | 440 |
| 443 TEST_F(PipelineTest, AudioVideoStream) { | 441 TEST_F(PipelineTest, AudioVideoStream) { |
| 444 CreateAudioStream(); | 442 CreateAudioStream(); |
| 445 CreateVideoStream(); | 443 CreateVideoStream(); |
| 446 MockDemuxerStreamVector streams; | 444 MockDemuxerStreamVector streams; |
| 447 streams.push_back(audio_stream()); | 445 streams.push_back(audio_stream()); |
| 448 streams.push_back(video_stream()); | 446 streams.push_back(video_stream()); |
| 449 | 447 |
| 450 InitializeDemuxer(&streams); | 448 InitializeDemuxer(&streams); |
| 451 InitializeAudioDecoder(audio_stream()); | 449 InitializeAudioDecoder(audio_stream()); |
| 452 InitializeAudioRenderer(); | 450 InitializeAudioRenderer(); |
| 453 InitializeVideoDecoder(video_stream()); | 451 InitializeVideoDecoder(video_stream()); |
| 454 InitializeVideoRenderer(); | 452 InitializeVideoRenderer(); |
| 455 | 453 |
| 456 InitializePipeline(PIPELINE_OK); | 454 InitializePipeline(PIPELINE_OK); |
| 457 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 458 EXPECT_TRUE(pipeline_->HasAudio()); | 455 EXPECT_TRUE(pipeline_->HasAudio()); |
| 459 EXPECT_TRUE(pipeline_->HasVideo()); | 456 EXPECT_TRUE(pipeline_->HasVideo()); |
| 460 } | 457 } |
| 461 | 458 |
| 462 TEST_F(PipelineTest, Seek) { | 459 TEST_F(PipelineTest, Seek) { |
| 463 CreateAudioStream(); | 460 CreateAudioStream(); |
| 464 CreateVideoStream(); | 461 CreateVideoStream(); |
| 465 MockDemuxerStreamVector streams; | 462 MockDemuxerStreamVector streams; |
| 466 streams.push_back(audio_stream()); | 463 streams.push_back(audio_stream()); |
| 467 streams.push_back(video_stream()); | 464 streams.push_back(video_stream()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 CreateVideoStream(); | 500 CreateVideoStream(); |
| 504 MockDemuxerStreamVector streams; | 501 MockDemuxerStreamVector streams; |
| 505 streams.push_back(video_stream()); | 502 streams.push_back(video_stream()); |
| 506 | 503 |
| 507 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); | 504 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); |
| 508 InitializeDemuxer(&streams, kDuration); | 505 InitializeDemuxer(&streams, kDuration); |
| 509 InitializeVideoDecoder(video_stream()); | 506 InitializeVideoDecoder(video_stream()); |
| 510 InitializeVideoRenderer(); | 507 InitializeVideoRenderer(); |
| 511 | 508 |
| 512 InitializePipeline(PIPELINE_OK); | 509 InitializePipeline(PIPELINE_OK); |
| 513 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 514 EXPECT_EQ(kDuration.ToInternalValue(), | 510 EXPECT_EQ(kDuration.ToInternalValue(), |
| 515 pipeline_->GetMediaDuration().ToInternalValue()); | 511 pipeline_->GetMediaDuration().ToInternalValue()); |
| 516 EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes()); | 512 EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes()); |
| 517 EXPECT_FALSE(pipeline_->DidLoadingProgress()); | 513 EXPECT_FALSE(pipeline_->DidLoadingProgress()); |
| 518 } | 514 } |
| 519 | 515 |
| 520 TEST_F(PipelineTest, GetBufferedTimeRanges) { | 516 TEST_F(PipelineTest, GetBufferedTimeRanges) { |
| 521 CreateVideoStream(); | 517 CreateVideoStream(); |
| 522 MockDemuxerStreamVector streams; | 518 MockDemuxerStreamVector streams; |
| 523 streams.push_back(video_stream()); | 519 streams.push_back(video_stream()); |
| 524 | 520 |
| 525 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); | 521 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); |
| 526 InitializeDemuxer(&streams, kDuration); | 522 InitializeDemuxer(&streams, kDuration); |
| 527 InitializeVideoDecoder(video_stream()); | 523 InitializeVideoDecoder(video_stream()); |
| 528 InitializeVideoRenderer(); | 524 InitializeVideoRenderer(); |
| 529 | 525 |
| 530 InitializePipeline(PIPELINE_OK); | 526 InitializePipeline(PIPELINE_OK); |
| 531 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 532 | 527 |
| 533 EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size()); | 528 EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size()); |
| 534 | 529 |
| 535 EXPECT_FALSE(pipeline_->DidLoadingProgress()); | 530 EXPECT_FALSE(pipeline_->DidLoadingProgress()); |
| 536 pipeline_->AddBufferedByteRange(0, kTotalBytes / 8); | 531 pipeline_->AddBufferedByteRange(0, kTotalBytes / 8); |
| 537 EXPECT_TRUE(pipeline_->DidLoadingProgress()); | 532 EXPECT_TRUE(pipeline_->DidLoadingProgress()); |
| 538 EXPECT_FALSE(pipeline_->DidLoadingProgress()); | 533 EXPECT_FALSE(pipeline_->DidLoadingProgress()); |
| 539 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); | 534 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); |
| 540 EXPECT_EQ(base::TimeDelta(), pipeline_->GetBufferedTimeRanges().start(0)); | 535 EXPECT_EQ(base::TimeDelta(), pipeline_->GetBufferedTimeRanges().start(0)); |
| 541 EXPECT_EQ(kDuration / 8, pipeline_->GetBufferedTimeRanges().end(0)); | 536 EXPECT_EQ(kDuration / 8, pipeline_->GetBufferedTimeRanges().end(0)); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 streams.push_back(audio_stream()); | 572 streams.push_back(audio_stream()); |
| 578 streams.push_back(video_stream()); | 573 streams.push_back(video_stream()); |
| 579 | 574 |
| 580 InitializeDemuxer(&streams); | 575 InitializeDemuxer(&streams); |
| 581 InitializeAudioDecoder(audio_stream()); | 576 InitializeAudioDecoder(audio_stream()); |
| 582 InitializeAudioRenderer(); | 577 InitializeAudioRenderer(); |
| 583 InitializeVideoDecoder(video_stream()); | 578 InitializeVideoDecoder(video_stream()); |
| 584 InitializeVideoRenderer(); | 579 InitializeVideoRenderer(); |
| 585 | 580 |
| 586 InitializePipeline(PIPELINE_OK); | 581 InitializePipeline(PIPELINE_OK); |
| 587 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 588 EXPECT_TRUE(pipeline_->HasAudio()); | 582 EXPECT_TRUE(pipeline_->HasAudio()); |
| 589 EXPECT_TRUE(pipeline_->HasVideo()); | 583 EXPECT_TRUE(pipeline_->HasVideo()); |
| 590 | 584 |
| 591 EXPECT_CALL(*mocks_->demuxer(), OnAudioRendererDisabled()); | 585 EXPECT_CALL(*mocks_->demuxer(), OnAudioRendererDisabled()); |
| 592 pipeline_->OnAudioDisabled(); | 586 pipeline_->OnAudioDisabled(); |
| 593 | 587 |
| 594 // Verify that ended event is fired when video ends. | 588 // Verify that ended event is fired when video ends. |
| 595 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK)); | 589 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK)); |
| 596 pipeline_->OnVideoRendererEnded(); | 590 pipeline_->OnVideoRendererEnded(); |
| 597 } | 591 } |
| 598 | 592 |
| 599 TEST_F(PipelineTest, DisableAudioRendererDuringInit) { | 593 TEST_F(PipelineTest, DisableAudioRendererDuringInit) { |
| 600 CreateAudioStream(); | 594 CreateAudioStream(); |
| 601 CreateVideoStream(); | 595 CreateVideoStream(); |
| 602 MockDemuxerStreamVector streams; | 596 MockDemuxerStreamVector streams; |
| 603 streams.push_back(audio_stream()); | 597 streams.push_back(audio_stream()); |
| 604 streams.push_back(video_stream()); | 598 streams.push_back(video_stream()); |
| 605 | 599 |
| 606 InitializeDemuxer(&streams); | 600 InitializeDemuxer(&streams); |
| 607 InitializeAudioDecoder(audio_stream()); | 601 InitializeAudioDecoder(audio_stream()); |
| 608 InitializeAudioRenderer(true); | 602 InitializeAudioRenderer(true); |
| 609 InitializeVideoDecoder(video_stream()); | 603 InitializeVideoDecoder(video_stream()); |
| 610 InitializeVideoRenderer(); | 604 InitializeVideoRenderer(); |
| 611 | 605 |
| 612 EXPECT_CALL(*mocks_->demuxer(), | 606 EXPECT_CALL(*mocks_->demuxer(), |
| 613 OnAudioRendererDisabled()); | 607 OnAudioRendererDisabled()); |
| 614 | 608 |
| 615 InitializePipeline(PIPELINE_OK); | 609 InitializePipeline(PIPELINE_OK); |
| 616 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 617 EXPECT_FALSE(pipeline_->HasAudio()); | 610 EXPECT_FALSE(pipeline_->HasAudio()); |
| 618 EXPECT_TRUE(pipeline_->HasVideo()); | 611 EXPECT_TRUE(pipeline_->HasVideo()); |
| 619 | 612 |
| 620 // Verify that ended event is fired when video ends. | 613 // Verify that ended event is fired when video ends. |
| 621 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK)); | 614 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK)); |
| 622 pipeline_->OnVideoRendererEnded(); | 615 pipeline_->OnVideoRendererEnded(); |
| 623 } | 616 } |
| 624 | 617 |
| 625 TEST_F(PipelineTest, EndedCallback) { | 618 TEST_F(PipelineTest, EndedCallback) { |
| 626 CreateAudioStream(); | 619 CreateAudioStream(); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 CreateVideoStream(); | 794 CreateVideoStream(); |
| 802 MockDemuxerStreamVector streams; | 795 MockDemuxerStreamVector streams; |
| 803 streams.push_back(video_stream()); | 796 streams.push_back(video_stream()); |
| 804 | 797 |
| 805 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); | 798 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); |
| 806 InitializeDemuxer(&streams, kDuration); | 799 InitializeDemuxer(&streams, kDuration); |
| 807 InitializeVideoDecoder(video_stream()); | 800 InitializeVideoDecoder(video_stream()); |
| 808 InitializeVideoRenderer(); | 801 InitializeVideoRenderer(); |
| 809 | 802 |
| 810 InitializePipeline(PIPELINE_OK); | 803 InitializePipeline(PIPELINE_OK); |
| 811 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 812 EXPECT_FALSE(pipeline_->HasAudio()); | 804 EXPECT_FALSE(pipeline_->HasAudio()); |
| 813 EXPECT_TRUE(pipeline_->HasVideo()); | 805 EXPECT_TRUE(pipeline_->HasVideo()); |
| 814 | 806 |
| 815 EXPECT_EQ(base::TimeDelta(), pipeline_->GetMediaTime()); | 807 EXPECT_EQ(base::TimeDelta(), pipeline_->GetMediaTime()); |
| 816 } | 808 } |
| 817 | 809 |
| 818 TEST_F(PipelineTest, StartTimeIsNonZero) { | 810 TEST_F(PipelineTest, StartTimeIsNonZero) { |
| 819 const base::TimeDelta kStartTime = base::TimeDelta::FromSeconds(4); | 811 const base::TimeDelta kStartTime = base::TimeDelta::FromSeconds(4); |
| 820 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); | 812 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); |
| 821 | 813 |
| 822 EXPECT_CALL(*mocks_->demuxer(), GetStartTime()) | 814 EXPECT_CALL(*mocks_->demuxer(), GetStartTime()) |
| 823 .WillRepeatedly(Return(kStartTime)); | 815 .WillRepeatedly(Return(kStartTime)); |
| 824 | 816 |
| 825 CreateVideoStream(); | 817 CreateVideoStream(); |
| 826 MockDemuxerStreamVector streams; | 818 MockDemuxerStreamVector streams; |
| 827 streams.push_back(video_stream()); | 819 streams.push_back(video_stream()); |
| 828 | 820 |
| 829 InitializeDemuxer(&streams, kDuration); | 821 InitializeDemuxer(&streams, kDuration); |
| 830 InitializeVideoDecoder(video_stream()); | 822 InitializeVideoDecoder(video_stream()); |
| 831 InitializeVideoRenderer(); | 823 InitializeVideoRenderer(); |
| 832 | 824 |
| 833 InitializePipeline(PIPELINE_OK); | 825 InitializePipeline(PIPELINE_OK); |
| 834 EXPECT_TRUE(pipeline_->IsInitialized()); | |
| 835 EXPECT_FALSE(pipeline_->HasAudio()); | 826 EXPECT_FALSE(pipeline_->HasAudio()); |
| 836 EXPECT_TRUE(pipeline_->HasVideo()); | 827 EXPECT_TRUE(pipeline_->HasVideo()); |
| 837 | 828 |
| 838 EXPECT_EQ(kStartTime, pipeline_->GetMediaTime()); | 829 EXPECT_EQ(kStartTime, pipeline_->GetMediaTime()); |
| 839 } | 830 } |
| 840 | 831 |
| 841 static void RunTimeCB(const AudioRenderer::TimeCB& time_cb, | 832 static void RunTimeCB(const AudioRenderer::TimeCB& time_cb, |
| 842 int time_in_ms, | 833 int time_in_ms, |
| 843 int max_time_in_ms) { | 834 int max_time_in_ms) { |
| 844 time_cb.Run(base::TimeDelta::FromMilliseconds(time_in_ms), | 835 time_cb.Run(base::TimeDelta::FromMilliseconds(time_in_ms), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 898 EXPECT_EQ(pipeline_->GetMediaTime(), new_time); | 889 EXPECT_EQ(pipeline_->GetMediaTime(), new_time); |
| 899 } | 890 } |
| 900 | 891 |
| 901 TEST_F(PipelineTest, InitFailure_Demuxer) { | 892 TEST_F(PipelineTest, InitFailure_Demuxer) { |
| 902 PipelineStatus expected_status = DEMUXER_ERROR_COULD_NOT_OPEN; | 893 PipelineStatus expected_status = DEMUXER_ERROR_COULD_NOT_OPEN; |
| 903 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) | 894 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) |
| 904 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); | 895 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); |
| 905 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 896 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 906 .WillOnce(RunClosure()); | 897 .WillOnce(RunClosure()); |
| 907 InitializePipeline(expected_status); | 898 InitializePipeline(expected_status); |
| 908 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 909 } | 899 } |
| 910 | 900 |
| 911 TEST_F(PipelineTest, InitFailure_AudioDecoder) { | 901 TEST_F(PipelineTest, InitFailure_AudioDecoder) { |
| 912 CreateAudioStream(); | 902 CreateAudioStream(); |
| 913 MockDemuxerStreamVector streams; | 903 MockDemuxerStreamVector streams; |
| 914 streams.push_back(audio_stream()); | 904 streams.push_back(audio_stream()); |
| 915 | 905 |
| 916 InitializeDemuxer(&streams); | 906 InitializeDemuxer(&streams); |
| 917 | 907 |
| 918 PipelineStatus expected_status = PIPELINE_ERROR_DECODE; | 908 PipelineStatus expected_status = PIPELINE_ERROR_DECODE; |
| 919 scoped_refptr<DemuxerStream> stream = streams[0]; | 909 scoped_refptr<DemuxerStream> stream = streams[0]; |
| 920 EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, _, _)) | 910 EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, _, _)) |
| 921 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); | 911 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); |
| 922 | 912 |
| 923 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 913 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 924 .WillOnce(RunClosure()); | 914 .WillOnce(RunClosure()); |
| 925 | 915 |
| 926 InitializePipeline(expected_status); | 916 InitializePipeline(expected_status); |
| 927 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 928 EXPECT_FALSE(pipeline_->HasAudio()); | 917 EXPECT_FALSE(pipeline_->HasAudio()); |
| 929 } | 918 } |
| 930 | 919 |
| 931 TEST_F(PipelineTest, InitFailure_AudioRenderer) { | 920 TEST_F(PipelineTest, InitFailure_AudioRenderer) { |
| 932 CreateAudioStream(); | 921 CreateAudioStream(); |
| 933 MockDemuxerStreamVector streams; | 922 MockDemuxerStreamVector streams; |
| 934 streams.push_back(audio_stream()); | 923 streams.push_back(audio_stream()); |
| 935 | 924 |
| 936 InitializeDemuxer(&streams); | 925 InitializeDemuxer(&streams); |
| 937 InitializeAudioDecoder(audio_stream()); | 926 InitializeAudioDecoder(audio_stream()); |
| 938 | 927 |
| 939 PipelineStatus expected_status = PIPELINE_ERROR_INITIALIZATION_FAILED; | 928 PipelineStatus expected_status = PIPELINE_ERROR_INITIALIZATION_FAILED; |
| 940 EXPECT_CALL(*mocks_->audio_renderer(), Initialize( | 929 EXPECT_CALL(*mocks_->audio_renderer(), Initialize( |
| 941 scoped_refptr<AudioDecoder>(mocks_->audio_decoder()), | 930 scoped_refptr<AudioDecoder>(mocks_->audio_decoder()), |
| 942 _, _, _, _, _, _)) | 931 _, _, _, _, _, _)) |
| 943 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); | 932 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); |
| 944 | 933 |
| 945 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 934 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 946 .WillOnce(RunClosure()); | 935 .WillOnce(RunClosure()); |
| 947 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) | 936 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) |
| 948 .WillOnce(RunClosure()); | 937 .WillOnce(RunClosure()); |
| 949 | 938 |
| 950 InitializePipeline(expected_status); | 939 InitializePipeline(expected_status); |
| 951 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 952 EXPECT_TRUE(pipeline_->HasAudio()); | 940 EXPECT_TRUE(pipeline_->HasAudio()); |
| 953 } | 941 } |
| 954 | 942 |
| 955 TEST_F(PipelineTest, InitFailure_VideoDecoder) { | 943 TEST_F(PipelineTest, InitFailure_VideoDecoder) { |
| 956 CreateAudioStream(); | 944 CreateAudioStream(); |
| 957 CreateVideoStream(); | 945 CreateVideoStream(); |
| 958 MockDemuxerStreamVector streams; | 946 MockDemuxerStreamVector streams; |
| 959 streams.push_back(audio_stream()); | 947 streams.push_back(audio_stream()); |
| 960 streams.push_back(video_stream()); | 948 streams.push_back(video_stream()); |
| 961 | 949 |
| 962 InitializeDemuxer(&streams); | 950 InitializeDemuxer(&streams); |
| 963 InitializeAudioDecoder(audio_stream()); | 951 InitializeAudioDecoder(audio_stream()); |
| 964 InitializeAudioRenderer(); | 952 InitializeAudioRenderer(); |
| 965 | 953 |
| 966 PipelineStatus expected_status = PIPELINE_ERROR_DECODE; | 954 PipelineStatus expected_status = PIPELINE_ERROR_DECODE; |
| 967 scoped_refptr<DemuxerStream> stream = streams[1]; | 955 scoped_refptr<DemuxerStream> stream = streams[1]; |
| 968 EXPECT_CALL(*mocks_->video_decoder(), | 956 EXPECT_CALL(*mocks_->video_decoder(), |
| 969 Initialize(stream, _, _)) | 957 Initialize(stream, _, _)) |
| 970 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); | 958 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); |
| 971 | 959 |
| 972 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 960 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 973 .WillOnce(RunClosure()); | 961 .WillOnce(RunClosure()); |
| 974 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) | 962 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) |
| 975 .WillOnce(RunClosure()); | 963 .WillOnce(RunClosure()); |
| 976 | 964 |
| 977 InitializePipeline(expected_status); | 965 InitializePipeline(expected_status); |
| 978 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 979 EXPECT_TRUE(pipeline_->HasAudio()); | 966 EXPECT_TRUE(pipeline_->HasAudio()); |
| 980 EXPECT_FALSE(pipeline_->HasVideo()); | 967 EXPECT_FALSE(pipeline_->HasVideo()); |
| 981 } | 968 } |
| 982 | 969 |
| 983 TEST_F(PipelineTest, InitFailure_VideoRenderer) { | 970 TEST_F(PipelineTest, InitFailure_VideoRenderer) { |
| 984 CreateAudioStream(); | 971 CreateAudioStream(); |
| 985 CreateVideoStream(); | 972 CreateVideoStream(); |
| 986 MockDemuxerStreamVector streams; | 973 MockDemuxerStreamVector streams; |
| 987 streams.push_back(audio_stream()); | 974 streams.push_back(audio_stream()); |
| 988 streams.push_back(video_stream()); | 975 streams.push_back(video_stream()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 999 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); | 986 .WillOnce(RunPipelineStatusCBWithStatus(expected_status)); |
| 1000 | 987 |
| 1001 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) | 988 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) |
| 1002 .WillOnce(RunClosure()); | 989 .WillOnce(RunClosure()); |
| 1003 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) | 990 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) |
| 1004 .WillOnce(RunClosure()); | 991 .WillOnce(RunClosure()); |
| 1005 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)) | 992 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)) |
| 1006 .WillOnce(RunClosure()); | 993 .WillOnce(RunClosure()); |
| 1007 | 994 |
| 1008 InitializePipeline(expected_status); | 995 InitializePipeline(expected_status); |
| 1009 EXPECT_FALSE(pipeline_->IsInitialized()); | |
| 1010 EXPECT_TRUE(pipeline_->HasAudio()); | 996 EXPECT_TRUE(pipeline_->HasAudio()); |
| 1011 EXPECT_TRUE(pipeline_->HasVideo()); | 997 EXPECT_TRUE(pipeline_->HasVideo()); |
| 1012 } | 998 } |
| 1013 | 999 |
| 1014 class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate { | 1000 class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate { |
| 1015 public: | 1001 public: |
| 1016 FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status, | 1002 FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status, |
| 1017 const PipelineStatusCB& status_cb) | 1003 const PipelineStatusCB& status_cb) |
| 1018 : delay_(delay), | 1004 : delay_(delay), |
| 1019 status_(status), | 1005 status_(status), |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1277 INSTANTIATE_TEARDOWN_TEST(Stop, Playing); | 1263 INSTANTIATE_TEARDOWN_TEST(Stop, Playing); |
| 1278 | 1264 |
| 1279 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); | 1265 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); |
| 1280 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 1266 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
| 1281 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1267 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
| 1282 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); | 1268 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); |
| 1283 INSTANTIATE_TEARDOWN_TEST(Error, Starting); | 1269 INSTANTIATE_TEARDOWN_TEST(Error, Starting); |
| 1284 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1270 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
| 1285 | 1271 |
| 1286 } // namespace media | 1272 } // namespace media |
| OLD | NEW |