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

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

Issue 6648004: DemuxerFactory is born! (Closed)
Patch Set: Created 9 years, 9 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <string> 5 #include <string>
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/stl_util-inl.h" 8 #include "base/stl_util-inl.h"
9 #include "media/base/pipeline_impl.h" 9 #include "media/base/pipeline_impl.h"
10 #include "media/base/media_format.h" 10 #include "media/base/media_format.h"
11 #include "media/base/filters.h" 11 #include "media/base/filters.h"
12 #include "media/base/filter_host.h" 12 #include "media/base/filter_host.h"
13 #include "media/base/mock_callback.h" 13 #include "media/base/mock_callback.h"
14 #include "media/base/mock_filters.h" 14 #include "media/base/mock_filters.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 16
17 using ::testing::_; 17 using ::testing::_;
18 using ::testing::DeleteArg; 18 using ::testing::DeleteArg;
19 using ::testing::InSequence; 19 using ::testing::InSequence;
20 using ::testing::Invoke; 20 using ::testing::Invoke;
21 using ::testing::InvokeArgument;
acolwell GONE FROM CHROMIUM 2011/03/08 21:48:09 Is this still needed?
Ami GONE FROM CHROMIUM 2011/03/08 22:44:48 Nope, deleted.
21 using ::testing::Mock; 22 using ::testing::Mock;
22 using ::testing::NotNull; 23 using ::testing::NotNull;
23 using ::testing::Return; 24 using ::testing::Return;
24 using ::testing::ReturnRef; 25 using ::testing::ReturnRef;
25 using ::testing::StrictMock; 26 using ::testing::StrictMock;
26 27
27 namespace { 28 namespace {
28 29
29 // Total bytes of the data source. 30 // Total bytes of the data source.
30 const int kTotalBytes = 1024; 31 const int kTotalBytes = 1024;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 &CallbackHelper::OnStop)); 84 &CallbackHelper::OnStop));
84 message_loop_.RunAllPending(); 85 message_loop_.RunAllPending();
85 86
86 // Free allocated media formats (if any). 87 // Free allocated media formats (if any).
87 STLDeleteElements(&stream_media_formats_); 88 STLDeleteElements(&stream_media_formats_);
88 89
89 mocks_.reset(); 90 mocks_.reset();
90 } 91 }
91 92
92 protected: 93 protected:
93 // Sets up expectations to allow the data source to initialize.
94 void InitializeDataSource() {
95 mocks_->data_source()->SetTotalAndBufferedBytes(kTotalBytes,
96 kBufferedBytes);
97
98 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(0.0f));
99 EXPECT_CALL(*mocks_->data_source(), Seek(base::TimeDelta(), NotNull()))
100 .WillOnce(Invoke(&RunFilterCallback));
101 EXPECT_CALL(*mocks_->data_source(), Stop(NotNull()))
102 .WillOnce(Invoke(&RunStopFilterCallback));
103 }
104
105 // Sets up expectations to allow the demuxer to initialize. 94 // Sets up expectations to allow the demuxer to initialize.
106 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; 95 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector;
107 void InitializeDemuxer(MockDemuxerStreamVector* streams, 96 void InitializeDemuxer(MockDemuxerStreamVector* streams,
108 const base::TimeDelta& duration) { 97 const base::TimeDelta& duration) {
109 EXPECT_CALL(*mocks_->demuxer(), 98 mocks_->demuxer()->SetTotalAndBufferedBytesAndDuration(
110 Initialize(mocks_->data_source(), NotNull())) 99 kTotalBytes, kBufferedBytes, duration);
111 .WillOnce(DoAll(SetDuration(mocks_->data_source(), duration),
112 Invoke(&RunFilterCallback)));
113 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) 100 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams())
114 .WillRepeatedly(Return(streams->size())); 101 .WillRepeatedly(Return(streams->size()));
115 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); 102 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
116 EXPECT_CALL(*mocks_->demuxer(), Seek(base::TimeDelta(), NotNull())) 103 EXPECT_CALL(*mocks_->demuxer(), Seek(base::TimeDelta(), NotNull()))
117 .WillOnce(Invoke(&RunFilterCallback)); 104 .WillOnce(Invoke(&RunFilterCallback));
118 EXPECT_CALL(*mocks_->demuxer(), Stop(NotNull())) 105 EXPECT_CALL(*mocks_->demuxer(), Stop(NotNull()))
119 .WillOnce(Invoke(&RunStopFilterCallback)); 106 .WillOnce(Invoke(&RunStopFilterCallback));
120 107
121 // Configure the demuxer to return the streams. 108 // Configure the demuxer to return the streams.
122 for (size_t i = 0; i < streams->size(); ++i) { 109 for (size_t i = 0; i < streams->size(); ++i) {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 MockDemuxerStream* audio_stream() { 212 MockDemuxerStream* audio_stream() {
226 return audio_stream_; 213 return audio_stream_;
227 } 214 }
228 215
229 MockDemuxerStream* video_stream() { 216 MockDemuxerStream* video_stream() {
230 return video_stream_; 217 return video_stream_;
231 } 218 }
232 219
233 void ExpectSeek(const base::TimeDelta& seek_time) { 220 void ExpectSeek(const base::TimeDelta& seek_time) {
234 // Every filter should receive a call to Seek(). 221 // Every filter should receive a call to Seek().
235 EXPECT_CALL(*mocks_->data_source(), Seek(seek_time, NotNull()))
236 .WillOnce(Invoke(&RunFilterCallback));
237 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, NotNull())) 222 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, NotNull()))
238 .WillOnce(Invoke(&RunFilterCallback)); 223 .WillOnce(Invoke(&RunFilterCallback));
239 224
240 if (audio_stream_) { 225 if (audio_stream_) {
241 EXPECT_CALL(*mocks_->audio_decoder(), Seek(seek_time, NotNull())) 226 EXPECT_CALL(*mocks_->audio_decoder(), Seek(seek_time, NotNull()))
242 .WillOnce(Invoke(&RunFilterCallback)); 227 .WillOnce(Invoke(&RunFilterCallback));
243 EXPECT_CALL(*mocks_->audio_renderer(), Seek(seek_time, NotNull())) 228 EXPECT_CALL(*mocks_->audio_renderer(), Seek(seek_time, NotNull()))
244 .WillOnce(Invoke(&RunFilterCallback)); 229 .WillOnce(Invoke(&RunFilterCallback));
245 } 230 }
246 231
247 if (video_stream_) { 232 if (video_stream_) {
248 EXPECT_CALL(*mocks_->video_decoder(), Seek(seek_time, NotNull())) 233 EXPECT_CALL(*mocks_->video_decoder(), Seek(seek_time, NotNull()))
249 .WillOnce(Invoke(&RunFilterCallback)); 234 .WillOnce(Invoke(&RunFilterCallback));
250 EXPECT_CALL(*mocks_->video_renderer(), Seek(seek_time, NotNull())) 235 EXPECT_CALL(*mocks_->video_renderer(), Seek(seek_time, NotNull()))
251 .WillOnce(Invoke(&RunFilterCallback)); 236 .WillOnce(Invoke(&RunFilterCallback));
252 } 237 }
253 238
254 // We expect a successful seek callback. 239 // We expect a successful seek callback.
255 EXPECT_CALL(callbacks_, OnSeek()); 240 EXPECT_CALL(callbacks_, OnSeek());
256 241
257 } 242 }
258 243
259 void DoSeek(const base::TimeDelta& seek_time) { 244 void DoSeek(const base::TimeDelta& seek_time) {
260 pipeline_->Seek(seek_time, 245 pipeline_->Seek(seek_time,
261 NewCallback(reinterpret_cast<CallbackHelper*>(&callbacks_), 246 NewCallback(reinterpret_cast<CallbackHelper*>(&callbacks_),
262 &CallbackHelper::OnSeek)); 247 &CallbackHelper::OnSeek));
263 248
264 // We expect the time to be updated only after the seek has completed. 249 // We expect the time to be updated only after the seek has completed.
265 EXPECT_TRUE(seek_time != pipeline_->GetCurrentTime()); 250 EXPECT_NE(seek_time, pipeline_->GetCurrentTime());
266 message_loop_.RunAllPending(); 251 message_loop_.RunAllPending();
267 EXPECT_TRUE(seek_time == pipeline_->GetCurrentTime()); 252 EXPECT_EQ(seek_time, pipeline_->GetCurrentTime());
268 } 253 }
269 254
270 // Fixture members. 255 // Fixture members.
271 StrictMock<CallbackHelper> callbacks_; 256 StrictMock<CallbackHelper> callbacks_;
272 MessageLoop message_loop_; 257 MessageLoop message_loop_;
273 scoped_refptr<PipelineImpl> pipeline_; 258 scoped_refptr<PipelineImpl> pipeline_;
274 scoped_ptr<media::MockFilterCollection> mocks_; 259 scoped_ptr<media::MockFilterCollection> mocks_;
275 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream_; 260 scoped_refptr<StrictMock<MockDemuxerStream> > audio_stream_;
276 scoped_refptr<StrictMock<MockDemuxerStream> > video_stream_; 261 scoped_refptr<StrictMock<MockDemuxerStream> > video_stream_;
277 262
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 EXPECT_CALL(callbacks_, OnError()); 363 EXPECT_CALL(callbacks_, OnError());
379 364
380 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); 365 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND);
381 EXPECT_FALSE(pipeline_->IsInitialized()); 366 EXPECT_FALSE(pipeline_->IsInitialized());
382 EXPECT_EQ(PIPELINE_ERROR_URL_NOT_FOUND, pipeline_->GetError()); 367 EXPECT_EQ(PIPELINE_ERROR_URL_NOT_FOUND, pipeline_->GetError());
383 } 368 }
384 369
385 TEST_F(PipelineImplTest, NoStreams) { 370 TEST_F(PipelineImplTest, NoStreams) {
386 // Manually set these expectations because SetPlaybackRate() is not called if 371 // Manually set these expectations because SetPlaybackRate() is not called if
387 // we cannot fully initialize the pipeline. 372 // we cannot fully initialize the pipeline.
388 EXPECT_CALL(*mocks_->data_source(), Stop(NotNull()))
389 .WillOnce(Invoke(&RunStopFilterCallback));
390
391 EXPECT_CALL(*mocks_->demuxer(), Initialize(mocks_->data_source(), NotNull()))
392 .WillOnce(Invoke(&RunFilterCallback));
393 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams()) 373 EXPECT_CALL(*mocks_->demuxer(), GetNumberOfStreams())
394 .WillRepeatedly(Return(0)); 374 .WillRepeatedly(Return(0));
395 EXPECT_CALL(*mocks_->demuxer(), Stop(NotNull())) 375 EXPECT_CALL(*mocks_->demuxer(), Stop(NotNull()))
396 .WillOnce(Invoke(&RunStopFilterCallback)); 376 .WillOnce(Invoke(&RunStopFilterCallback));
397 EXPECT_CALL(callbacks_, OnError()); 377 EXPECT_CALL(callbacks_, OnError());
398 378
399 InitializePipeline(); 379 InitializePipeline();
400 EXPECT_FALSE(pipeline_->IsInitialized()); 380 EXPECT_FALSE(pipeline_->IsInitialized());
401 EXPECT_EQ(PIPELINE_ERROR_COULD_NOT_RENDER, pipeline_->GetError()); 381 EXPECT_EQ(PIPELINE_ERROR_COULD_NOT_RENDER, pipeline_->GetError());
402 } 382 }
403 383
404 TEST_F(PipelineImplTest, AudioStream) { 384 TEST_F(PipelineImplTest, AudioStream) {
405 CreateAudioStream(); 385 CreateAudioStream();
406 MockDemuxerStreamVector streams; 386 MockDemuxerStreamVector streams;
407 streams.push_back(audio_stream()); 387 streams.push_back(audio_stream());
408 388
409 InitializeDataSource();
410 InitializeDemuxer(&streams, base::TimeDelta()); 389 InitializeDemuxer(&streams, base::TimeDelta());
411 InitializeAudioDecoder(audio_stream()); 390 InitializeAudioDecoder(audio_stream());
412 InitializeAudioRenderer(); 391 InitializeAudioRenderer();
413 392
414 InitializePipeline(); 393 InitializePipeline();
415 EXPECT_TRUE(pipeline_->IsInitialized()); 394 EXPECT_TRUE(pipeline_->IsInitialized());
416 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); 395 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError());
417 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); 396 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio));
418 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); 397 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo));
419 } 398 }
420 399
421 TEST_F(PipelineImplTest, VideoStream) { 400 TEST_F(PipelineImplTest, VideoStream) {
422 CreateVideoStream(); 401 CreateVideoStream();
423 MockDemuxerStreamVector streams; 402 MockDemuxerStreamVector streams;
424 streams.push_back(video_stream()); 403 streams.push_back(video_stream());
425 404
426 InitializeDataSource();
427 InitializeDemuxer(&streams, base::TimeDelta()); 405 InitializeDemuxer(&streams, base::TimeDelta());
428 InitializeVideoDecoder(video_stream()); 406 InitializeVideoDecoder(video_stream());
429 InitializeVideoRenderer(); 407 InitializeVideoRenderer();
430 408
431 InitializePipeline(); 409 InitializePipeline();
432 EXPECT_TRUE(pipeline_->IsInitialized()); 410 EXPECT_TRUE(pipeline_->IsInitialized());
433 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); 411 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError());
434 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); 412 EXPECT_FALSE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio));
435 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); 413 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo));
436 } 414 }
437 415
438 TEST_F(PipelineImplTest, AudioVideoStream) { 416 TEST_F(PipelineImplTest, AudioVideoStream) {
439 CreateAudioStream(); 417 CreateAudioStream();
440 CreateVideoStream(); 418 CreateVideoStream();
441 MockDemuxerStreamVector streams; 419 MockDemuxerStreamVector streams;
442 streams.push_back(audio_stream()); 420 streams.push_back(audio_stream());
443 streams.push_back(video_stream()); 421 streams.push_back(video_stream());
444 422
445 InitializeDataSource();
446 InitializeDemuxer(&streams, base::TimeDelta()); 423 InitializeDemuxer(&streams, base::TimeDelta());
447 InitializeAudioDecoder(audio_stream()); 424 InitializeAudioDecoder(audio_stream());
448 InitializeAudioRenderer(); 425 InitializeAudioRenderer();
449 InitializeVideoDecoder(video_stream()); 426 InitializeVideoDecoder(video_stream());
450 InitializeVideoRenderer(); 427 InitializeVideoRenderer();
451 428
452 InitializePipeline(); 429 InitializePipeline();
453 EXPECT_TRUE(pipeline_->IsInitialized()); 430 EXPECT_TRUE(pipeline_->IsInitialized());
454 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); 431 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError());
455 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio)); 432 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeAudio));
456 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo)); 433 EXPECT_TRUE(pipeline_->IsRendered(media::mime_type::kMajorTypeVideo));
457 } 434 }
458 435
459 TEST_F(PipelineImplTest, Seek) { 436 TEST_F(PipelineImplTest, Seek) {
460 CreateAudioStream(); 437 CreateAudioStream();
461 CreateVideoStream(); 438 CreateVideoStream();
462 MockDemuxerStreamVector streams; 439 MockDemuxerStreamVector streams;
463 streams.push_back(audio_stream()); 440 streams.push_back(audio_stream());
464 streams.push_back(video_stream()); 441 streams.push_back(video_stream());
465 442
466 InitializeDataSource();
467 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); 443 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
468 InitializeAudioDecoder(audio_stream()); 444 InitializeAudioDecoder(audio_stream());
469 InitializeAudioRenderer(); 445 InitializeAudioRenderer();
470 InitializeVideoDecoder(video_stream()); 446 InitializeVideoDecoder(video_stream());
471 InitializeVideoRenderer(); 447 InitializeVideoRenderer();
472 448
473 // Every filter should receive a call to Seek(). 449 // Every filter should receive a call to Seek().
474 base::TimeDelta expected = base::TimeDelta::FromSeconds(2000); 450 base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
475 ExpectSeek(expected); 451 ExpectSeek(expected);
476 452
477 // Initialize then seek! 453 // Initialize then seek!
478 InitializePipeline(); 454 InitializePipeline();
479 DoSeek(expected); 455 DoSeek(expected);
480 } 456 }
481 457
482 TEST_F(PipelineImplTest, SetVolume) { 458 TEST_F(PipelineImplTest, SetVolume) {
483 CreateAudioStream(); 459 CreateAudioStream();
484 MockDemuxerStreamVector streams; 460 MockDemuxerStreamVector streams;
485 streams.push_back(audio_stream()); 461 streams.push_back(audio_stream());
486 462
487 InitializeDataSource();
488 InitializeDemuxer(&streams, base::TimeDelta()); 463 InitializeDemuxer(&streams, base::TimeDelta());
489 InitializeAudioDecoder(audio_stream()); 464 InitializeAudioDecoder(audio_stream());
490 InitializeAudioRenderer(); 465 InitializeAudioRenderer();
491 466
492 // The audio renderer should receive a call to SetVolume(). 467 // The audio renderer should receive a call to SetVolume().
493 float expected = 0.5f; 468 float expected = 0.5f;
494 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(expected)); 469 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(expected));
495 470
496 // Initialize then set volume! 471 // Initialize then set volume!
497 InitializePipeline(); 472 InitializePipeline();
498 pipeline_->SetVolume(expected); 473 pipeline_->SetVolume(expected);
499 } 474 }
500 475
501 TEST_F(PipelineImplTest, Properties) { 476 TEST_F(PipelineImplTest, Properties) {
502 CreateVideoStream(); 477 CreateVideoStream();
503 MockDemuxerStreamVector streams; 478 MockDemuxerStreamVector streams;
504 streams.push_back(video_stream()); 479 streams.push_back(video_stream());
505 480
506 InitializeDataSource();
507 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); 481 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
508 InitializeDemuxer(&streams, kDuration); 482 InitializeDemuxer(&streams, kDuration);
509 InitializeVideoDecoder(video_stream()); 483 InitializeVideoDecoder(video_stream());
510 InitializeVideoRenderer(); 484 InitializeVideoRenderer();
511 485
512 InitializePipeline(); 486 InitializePipeline();
513 EXPECT_TRUE(pipeline_->IsInitialized()); 487 EXPECT_TRUE(pipeline_->IsInitialized());
514 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); 488 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError());
515 EXPECT_EQ(kDuration.ToInternalValue(), 489 EXPECT_EQ(kDuration.ToInternalValue(),
516 pipeline_->GetMediaDuration().ToInternalValue()); 490 pipeline_->GetMediaDuration().ToInternalValue());
517 EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes()); 491 EXPECT_EQ(kTotalBytes, pipeline_->GetTotalBytes());
518 EXPECT_EQ(kBufferedBytes, pipeline_->GetBufferedBytes()); 492 EXPECT_EQ(kBufferedBytes, pipeline_->GetBufferedBytes());
519 493
520 // Because kTotalBytes and kBufferedBytes are equal to each other, 494 // Because kTotalBytes and kBufferedBytes are equal to each other,
521 // the entire video should be buffered. 495 // the entire video should be buffered.
522 EXPECT_EQ(kDuration.ToInternalValue(), 496 EXPECT_EQ(kDuration.ToInternalValue(),
523 pipeline_->GetBufferedTime().ToInternalValue()); 497 pipeline_->GetBufferedTime().ToInternalValue());
524 } 498 }
525 499
526 TEST_F(PipelineImplTest, GetBufferedTime) { 500 TEST_F(PipelineImplTest, GetBufferedTime) {
527 CreateVideoStream(); 501 CreateVideoStream();
528 MockDemuxerStreamVector streams; 502 MockDemuxerStreamVector streams;
529 streams.push_back(video_stream()); 503 streams.push_back(video_stream());
530 504
531 InitializeDataSource();
532 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100); 505 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(100);
533 InitializeDemuxer(&streams, kDuration); 506 InitializeDemuxer(&streams, kDuration);
534 InitializeVideoDecoder(video_stream()); 507 InitializeVideoDecoder(video_stream());
535 InitializeVideoRenderer(); 508 InitializeVideoRenderer();
536 509
537 InitializePipeline(); 510 InitializePipeline();
538 EXPECT_TRUE(pipeline_->IsInitialized()); 511 EXPECT_TRUE(pipeline_->IsInitialized());
539 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); 512 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError());
540 513
541 // TODO(vrk): The following mini-test cases are order-dependent, and should 514 // TODO(vrk): The following mini-test cases are order-dependent, and should
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 pipeline_->GetBufferedTime().ToInternalValue()); 564 pipeline_->GetBufferedTime().ToInternalValue());
592 } 565 }
593 566
594 TEST_F(PipelineImplTest, DisableAudioRenderer) { 567 TEST_F(PipelineImplTest, DisableAudioRenderer) {
595 CreateAudioStream(); 568 CreateAudioStream();
596 CreateVideoStream(); 569 CreateVideoStream();
597 MockDemuxerStreamVector streams; 570 MockDemuxerStreamVector streams;
598 streams.push_back(audio_stream()); 571 streams.push_back(audio_stream());
599 streams.push_back(video_stream()); 572 streams.push_back(video_stream());
600 573
601 InitializeDataSource();
602 InitializeDemuxer(&streams, base::TimeDelta()); 574 InitializeDemuxer(&streams, base::TimeDelta());
603 InitializeAudioDecoder(audio_stream()); 575 InitializeAudioDecoder(audio_stream());
604 InitializeAudioRenderer(); 576 InitializeAudioRenderer();
605 InitializeVideoDecoder(video_stream()); 577 InitializeVideoDecoder(video_stream());
606 InitializeVideoRenderer(); 578 InitializeVideoRenderer();
607 579
608 InitializePipeline(); 580 InitializePipeline();
609 EXPECT_TRUE(pipeline_->IsInitialized()); 581 EXPECT_TRUE(pipeline_->IsInitialized());
610 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError()); 582 EXPECT_EQ(PIPELINE_OK, pipeline_->GetError());
611 EXPECT_TRUE(pipeline_->IsRendered(mime_type::kMajorTypeAudio)); 583 EXPECT_TRUE(pipeline_->IsRendered(mime_type::kMajorTypeAudio));
612 EXPECT_TRUE(pipeline_->IsRendered(mime_type::kMajorTypeVideo)); 584 EXPECT_TRUE(pipeline_->IsRendered(mime_type::kMajorTypeVideo));
613 585
614 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(1.0f)) 586 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(1.0f))
615 .WillOnce(DisableAudioRenderer(mocks_->audio_renderer())); 587 .WillOnce(DisableAudioRenderer(mocks_->audio_renderer()));
616 EXPECT_CALL(*mocks_->data_source(),
617 OnAudioRendererDisabled());
618 EXPECT_CALL(*mocks_->demuxer(), 588 EXPECT_CALL(*mocks_->demuxer(),
619 OnAudioRendererDisabled()); 589 OnAudioRendererDisabled());
620 EXPECT_CALL(*mocks_->audio_decoder(), 590 EXPECT_CALL(*mocks_->audio_decoder(),
621 OnAudioRendererDisabled()); 591 OnAudioRendererDisabled());
622 EXPECT_CALL(*mocks_->audio_renderer(), 592 EXPECT_CALL(*mocks_->audio_renderer(),
623 OnAudioRendererDisabled()); 593 OnAudioRendererDisabled());
624 EXPECT_CALL(*mocks_->video_decoder(), 594 EXPECT_CALL(*mocks_->video_decoder(),
625 OnAudioRendererDisabled()); 595 OnAudioRendererDisabled());
626 EXPECT_CALL(*mocks_->video_renderer(), 596 EXPECT_CALL(*mocks_->video_renderer(),
627 OnAudioRendererDisabled()); 597 OnAudioRendererDisabled());
628 598
629 mocks_->audio_renderer()->SetPlaybackRate(1.0f); 599 mocks_->audio_renderer()->SetPlaybackRate(1.0f);
630 600
631 // Verify that ended event is fired when video ends. 601 // Verify that ended event is fired when video ends.
632 EXPECT_CALL(*mocks_->video_renderer(), HasEnded()) 602 EXPECT_CALL(*mocks_->video_renderer(), HasEnded())
633 .WillOnce(Return(true)); 603 .WillOnce(Return(true));
634 EXPECT_CALL(callbacks_, OnEnded()); 604 EXPECT_CALL(callbacks_, OnEnded());
635 FilterHost* host = pipeline_; 605 FilterHost* host = pipeline_;
636 host->NotifyEnded(); 606 host->NotifyEnded();
637 } 607 }
638 608
639 TEST_F(PipelineImplTest, DisableAudioRendererDuringInit) { 609 TEST_F(PipelineImplTest, DisableAudioRendererDuringInit) {
640 CreateAudioStream(); 610 CreateAudioStream();
641 CreateVideoStream(); 611 CreateVideoStream();
642 MockDemuxerStreamVector streams; 612 MockDemuxerStreamVector streams;
643 streams.push_back(audio_stream()); 613 streams.push_back(audio_stream());
644 streams.push_back(video_stream()); 614 streams.push_back(video_stream());
645 615
646 InitializeDataSource();
647 InitializeDemuxer(&streams, base::TimeDelta()); 616 InitializeDemuxer(&streams, base::TimeDelta());
648 InitializeAudioDecoder(audio_stream()); 617 InitializeAudioDecoder(audio_stream());
649 InitializeAudioRenderer(true); 618 InitializeAudioRenderer(true);
650 InitializeVideoDecoder(video_stream()); 619 InitializeVideoDecoder(video_stream());
651 InitializeVideoRenderer(); 620 InitializeVideoRenderer();
652 621
653 EXPECT_CALL(*mocks_->data_source(),
654 OnAudioRendererDisabled());
655 EXPECT_CALL(*mocks_->demuxer(), 622 EXPECT_CALL(*mocks_->demuxer(),
656 OnAudioRendererDisabled()); 623 OnAudioRendererDisabled());
657 EXPECT_CALL(*mocks_->audio_decoder(), 624 EXPECT_CALL(*mocks_->audio_decoder(),
658 OnAudioRendererDisabled()); 625 OnAudioRendererDisabled());
659 EXPECT_CALL(*mocks_->audio_renderer(), 626 EXPECT_CALL(*mocks_->audio_renderer(),
660 OnAudioRendererDisabled()); 627 OnAudioRendererDisabled());
661 EXPECT_CALL(*mocks_->video_decoder(), 628 EXPECT_CALL(*mocks_->video_decoder(),
662 OnAudioRendererDisabled()); 629 OnAudioRendererDisabled());
663 EXPECT_CALL(*mocks_->video_renderer(), 630 EXPECT_CALL(*mocks_->video_renderer(),
664 OnAudioRendererDisabled()); 631 OnAudioRendererDisabled());
(...skipping 12 matching lines...) Expand all
677 host->NotifyEnded(); 644 host->NotifyEnded();
678 } 645 }
679 646
680 TEST_F(PipelineImplTest, EndedCallback) { 647 TEST_F(PipelineImplTest, EndedCallback) {
681 CreateAudioStream(); 648 CreateAudioStream();
682 CreateVideoStream(); 649 CreateVideoStream();
683 MockDemuxerStreamVector streams; 650 MockDemuxerStreamVector streams;
684 streams.push_back(audio_stream()); 651 streams.push_back(audio_stream());
685 streams.push_back(video_stream()); 652 streams.push_back(video_stream());
686 653
687 InitializeDataSource();
688 InitializeDemuxer(&streams, base::TimeDelta()); 654 InitializeDemuxer(&streams, base::TimeDelta());
689 InitializeAudioDecoder(audio_stream()); 655 InitializeAudioDecoder(audio_stream());
690 InitializeAudioRenderer(); 656 InitializeAudioRenderer();
691 InitializeVideoDecoder(video_stream()); 657 InitializeVideoDecoder(video_stream());
692 InitializeVideoRenderer(); 658 InitializeVideoRenderer();
693 InitializePipeline(); 659 InitializePipeline();
694 660
695 // For convenience to simulate filters calling the methods. 661 // For convenience to simulate filters calling the methods.
696 FilterHost* host = pipeline_; 662 FilterHost* host = pipeline_;
697 663
(...skipping 25 matching lines...) Expand all
723 689
724 TEST_F(PipelineImplTest, AudioStreamShorterThanVideo) { 690 TEST_F(PipelineImplTest, AudioStreamShorterThanVideo) {
725 base::TimeDelta duration = base::TimeDelta::FromSeconds(10); 691 base::TimeDelta duration = base::TimeDelta::FromSeconds(10);
726 692
727 CreateAudioStream(); 693 CreateAudioStream();
728 CreateVideoStream(); 694 CreateVideoStream();
729 MockDemuxerStreamVector streams; 695 MockDemuxerStreamVector streams;
730 streams.push_back(audio_stream()); 696 streams.push_back(audio_stream());
731 streams.push_back(video_stream()); 697 streams.push_back(video_stream());
732 698
733 InitializeDataSource();
734 InitializeDemuxer(&streams, duration); 699 InitializeDemuxer(&streams, duration);
735 InitializeAudioDecoder(audio_stream()); 700 InitializeAudioDecoder(audio_stream());
736 InitializeAudioRenderer(); 701 InitializeAudioRenderer();
737 InitializeVideoDecoder(video_stream()); 702 InitializeVideoDecoder(video_stream());
738 InitializeVideoRenderer(); 703 InitializeVideoRenderer();
739 InitializePipeline(); 704 InitializePipeline();
740 705
741 // For convenience to simulate filters calling the methods. 706 // For convenience to simulate filters calling the methods.
742 FilterHost* host = pipeline_; 707 FilterHost* host = pipeline_;
743 708
744 // Replace the clock so we can simulate wallclock time advancing w/o using 709 // Replace the clock so we can simulate wallclock time advancing w/o using
745 // Sleep(). 710 // Sleep().
746 pipeline_->SetClockForTesting(new Clock(&StaticClockFunction)); 711 pipeline_->SetClockForTesting(new Clock(&StaticClockFunction));
747 712
748 EXPECT_EQ(0, host->GetTime().ToInternalValue()); 713 EXPECT_EQ(0, host->GetTime().ToInternalValue());
749 714
750 float playback_rate = 1.0f; 715 float playback_rate = 1.0f;
751 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(playback_rate));
752 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate)); 716 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate));
753 EXPECT_CALL(*mocks_->video_decoder(), SetPlaybackRate(playback_rate)); 717 EXPECT_CALL(*mocks_->video_decoder(), SetPlaybackRate(playback_rate));
754 EXPECT_CALL(*mocks_->audio_decoder(), SetPlaybackRate(playback_rate)); 718 EXPECT_CALL(*mocks_->audio_decoder(), SetPlaybackRate(playback_rate));
755 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(playback_rate)); 719 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(playback_rate));
756 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate)); 720 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate));
757 pipeline_->SetPlaybackRate(playback_rate); 721 pipeline_->SetPlaybackRate(playback_rate);
758 message_loop_.RunAllPending(); 722 message_loop_.RunAllPending();
759 723
760 InSequence s; 724 InSequence s;
761 725
(...skipping 25 matching lines...) Expand all
787 .WillOnce(Return(true)); 751 .WillOnce(Return(true));
788 EXPECT_CALL(callbacks_, OnEnded()); 752 EXPECT_CALL(callbacks_, OnEnded());
789 host->NotifyEnded(); 753 host->NotifyEnded();
790 } 754 }
791 755
792 TEST_F(PipelineImplTest, ErrorDuringSeek) { 756 TEST_F(PipelineImplTest, ErrorDuringSeek) {
793 CreateAudioStream(); 757 CreateAudioStream();
794 MockDemuxerStreamVector streams; 758 MockDemuxerStreamVector streams;
795 streams.push_back(audio_stream()); 759 streams.push_back(audio_stream());
796 760
797 InitializeDataSource();
798 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(10)); 761 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(10));
799 InitializeAudioDecoder(audio_stream()); 762 InitializeAudioDecoder(audio_stream());
800 InitializeAudioRenderer(); 763 InitializeAudioRenderer();
801 InitializePipeline(); 764 InitializePipeline();
802 765
803 float playback_rate = 1.0f; 766 float playback_rate = 1.0f;
804 EXPECT_CALL(*mocks_->data_source(), SetPlaybackRate(playback_rate));
805 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate)); 767 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate));
806 EXPECT_CALL(*mocks_->audio_decoder(), SetPlaybackRate(playback_rate)); 768 EXPECT_CALL(*mocks_->audio_decoder(), SetPlaybackRate(playback_rate));
807 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate)); 769 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate));
808 pipeline_->SetPlaybackRate(playback_rate); 770 pipeline_->SetPlaybackRate(playback_rate);
809 message_loop_.RunAllPending(); 771 message_loop_.RunAllPending();
810 772
811 InSequence s; 773 InSequence s;
812 774
813 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 775 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
814 EXPECT_CALL(*mocks_->data_source(), Seek(seek_time, NotNull()))
815 .WillOnce(Invoke(&RunFilterCallback));
816 776
817 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, NotNull())) 777 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, NotNull()))
818 .WillOnce(DoAll(SetError(mocks_->demuxer(), 778 .WillOnce(DoAll(SetError(mocks_->demuxer(),
819 PIPELINE_ERROR_READ), 779 PIPELINE_ERROR_READ),
820 Invoke(&RunFilterCallback))); 780 Invoke(&RunFilterCallback)));
821 781
822 pipeline_->Seek(seek_time, NewExpectedCallback()); 782 pipeline_->Seek(seek_time, NewExpectedCallback());
823 EXPECT_CALL(callbacks_, OnError()); 783 EXPECT_CALL(callbacks_, OnError());
824 message_loop_.RunAllPending(); 784 message_loop_.RunAllPending();
825 } 785 }
826 786
827 } // namespace media 787 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698