Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Side by Side Diff: media/base/pipeline_unittest.cc

Issue 10836167: Move VideoDecoder initialization into VideoRendererBase. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 27 matching lines...) Expand all
38 38
39 ACTION_P(SetDemuxerProperties, duration) { 39 ACTION_P(SetDemuxerProperties, duration) {
40 arg0->SetTotalBytes(kTotalBytes); 40 arg0->SetTotalBytes(kTotalBytes);
41 arg0->SetDuration(duration); 41 arg0->SetDuration(duration);
42 } 42 }
43 43
44 ACTION(RunPipelineStatusCB1) { 44 ACTION(RunPipelineStatusCB1) {
45 arg1.Run(PIPELINE_OK); 45 arg1.Run(PIPELINE_OK);
46 } 46 }
47 47
48 ACTION(RunPipelineStatusCB2) {
49 arg2.Run(PIPELINE_OK);
50 }
51
48 ACTION_P(RunPipelineStatusCB1WithStatus, status) { 52 ACTION_P(RunPipelineStatusCB1WithStatus, status) {
49 arg1.Run(status); 53 arg1.Run(status);
50 } 54 }
51 55
56 ACTION_P(RunPipelineStatusCB2WithStatus, status) {
57 arg2.Run(status);
58 }
59
52 // Used for setting expectations on pipeline callbacks. Using a StrictMock 60 // Used for setting expectations on pipeline callbacks. Using a StrictMock
53 // also lets us test for missing callbacks. 61 // also lets us test for missing callbacks.
54 class CallbackHelper { 62 class CallbackHelper {
55 public: 63 public:
56 CallbackHelper() {} 64 CallbackHelper() {}
57 virtual ~CallbackHelper() {} 65 virtual ~CallbackHelper() {}
58 66
59 MOCK_METHOD1(OnStart, void(PipelineStatus)); 67 MOCK_METHOD1(OnStart, void(PipelineStatus));
60 MOCK_METHOD1(OnSeek, void(PipelineStatus)); 68 MOCK_METHOD1(OnSeek, void(PipelineStatus));
61 MOCK_METHOD0(OnStop, void()); 69 MOCK_METHOD0(OnStop, void());
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 } 158 }
151 159
152 StrictMock<MockDemuxerStream>* CreateStream(DemuxerStream::Type type) { 160 StrictMock<MockDemuxerStream>* CreateStream(DemuxerStream::Type type) {
153 StrictMock<MockDemuxerStream>* stream = 161 StrictMock<MockDemuxerStream>* stream =
154 new StrictMock<MockDemuxerStream>(); 162 new StrictMock<MockDemuxerStream>();
155 EXPECT_CALL(*stream, type()) 163 EXPECT_CALL(*stream, type())
156 .WillRepeatedly(Return(type)); 164 .WillRepeatedly(Return(type));
157 return stream; 165 return stream;
158 } 166 }
159 167
160 // Sets up expectations to allow the video decoder to initialize.
161 void InitializeVideoDecoder(const scoped_refptr<DemuxerStream>& stream) {
162 EXPECT_CALL(*mocks_->video_decoder(),
163 Initialize(stream, _, _))
164 .WillOnce(RunPipelineStatusCB1());
165 }
166
167 // Sets up expectations to allow the audio decoder to initialize. 168 // Sets up expectations to allow the audio decoder to initialize.
168 void InitializeAudioDecoder(const scoped_refptr<DemuxerStream>& stream) { 169 void InitializeAudioDecoder(const scoped_refptr<DemuxerStream>& stream) {
169 EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, _, _)) 170 EXPECT_CALL(*mocks_->audio_decoder(), Initialize(stream, _, _))
170 .WillOnce(RunPipelineStatusCB1()); 171 .WillOnce(RunPipelineStatusCB1());
171 } 172 }
172 173
173 // Sets up expectations to allow the video renderer to initialize. 174 // Sets up expectations to allow the video renderer to initialize.
174 void InitializeVideoRenderer() { 175 void InitializeVideoRenderer(const scoped_refptr<DemuxerStream>& stream) {
175 EXPECT_CALL(*mocks_->video_renderer(), Initialize( 176 EXPECT_CALL(*mocks_->video_renderer(), Initialize(
176 scoped_refptr<VideoDecoder>(mocks_->video_decoder()), 177 stream, _, _, _, _, _, _, _, _, _))
177 _, _, _, _, _, _, _, _)) 178 .WillOnce(RunPipelineStatusCB2());
178 .WillOnce(RunPipelineStatusCB1());
179 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f)); 179 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f));
180 180
181 // Startup sequence. 181 // Startup sequence.
182 EXPECT_CALL(*mocks_->video_renderer(), 182 EXPECT_CALL(*mocks_->video_renderer(),
183 Preroll(mocks_->demuxer()->GetStartTime(), _)) 183 Preroll(mocks_->demuxer()->GetStartTime(), _))
184 .WillOnce(RunPipelineStatusCB1()); 184 .WillOnce(RunPipelineStatusCB1());
185 EXPECT_CALL(*mocks_->video_renderer(), Play(_)) 185 EXPECT_CALL(*mocks_->video_renderer(), Play(_))
186 .WillOnce(RunClosure()); 186 .WillOnce(RunClosure());
187 } 187 }
188 188
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 EXPECT_TRUE(pipeline_->HasAudio()); 413 EXPECT_TRUE(pipeline_->HasAudio());
414 EXPECT_FALSE(pipeline_->HasVideo()); 414 EXPECT_FALSE(pipeline_->HasVideo());
415 } 415 }
416 416
417 TEST_F(PipelineTest, VideoStream) { 417 TEST_F(PipelineTest, VideoStream) {
418 CreateVideoStream(); 418 CreateVideoStream();
419 MockDemuxerStreamVector streams; 419 MockDemuxerStreamVector streams;
420 streams.push_back(video_stream()); 420 streams.push_back(video_stream());
421 421
422 InitializeDemuxer(&streams); 422 InitializeDemuxer(&streams);
423 InitializeVideoDecoder(video_stream()); 423 InitializeVideoRenderer(video_stream());
424 InitializeVideoRenderer();
425 424
426 InitializePipeline(PIPELINE_OK); 425 InitializePipeline(PIPELINE_OK);
427 EXPECT_TRUE(pipeline_->IsInitialized()); 426 EXPECT_TRUE(pipeline_->IsInitialized());
428 EXPECT_FALSE(pipeline_->HasAudio()); 427 EXPECT_FALSE(pipeline_->HasAudio());
429 EXPECT_TRUE(pipeline_->HasVideo()); 428 EXPECT_TRUE(pipeline_->HasVideo());
430 } 429 }
431 430
432 TEST_F(PipelineTest, AudioVideoStream) { 431 TEST_F(PipelineTest, AudioVideoStream) {
433 CreateAudioStream(); 432 CreateAudioStream();
434 CreateVideoStream(); 433 CreateVideoStream();
435 MockDemuxerStreamVector streams; 434 MockDemuxerStreamVector streams;
436 streams.push_back(audio_stream()); 435 streams.push_back(audio_stream());
437 streams.push_back(video_stream()); 436 streams.push_back(video_stream());
438 437
439 InitializeDemuxer(&streams); 438 InitializeDemuxer(&streams);
440 InitializeAudioDecoder(audio_stream()); 439 InitializeAudioDecoder(audio_stream());
441 InitializeAudioRenderer(); 440 InitializeAudioRenderer();
442 InitializeVideoDecoder(video_stream()); 441 InitializeVideoRenderer(video_stream());
443 InitializeVideoRenderer();
444 442
445 InitializePipeline(PIPELINE_OK); 443 InitializePipeline(PIPELINE_OK);
446 EXPECT_TRUE(pipeline_->IsInitialized()); 444 EXPECT_TRUE(pipeline_->IsInitialized());
447 EXPECT_TRUE(pipeline_->HasAudio()); 445 EXPECT_TRUE(pipeline_->HasAudio());
448 EXPECT_TRUE(pipeline_->HasVideo()); 446 EXPECT_TRUE(pipeline_->HasVideo());
449 } 447 }
450 448
451 TEST_F(PipelineTest, Seek) { 449 TEST_F(PipelineTest, Seek) {
452 CreateAudioStream(); 450 CreateAudioStream();
453 CreateVideoStream(); 451 CreateVideoStream();
454 MockDemuxerStreamVector streams; 452 MockDemuxerStreamVector streams;
455 streams.push_back(audio_stream()); 453 streams.push_back(audio_stream());
456 streams.push_back(video_stream()); 454 streams.push_back(video_stream());
457 455
458 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); 456 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
459 InitializeAudioDecoder(audio_stream()); 457 InitializeAudioDecoder(audio_stream());
460 InitializeAudioRenderer(); 458 InitializeAudioRenderer();
461 InitializeVideoDecoder(video_stream()); 459 InitializeVideoRenderer(video_stream());
462 InitializeVideoRenderer();
463 460
464 // Initialize then seek! 461 // Initialize then seek!
465 InitializePipeline(PIPELINE_OK); 462 InitializePipeline(PIPELINE_OK);
466 463
467 // Every filter should receive a call to Seek(). 464 // Every filter should receive a call to Seek().
468 base::TimeDelta expected = base::TimeDelta::FromSeconds(2000); 465 base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
469 ExpectSeek(expected); 466 ExpectSeek(expected);
470 DoSeek(expected); 467 DoSeek(expected);
471 } 468 }
472 469
(...skipping 15 matching lines...) Expand all
488 pipeline_->SetVolume(expected); 485 pipeline_->SetVolume(expected);
489 } 486 }
490 487
491 TEST_F(PipelineTest, Properties) { 488 TEST_F(PipelineTest, Properties) {
492 CreateVideoStream(); 489 CreateVideoStream();
493 MockDemuxerStreamVector streams; 490 MockDemuxerStreamVector streams;
494 streams.push_back(video_stream()); 491 streams.push_back(video_stream());
495 492
496 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); 493 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
497 InitializeDemuxer(&streams, kDuration); 494 InitializeDemuxer(&streams, kDuration);
498 InitializeVideoDecoder(video_stream()); 495 InitializeVideoRenderer(video_stream());
499 InitializeVideoRenderer();
500 496
501 InitializePipeline(PIPELINE_OK); 497 InitializePipeline(PIPELINE_OK);
502 EXPECT_TRUE(pipeline_->IsInitialized()); 498 EXPECT_TRUE(pipeline_->IsInitialized());
503 EXPECT_EQ(kDuration.ToInternalValue(), 499 EXPECT_EQ(kDuration.ToInternalValue(),
504 pipeline_->GetMediaDuration().ToInternalValue()); 500 pipeline_->GetMediaDuration().ToInternalValue());
505 EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes()); 501 EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes());
506 EXPECT_FALSE(pipeline_->DidLoadingProgress()); 502 EXPECT_FALSE(pipeline_->DidLoadingProgress());
507 } 503 }
508 504
509 TEST_F(PipelineTest, GetBufferedTimeRanges) { 505 TEST_F(PipelineTest, GetBufferedTimeRanges) {
510 CreateVideoStream(); 506 CreateVideoStream();
511 MockDemuxerStreamVector streams; 507 MockDemuxerStreamVector streams;
512 streams.push_back(video_stream()); 508 streams.push_back(video_stream());
513 509
514 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); 510 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
515 InitializeDemuxer(&streams, kDuration); 511 InitializeDemuxer(&streams, kDuration);
516 InitializeVideoDecoder(video_stream()); 512 InitializeVideoRenderer(video_stream());
517 InitializeVideoRenderer();
518 513
519 InitializePipeline(PIPELINE_OK); 514 InitializePipeline(PIPELINE_OK);
520 EXPECT_TRUE(pipeline_->IsInitialized()); 515 EXPECT_TRUE(pipeline_->IsInitialized());
521 516
522 EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size()); 517 EXPECT_EQ(0u, pipeline_->GetBufferedTimeRanges().size());
523 518
524 EXPECT_FALSE(pipeline_->DidLoadingProgress()); 519 EXPECT_FALSE(pipeline_->DidLoadingProgress());
525 pipeline_->AddBufferedByteRange(0, kTotalBytes / 8); 520 pipeline_->AddBufferedByteRange(0, kTotalBytes / 8);
526 EXPECT_TRUE(pipeline_->DidLoadingProgress()); 521 EXPECT_TRUE(pipeline_->DidLoadingProgress());
527 EXPECT_FALSE(pipeline_->DidLoadingProgress()); 522 EXPECT_FALSE(pipeline_->DidLoadingProgress());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 TEST_F(PipelineTest, DisableAudioRenderer) { 557 TEST_F(PipelineTest, DisableAudioRenderer) {
563 CreateAudioStream(); 558 CreateAudioStream();
564 CreateVideoStream(); 559 CreateVideoStream();
565 MockDemuxerStreamVector streams; 560 MockDemuxerStreamVector streams;
566 streams.push_back(audio_stream()); 561 streams.push_back(audio_stream());
567 streams.push_back(video_stream()); 562 streams.push_back(video_stream());
568 563
569 InitializeDemuxer(&streams); 564 InitializeDemuxer(&streams);
570 InitializeAudioDecoder(audio_stream()); 565 InitializeAudioDecoder(audio_stream());
571 InitializeAudioRenderer(); 566 InitializeAudioRenderer();
572 InitializeVideoDecoder(video_stream()); 567 InitializeVideoRenderer(video_stream());
573 InitializeVideoRenderer();
574 568
575 InitializePipeline(PIPELINE_OK); 569 InitializePipeline(PIPELINE_OK);
576 EXPECT_TRUE(pipeline_->IsInitialized()); 570 EXPECT_TRUE(pipeline_->IsInitialized());
577 EXPECT_TRUE(pipeline_->HasAudio()); 571 EXPECT_TRUE(pipeline_->HasAudio());
578 EXPECT_TRUE(pipeline_->HasVideo()); 572 EXPECT_TRUE(pipeline_->HasVideo());
579 573
580 EXPECT_CALL(*mocks_->demuxer(), OnAudioRendererDisabled()); 574 EXPECT_CALL(*mocks_->demuxer(), OnAudioRendererDisabled());
581 pipeline_->OnAudioDisabled(); 575 pipeline_->OnAudioDisabled();
582 576
583 // Verify that ended event is fired when video ends. 577 // Verify that ended event is fired when video ends.
584 EXPECT_CALL(*mocks_->video_renderer(), HasEnded()) 578 EXPECT_CALL(*mocks_->video_renderer(), HasEnded())
585 .WillOnce(Return(true)); 579 .WillOnce(Return(true));
586 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK)); 580 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK));
587 pipeline_->OnRendererEnded(); 581 pipeline_->OnRendererEnded();
588 } 582 }
589 583
590 TEST_F(PipelineTest, DisableAudioRendererDuringInit) { 584 TEST_F(PipelineTest, DisableAudioRendererDuringInit) {
591 CreateAudioStream(); 585 CreateAudioStream();
592 CreateVideoStream(); 586 CreateVideoStream();
593 MockDemuxerStreamVector streams; 587 MockDemuxerStreamVector streams;
594 streams.push_back(audio_stream()); 588 streams.push_back(audio_stream());
595 streams.push_back(video_stream()); 589 streams.push_back(video_stream());
596 590
597 InitializeDemuxer(&streams); 591 InitializeDemuxer(&streams);
598 InitializeAudioDecoder(audio_stream()); 592 InitializeAudioDecoder(audio_stream());
599 InitializeAudioRenderer(true); 593 InitializeAudioRenderer(true);
600 InitializeVideoDecoder(video_stream()); 594 InitializeVideoRenderer(video_stream());
601 InitializeVideoRenderer();
602 595
603 EXPECT_CALL(*mocks_->demuxer(), 596 EXPECT_CALL(*mocks_->demuxer(),
604 OnAudioRendererDisabled()); 597 OnAudioRendererDisabled());
605 598
606 InitializePipeline(PIPELINE_OK); 599 InitializePipeline(PIPELINE_OK);
607 EXPECT_TRUE(pipeline_->IsInitialized()); 600 EXPECT_TRUE(pipeline_->IsInitialized());
608 EXPECT_FALSE(pipeline_->HasAudio()); 601 EXPECT_FALSE(pipeline_->HasAudio());
609 EXPECT_TRUE(pipeline_->HasVideo()); 602 EXPECT_TRUE(pipeline_->HasVideo());
610 603
611 // Verify that ended event is fired when video ends. 604 // Verify that ended event is fired when video ends.
612 EXPECT_CALL(*mocks_->video_renderer(), HasEnded()) 605 EXPECT_CALL(*mocks_->video_renderer(), HasEnded())
613 .WillOnce(Return(true)); 606 .WillOnce(Return(true));
614 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK)); 607 EXPECT_CALL(callbacks_, OnEnded(PIPELINE_OK));
615 pipeline_->OnRendererEnded(); 608 pipeline_->OnRendererEnded();
616 } 609 }
617 610
618 TEST_F(PipelineTest, EndedCallback) { 611 TEST_F(PipelineTest, EndedCallback) {
619 CreateAudioStream(); 612 CreateAudioStream();
620 CreateVideoStream(); 613 CreateVideoStream();
621 MockDemuxerStreamVector streams; 614 MockDemuxerStreamVector streams;
622 streams.push_back(audio_stream()); 615 streams.push_back(audio_stream());
623 streams.push_back(video_stream()); 616 streams.push_back(video_stream());
624 617
625 InitializeDemuxer(&streams); 618 InitializeDemuxer(&streams);
626 InitializeAudioDecoder(audio_stream()); 619 InitializeAudioDecoder(audio_stream());
627 InitializeAudioRenderer(); 620 InitializeAudioRenderer();
628 InitializeVideoDecoder(video_stream()); 621 InitializeVideoRenderer(video_stream());
629 InitializeVideoRenderer();
630 InitializePipeline(PIPELINE_OK); 622 InitializePipeline(PIPELINE_OK);
631 623
632 // Due to short circuit evaluation we only need to test a subset of cases. 624 // Due to short circuit evaluation we only need to test a subset of cases.
633 InSequence s; 625 InSequence s;
634 EXPECT_CALL(*mocks_->audio_renderer(), HasEnded()) 626 EXPECT_CALL(*mocks_->audio_renderer(), HasEnded())
635 .WillOnce(Return(false)); 627 .WillOnce(Return(false));
636 pipeline_->OnRendererEnded(); 628 pipeline_->OnRendererEnded();
637 629
638 EXPECT_CALL(*mocks_->audio_renderer(), HasEnded()) 630 EXPECT_CALL(*mocks_->audio_renderer(), HasEnded())
639 .WillOnce(Return(true)); 631 .WillOnce(Return(true));
(...skipping 24 matching lines...) Expand all
664 streams.push_back(audio_stream()); 656 streams.push_back(audio_stream());
665 streams.push_back(video_stream()); 657 streams.push_back(video_stream());
666 658
667 // Replace the clock so we can simulate wallclock time advancing w/o using 659 // Replace the clock so we can simulate wallclock time advancing w/o using
668 // Sleep(). 660 // Sleep().
669 pipeline_->SetClockForTesting(new Clock(&StaticClockFunction)); 661 pipeline_->SetClockForTesting(new Clock(&StaticClockFunction));
670 662
671 InitializeDemuxer(&streams, duration); 663 InitializeDemuxer(&streams, duration);
672 InitializeAudioDecoder(audio_stream()); 664 InitializeAudioDecoder(audio_stream());
673 InitializeAudioRenderer(); 665 InitializeAudioRenderer();
674 InitializeVideoDecoder(video_stream()); 666 InitializeVideoRenderer(video_stream());
675 InitializeVideoRenderer();
676 InitializePipeline(PIPELINE_OK); 667 InitializePipeline(PIPELINE_OK);
677 668
678 EXPECT_EQ(0, pipeline_->GetMediaTime().ToInternalValue()); 669 EXPECT_EQ(0, pipeline_->GetMediaTime().ToInternalValue());
679 670
680 float playback_rate = 1.0f; 671 float playback_rate = 1.0f;
681 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate)); 672 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate));
682 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(playback_rate)); 673 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(playback_rate));
683 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate)); 674 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate));
684 pipeline_->SetPlaybackRate(playback_rate); 675 pipeline_->SetPlaybackRate(playback_rate);
685 message_loop_.RunAllPending(); 676 message_loop_.RunAllPending();
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
809 message_loop_.RunAllPending(); 800 message_loop_.RunAllPending();
810 } 801 }
811 802
812 TEST_F(PipelineTest, StartTimeIsZero) { 803 TEST_F(PipelineTest, StartTimeIsZero) {
813 CreateVideoStream(); 804 CreateVideoStream();
814 MockDemuxerStreamVector streams; 805 MockDemuxerStreamVector streams;
815 streams.push_back(video_stream()); 806 streams.push_back(video_stream());
816 807
817 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); 808 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
818 InitializeDemuxer(&streams, kDuration); 809 InitializeDemuxer(&streams, kDuration);
819 InitializeVideoDecoder(video_stream()); 810 InitializeVideoRenderer(video_stream());
820 InitializeVideoRenderer();
821 811
822 InitializePipeline(PIPELINE_OK); 812 InitializePipeline(PIPELINE_OK);
823 EXPECT_TRUE(pipeline_->IsInitialized()); 813 EXPECT_TRUE(pipeline_->IsInitialized());
824 EXPECT_FALSE(pipeline_->HasAudio()); 814 EXPECT_FALSE(pipeline_->HasAudio());
825 EXPECT_TRUE(pipeline_->HasVideo()); 815 EXPECT_TRUE(pipeline_->HasVideo());
826 816
827 EXPECT_EQ(base::TimeDelta(), pipeline_->GetMediaTime()); 817 EXPECT_EQ(base::TimeDelta(), pipeline_->GetMediaTime());
828 } 818 }
829 819
830 TEST_F(PipelineTest, StartTimeIsNonZero) { 820 TEST_F(PipelineTest, StartTimeIsNonZero) {
831 const base::TimeDelta kStartTime = base::TimeDelta::FromSeconds(4); 821 const base::TimeDelta kStartTime = base::TimeDelta::FromSeconds(4);
832 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); 822 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
833 823
834 EXPECT_CALL(*mocks_->demuxer(), GetStartTime()) 824 EXPECT_CALL(*mocks_->demuxer(), GetStartTime())
835 .WillRepeatedly(Return(kStartTime)); 825 .WillRepeatedly(Return(kStartTime));
836 826
837 CreateVideoStream(); 827 CreateVideoStream();
838 MockDemuxerStreamVector streams; 828 MockDemuxerStreamVector streams;
839 streams.push_back(video_stream()); 829 streams.push_back(video_stream());
840 830
841 InitializeDemuxer(&streams, kDuration); 831 InitializeDemuxer(&streams, kDuration);
842 InitializeVideoDecoder(video_stream()); 832 InitializeVideoRenderer(video_stream());
843 InitializeVideoRenderer();
844 833
845 InitializePipeline(PIPELINE_OK); 834 InitializePipeline(PIPELINE_OK);
846 EXPECT_TRUE(pipeline_->IsInitialized()); 835 EXPECT_TRUE(pipeline_->IsInitialized());
847 EXPECT_FALSE(pipeline_->HasAudio()); 836 EXPECT_FALSE(pipeline_->HasAudio());
848 EXPECT_TRUE(pipeline_->HasVideo()); 837 EXPECT_TRUE(pipeline_->HasVideo());
849 838
850 EXPECT_EQ(kStartTime, pipeline_->GetMediaTime()); 839 EXPECT_EQ(kStartTime, pipeline_->GetMediaTime());
851 } 840 }
852 841
853 static void RunTimeCB(const AudioRenderer::TimeCB& time_cb, 842 static void RunTimeCB(const AudioRenderer::TimeCB& time_cb,
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 946 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
958 .WillOnce(RunClosure()); 947 .WillOnce(RunClosure());
959 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) 948 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
960 .WillOnce(RunClosure()); 949 .WillOnce(RunClosure());
961 950
962 InitializePipeline(expected_status); 951 InitializePipeline(expected_status);
963 EXPECT_FALSE(pipeline_->IsInitialized()); 952 EXPECT_FALSE(pipeline_->IsInitialized());
964 EXPECT_TRUE(pipeline_->HasAudio()); 953 EXPECT_TRUE(pipeline_->HasAudio());
965 } 954 }
966 955
967 TEST_F(PipelineTest, InitFailure_VideoDecoder) {
968 CreateAudioStream();
969 CreateVideoStream();
970 MockDemuxerStreamVector streams;
971 streams.push_back(audio_stream());
972 streams.push_back(video_stream());
973
974 InitializeDemuxer(&streams);
975 InitializeAudioDecoder(audio_stream());
976 InitializeAudioRenderer();
977
978 PipelineStatus expected_status = PIPELINE_ERROR_DECODE;
979 scoped_refptr<DemuxerStream> stream = streams[1];
980 EXPECT_CALL(*mocks_->video_decoder(),
981 Initialize(stream, _, _))
982 .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
983
984 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
985 .WillOnce(RunClosure());
986 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
987 .WillOnce(RunClosure());
988
989 InitializePipeline(expected_status);
990 EXPECT_FALSE(pipeline_->IsInitialized());
991 EXPECT_TRUE(pipeline_->HasAudio());
992 EXPECT_FALSE(pipeline_->HasVideo());
993 }
994
995 TEST_F(PipelineTest, InitFailure_VideoRenderer) { 956 TEST_F(PipelineTest, InitFailure_VideoRenderer) {
996 CreateAudioStream(); 957 CreateAudioStream();
997 CreateVideoStream(); 958 CreateVideoStream();
998 MockDemuxerStreamVector streams; 959 MockDemuxerStreamVector streams;
999 streams.push_back(audio_stream()); 960 streams.push_back(audio_stream());
1000 streams.push_back(video_stream()); 961 streams.push_back(video_stream());
1001 962
1002 InitializeDemuxer(&streams); 963 InitializeDemuxer(&streams);
1003 InitializeAudioDecoder(audio_stream()); 964 InitializeAudioDecoder(audio_stream());
1004 InitializeAudioRenderer(); 965 InitializeAudioRenderer();
1005 InitializeVideoDecoder(video_stream());
1006 966
1007 PipelineStatus expected_status = PIPELINE_ERROR_INITIALIZATION_FAILED; 967 PipelineStatus expected_status = PIPELINE_ERROR_INITIALIZATION_FAILED;
968 scoped_refptr<DemuxerStream> stream = streams[1];
1008 EXPECT_CALL(*mocks_->video_renderer(), Initialize( 969 EXPECT_CALL(*mocks_->video_renderer(), Initialize(
1009 scoped_refptr<VideoDecoder>(mocks_->video_decoder()), 970 stream, _, _, _, _, _, _, _, _, _))
1010 _, _, _, _, _, _, _, _)) 971 .WillOnce(RunPipelineStatusCB2WithStatus(expected_status));
1011 .WillOnce(RunPipelineStatusCB1WithStatus(expected_status));
1012 972
1013 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 973 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
1014 .WillOnce(RunClosure()); 974 .WillOnce(RunClosure());
1015 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) 975 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
1016 .WillOnce(RunClosure()); 976 .WillOnce(RunClosure());
1017 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)) 977 EXPECT_CALL(*mocks_->video_renderer(), Stop(_))
1018 .WillOnce(RunClosure()); 978 .WillOnce(RunClosure());
1019 979
1020 InitializePipeline(expected_status); 980 InitializePipeline(expected_status);
1021 EXPECT_FALSE(pipeline_->IsInitialized()); 981 EXPECT_FALSE(pipeline_->IsInitialized());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1070 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(0)); 1030 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(0));
1071 } 1031 }
1072 1032
1073 // Test that different-thread, some-delay callback (the expected common case) 1033 // Test that different-thread, some-delay callback (the expected common case)
1074 // works correctly. 1034 // works correctly.
1075 TEST(PipelineStatusNotificationTest, DelayedCallback) { 1035 TEST(PipelineStatusNotificationTest, DelayedCallback) {
1076 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(20)); 1036 TestPipelineStatusNotification(base::TimeDelta::FromMilliseconds(20));
1077 } 1037 }
1078 1038
1079 } // namespace media 1039 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698