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

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

Issue 10823261: Remove Pipeline::IsInitialized() and replace stop_pending_ with checks for stop_cb_. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: fix .h 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
« media/base/pipeline.h ('K') | « media/base/pipeline.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
OLDNEW
« media/base/pipeline.h ('K') | « media/base/pipeline.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698