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 |