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

Side by Side Diff: media/filters/pipeline_integration_test.cc

Issue 220113002: MSE: Pick frame processor in ChunkDemuxer::AddId; prepare unit tests to pick processor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments: refactored to land after Blink change https://codereview.chromium.org/220593010 Created 6 years, 8 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 "media/filters/pipeline_integration_test_base.h" 5 #include "media/filters/pipeline_integration_test_base.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "media/base/decoder_buffer.h" 12 #include "media/base/decoder_buffer.h"
13 #include "media/base/media_keys.h" 13 #include "media/base/media_keys.h"
14 #include "media/base/media_switches.h" 14 #include "media/base/media_switches.h"
15 #include "media/base/test_data_util.h" 15 #include "media/base/test_data_util.h"
16 #include "media/cdm/aes_decryptor.h" 16 #include "media/cdm/aes_decryptor.h"
17 #include "media/cdm/json_web_key.h" 17 #include "media/cdm/json_web_key.h"
18 #include "media/filters/chunk_demuxer.h" 18 #include "media/filters/chunk_demuxer.h"
19 19
20 using testing::_; 20 using testing::_;
21 using testing::AnyNumber; 21 using testing::AnyNumber;
22 using testing::AtMost; 22 using testing::AtMost;
23 using testing::Values;
23 24
24 namespace media { 25 namespace media {
25 26
26 const char kSourceId[] = "SourceId"; 27 const char kSourceId[] = "SourceId";
27 const uint8 kInitData[] = { 0x69, 0x6e, 0x69, 0x74 }; 28 const uint8 kInitData[] = { 0x69, 0x6e, 0x69, 0x74 };
28 29
29 const char kWebM[] = "video/webm; codecs=\"vp8,vorbis\""; 30 const char kWebM[] = "video/webm; codecs=\"vp8,vorbis\"";
30 const char kWebMVP9[] = "video/webm; codecs=\"vp9\""; 31 const char kWebMVP9[] = "video/webm; codecs=\"vp9\"";
31 const char kAudioOnlyWebM[] = "video/webm; codecs=\"vorbis\""; 32 const char kAudioOnlyWebM[] = "video/webm; codecs=\"vorbis\"";
32 const char kOpusAudioOnlyWebM[] = "video/webm; codecs=\"opus\""; 33 const char kOpusAudioOnlyWebM[] = "video/webm; codecs=\"opus\"";
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 AesDecryptor* decryptor) OVERRIDE { 248 AesDecryptor* decryptor) OVERRIDE {
248 } 249 }
249 }; 250 };
250 251
251 // Helper class that emulates calls made on the ChunkDemuxer by the 252 // Helper class that emulates calls made on the ChunkDemuxer by the
252 // Media Source API. 253 // Media Source API.
253 class MockMediaSource { 254 class MockMediaSource {
254 public: 255 public:
255 MockMediaSource(const std::string& filename, 256 MockMediaSource(const std::string& filename,
256 const std::string& mimetype, 257 const std::string& mimetype,
257 int initial_append_size) 258 int initial_append_size,
259 const bool use_legacy_frame_processor)
258 : file_path_(GetTestDataFilePath(filename)), 260 : file_path_(GetTestDataFilePath(filename)),
259 current_position_(0), 261 current_position_(0),
260 initial_append_size_(initial_append_size), 262 initial_append_size_(initial_append_size),
261 mimetype_(mimetype), 263 mimetype_(mimetype),
262 chunk_demuxer_(new ChunkDemuxer( 264 chunk_demuxer_(new ChunkDemuxer(
263 base::Bind(&MockMediaSource::DemuxerOpened, base::Unretained(this)), 265 base::Bind(&MockMediaSource::DemuxerOpened, base::Unretained(this)),
264 base::Bind(&MockMediaSource::DemuxerNeedKey, 266 base::Bind(&MockMediaSource::DemuxerNeedKey,
265 base::Unretained(this)), 267 base::Unretained(this)),
266 LogCB(), 268 LogCB(),
267 false)), 269 false)),
268 owned_chunk_demuxer_(chunk_demuxer_) { 270 owned_chunk_demuxer_(chunk_demuxer_),
271 use_legacy_frame_processor_(use_legacy_frame_processor) {
269 272
270 file_data_ = ReadTestDataFile(filename); 273 file_data_ = ReadTestDataFile(filename);
271 274
272 if (initial_append_size_ == kAppendWholeFile) 275 if (initial_append_size_ == kAppendWholeFile)
273 initial_append_size_ = file_data_->data_size(); 276 initial_append_size_ = file_data_->data_size();
274 277
275 DCHECK_GT(initial_append_size_, 0); 278 DCHECK_GT(initial_append_size_, 0);
276 DCHECK_LE(initial_append_size_, file_data_->data_size()); 279 DCHECK_LE(initial_append_size_, file_data_->data_size());
277 } 280 }
278 281
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 size_t codecs_param_end = mimetype_.find("\"", codecs_param_start); 359 size_t codecs_param_end = mimetype_.find("\"", codecs_param_start);
357 360
358 CHECK_NE(codecs_param_end, std::string::npos); 361 CHECK_NE(codecs_param_end, std::string::npos);
359 362
360 std::string codecs_param = 363 std::string codecs_param =
361 mimetype_.substr(codecs_param_start, 364 mimetype_.substr(codecs_param_start,
362 codecs_param_end - codecs_param_start); 365 codecs_param_end - codecs_param_start);
363 Tokenize(codecs_param, ",", &codecs); 366 Tokenize(codecs_param, ",", &codecs);
364 } 367 }
365 368
366 CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs), ChunkDemuxer::kOk); 369 CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs,
370 use_legacy_frame_processor_),
371 ChunkDemuxer::kOk);
372
367 AppendData(initial_append_size_); 373 AppendData(initial_append_size_);
368 } 374 }
369 375
370 void DemuxerNeedKey(const std::string& type, 376 void DemuxerNeedKey(const std::string& type,
371 const std::vector<uint8>& init_data) { 377 const std::vector<uint8>& init_data) {
372 DCHECK(!init_data.empty()); 378 DCHECK(!init_data.empty());
373 CHECK(!need_key_cb_.is_null()); 379 CHECK(!need_key_cb_.is_null());
374 need_key_cb_.Run(type, init_data); 380 need_key_cb_.Run(type, init_data);
375 } 381 }
376 382
377 base::TimeDelta last_timestamp_offset() const { 383 base::TimeDelta last_timestamp_offset() const {
378 return last_timestamp_offset_; 384 return last_timestamp_offset_;
379 } 385 }
380 386
381 private: 387 private:
382 base::FilePath file_path_; 388 base::FilePath file_path_;
383 scoped_refptr<DecoderBuffer> file_data_; 389 scoped_refptr<DecoderBuffer> file_data_;
384 int current_position_; 390 int current_position_;
385 int initial_append_size_; 391 int initial_append_size_;
386 std::string mimetype_; 392 std::string mimetype_;
387 ChunkDemuxer* chunk_demuxer_; 393 ChunkDemuxer* chunk_demuxer_;
388 scoped_ptr<Demuxer> owned_chunk_demuxer_; 394 scoped_ptr<Demuxer> owned_chunk_demuxer_;
389 Demuxer::NeedKeyCB need_key_cb_; 395 Demuxer::NeedKeyCB need_key_cb_;
390 base::TimeDelta last_timestamp_offset_; 396 base::TimeDelta last_timestamp_offset_;
397 bool use_legacy_frame_processor_;
391 }; 398 };
392 399
400 // Test parameter determines which coded frame processor is used to process
401 // appended data, and is only applicable in tests where the pipeline is using a
402 // (Mock)MediaSource (which are TEST_P, not TEST_F). If true,
403 // LegacyFrameProcessor is used. Otherwise, (not yet supported), a more
404 // compliant frame processor is used.
405 // TODO(wolenetz): Enable usage of new frame processor based on this flag.
406 // See http://crbug.com/249422.
393 class PipelineIntegrationTest 407 class PipelineIntegrationTest
394 : public testing::Test, 408 : public testing::TestWithParam<bool>,
395 public PipelineIntegrationTestBase { 409 public PipelineIntegrationTestBase {
396 public: 410 public:
397 void StartPipelineWithMediaSource(MockMediaSource* source) { 411 void StartPipelineWithMediaSource(MockMediaSource* source) {
398 EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1)); 412 EXPECT_CALL(*this, OnMetadata(_)).Times(AtMost(1));
399 EXPECT_CALL(*this, OnPrerollCompleted()).Times(AtMost(1)); 413 EXPECT_CALL(*this, OnPrerollCompleted()).Times(AtMost(1));
400 pipeline_->Start( 414 pipeline_->Start(
401 CreateFilterCollection(source->GetDemuxer(), NULL), 415 CreateFilterCollection(source->GetDemuxer(), NULL),
402 base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), 416 base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)),
403 base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), 417 base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)),
404 QuitOnStatusCB(PIPELINE_OK), 418 QuitOnStatusCB(PIPELINE_OK),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 // Verifies that seeking works properly for ChunkDemuxer when the 456 // Verifies that seeking works properly for ChunkDemuxer when the
443 // seek happens while there is a pending read on the ChunkDemuxer 457 // seek happens while there is a pending read on the ChunkDemuxer
444 // and no data is available. 458 // and no data is available.
445 bool TestSeekDuringRead(const std::string& filename, 459 bool TestSeekDuringRead(const std::string& filename,
446 const std::string& mimetype, 460 const std::string& mimetype,
447 int initial_append_size, 461 int initial_append_size,
448 base::TimeDelta start_seek_time, 462 base::TimeDelta start_seek_time,
449 base::TimeDelta seek_time, 463 base::TimeDelta seek_time,
450 int seek_file_position, 464 int seek_file_position,
451 int seek_append_size) { 465 int seek_append_size) {
452 MockMediaSource source(filename, mimetype, initial_append_size); 466 MockMediaSource source(filename, mimetype, initial_append_size,
467 GetParam());
453 StartPipelineWithMediaSource(&source); 468 StartPipelineWithMediaSource(&source);
454 469
455 if (pipeline_status_ != PIPELINE_OK) 470 if (pipeline_status_ != PIPELINE_OK)
456 return false; 471 return false;
457 472
458 Play(); 473 Play();
459 if (!WaitUntilCurrentTimeIsAfter(start_seek_time)) 474 if (!WaitUntilCurrentTimeIsAfter(start_seek_time))
460 return false; 475 return false;
461 476
462 source.Seek(seek_time, seek_file_position, seek_append_size); 477 source.Seek(seek_time, seek_file_position, seek_append_size);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 522
508 ASSERT_TRUE(Start(GetTestDataFilePath("bear-320x240-av_enc-av.webm"), 523 ASSERT_TRUE(Start(GetTestDataFilePath("bear-320x240-av_enc-av.webm"),
509 encrypted_media.decryptor())); 524 encrypted_media.decryptor()));
510 525
511 Play(); 526 Play();
512 527
513 ASSERT_TRUE(WaitUntilOnEnded()); 528 ASSERT_TRUE(WaitUntilOnEnded());
514 Stop(); 529 Stop();
515 } 530 }
516 531
517 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource) { 532 TEST_P(PipelineIntegrationTest, BasicPlayback_MediaSource) {
518 MockMediaSource source("bear-320x240.webm", kWebM, 219229); 533 MockMediaSource source("bear-320x240.webm", kWebM, 219229, GetParam());
519 StartPipelineWithMediaSource(&source); 534 StartPipelineWithMediaSource(&source);
520 source.EndOfStream(); 535 source.EndOfStream();
521 536
522 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 537 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
523 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 538 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
524 EXPECT_EQ(k320WebMFileDurationMs, 539 EXPECT_EQ(k320WebMFileDurationMs,
525 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 540 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
526 541
527 Play(); 542 Play();
528 543
529 ASSERT_TRUE(WaitUntilOnEnded()); 544 ASSERT_TRUE(WaitUntilOnEnded());
530 source.Abort(); 545 source.Abort();
531 Stop(); 546 Stop();
532 } 547 }
533 548
534 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource_VP9_WebM) { 549 TEST_P(PipelineIntegrationTest, BasicPlayback_MediaSource_VP9_WebM) {
535 MockMediaSource source("bear-vp9.webm", kWebMVP9, 67504); 550 MockMediaSource source("bear-vp9.webm", kWebMVP9, 67504, GetParam());
536 StartPipelineWithMediaSource(&source); 551 StartPipelineWithMediaSource(&source);
537 source.EndOfStream(); 552 source.EndOfStream();
538 553
539 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 554 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
540 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 555 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
541 EXPECT_EQ(kVP9WebMFileDurationMs, 556 EXPECT_EQ(kVP9WebMFileDurationMs,
542 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 557 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
543 558
544 Play(); 559 Play();
545 560
546 ASSERT_TRUE(WaitUntilOnEnded()); 561 ASSERT_TRUE(WaitUntilOnEnded());
547 source.Abort(); 562 source.Abort();
548 Stop(); 563 Stop();
549 } 564 }
550 565
551 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource_VP8A_WebM) { 566 TEST_P(PipelineIntegrationTest, BasicPlayback_MediaSource_VP8A_WebM) {
552 EXPECT_CALL(*this, OnSetOpaque(false)).Times(AnyNumber()); 567 EXPECT_CALL(*this, OnSetOpaque(false)).Times(AnyNumber());
553 MockMediaSource source("bear-vp8a.webm", kVideoOnlyWebM, kAppendWholeFile); 568 MockMediaSource source("bear-vp8a.webm", kVideoOnlyWebM, kAppendWholeFile,
569 GetParam());
554 StartPipelineWithMediaSource(&source); 570 StartPipelineWithMediaSource(&source);
555 source.EndOfStream(); 571 source.EndOfStream();
556 572
557 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 573 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
558 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 574 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
559 EXPECT_EQ(kVP8AWebMFileDurationMs, 575 EXPECT_EQ(kVP8AWebMFileDurationMs,
560 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 576 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
561 577
562 Play(); 578 Play();
563 579
564 ASSERT_TRUE(WaitUntilOnEnded()); 580 ASSERT_TRUE(WaitUntilOnEnded());
565 source.Abort(); 581 source.Abort();
566 Stop(); 582 Stop();
567 } 583 }
568 584
569 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource_Opus_WebM) { 585 TEST_P(PipelineIntegrationTest, BasicPlayback_MediaSource_Opus_WebM) {
570 EXPECT_CALL(*this, OnSetOpaque(false)).Times(AnyNumber()); 586 EXPECT_CALL(*this, OnSetOpaque(false)).Times(AnyNumber());
571 MockMediaSource source("bear-opus-end-trimming.webm", kOpusAudioOnlyWebM, 587 MockMediaSource source("bear-opus-end-trimming.webm", kOpusAudioOnlyWebM,
572 kAppendWholeFile); 588 kAppendWholeFile, GetParam());
573 StartPipelineWithMediaSource(&source); 589 StartPipelineWithMediaSource(&source);
574 source.EndOfStream(); 590 source.EndOfStream();
575 591
576 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 592 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
577 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 593 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
578 // TODO(acolwell/wolenetz): Drop the "+ 1" once WebM stream parser always 594 // TODO(acolwell/wolenetz): Drop the "+ 1" once WebM stream parser always
579 // emits frames with valid durations (see http://crbug.com/351166) and 595 // emits frames with valid durations (see http://crbug.com/351166) and
580 // compliant coded frame processor's "highest presentation end timestamp" is 596 // compliant coded frame processor's "highest presentation end timestamp" is
581 // used to update duration (see http://crbug.com/249422). 597 // used to update duration (see http://crbug.com/249422).
582 EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs + 1, 598 EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs + 1,
583 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 599 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
584 Play(); 600 Play();
585 601
586 ASSERT_TRUE(WaitUntilOnEnded()); 602 ASSERT_TRUE(WaitUntilOnEnded());
587 source.Abort(); 603 source.Abort();
588 Stop(); 604 Stop();
589 } 605 }
590 606
591 // Flaky. http://crbug.com/304776 607 // Flaky. http://crbug.com/304776
592 TEST_F(PipelineIntegrationTest, DISABLED_MediaSource_Opus_Seeking_WebM) { 608 TEST_P(PipelineIntegrationTest, DISABLED_MediaSource_Opus_Seeking_WebM) {
593 EXPECT_CALL(*this, OnSetOpaque(false)).Times(AnyNumber()); 609 EXPECT_CALL(*this, OnSetOpaque(false)).Times(AnyNumber());
594 MockMediaSource source("bear-opus-end-trimming.webm", kOpusAudioOnlyWebM, 610 MockMediaSource source("bear-opus-end-trimming.webm", kOpusAudioOnlyWebM,
595 kAppendWholeFile); 611 kAppendWholeFile, GetParam());
596 StartHashedPipelineWithMediaSource(&source); 612 StartHashedPipelineWithMediaSource(&source);
597 613
598
599 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 614 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
600 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 615 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
601 // TODO(acolwell/wolenetz): Drop the "+ 1" once WebM stream parser always 616 // TODO(acolwell/wolenetz): Drop the "+ 1" once WebM stream parser always
602 // emits frames with valid durations (see http://crbug.com/351166) and 617 // emits frames with valid durations (see http://crbug.com/351166) and
603 // compliant coded frame processor's "highest presentation end timestamp" is 618 // compliant coded frame processor's "highest presentation end timestamp" is
604 // used to update duration (see http://crbug.com/249422). 619 // used to update duration (see http://crbug.com/249422).
605 EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs + 1, 620 EXPECT_EQ(kOpusEndTrimmingWebMFileDurationMs + 1,
606 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 621 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
607 622
608 base::TimeDelta start_seek_time = base::TimeDelta::FromMilliseconds(1000); 623 base::TimeDelta start_seek_time = base::TimeDelta::FromMilliseconds(1000);
609 base::TimeDelta seek_time = base::TimeDelta::FromMilliseconds(2000); 624 base::TimeDelta seek_time = base::TimeDelta::FromMilliseconds(2000);
610 625
611 Play(); 626 Play();
612 ASSERT_TRUE(WaitUntilCurrentTimeIsAfter(start_seek_time)); 627 ASSERT_TRUE(WaitUntilCurrentTimeIsAfter(start_seek_time));
613 source.Seek(seek_time, 0x1D5, 34017); 628 source.Seek(seek_time, 0x1D5, 34017);
614 source.EndOfStream(); 629 source.EndOfStream();
615 ASSERT_TRUE(Seek(seek_time)); 630 ASSERT_TRUE(Seek(seek_time));
616 631
617 ASSERT_TRUE(WaitUntilOnEnded()); 632 ASSERT_TRUE(WaitUntilOnEnded());
618 633
619 EXPECT_EQ("0.76,0.20,-0.82,-0.58,-1.29,-0.29,", GetAudioHash()); 634 EXPECT_EQ("0.76,0.20,-0.82,-0.58,-1.29,-0.29,", GetAudioHash());
620 635
621 source.Abort(); 636 source.Abort();
622 Stop(); 637 Stop();
623 } 638 }
624 639
625 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) { 640 TEST_P(PipelineIntegrationTest, MediaSource_ConfigChange_WebM) {
626 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, 641 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM,
627 kAppendWholeFile); 642 kAppendWholeFile, GetParam());
628 StartPipelineWithMediaSource(&source); 643 StartPipelineWithMediaSource(&source);
629 644
630 scoped_refptr<DecoderBuffer> second_file = 645 scoped_refptr<DecoderBuffer> second_file =
631 ReadTestDataFile("bear-640x360.webm"); 646 ReadTestDataFile("bear-640x360.webm");
632 647
633 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 648 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
634 second_file->data(), second_file->data_size()); 649 second_file->data(), second_file->data_size());
635 650
636 source.EndOfStream(); 651 source.EndOfStream();
637 652
638 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 653 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
639 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 654 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
640 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs, 655 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs,
641 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 656 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
642 657
643 Play(); 658 Play();
644 659
645 EXPECT_TRUE(WaitUntilOnEnded()); 660 EXPECT_TRUE(WaitUntilOnEnded());
646 source.Abort(); 661 source.Abort();
647 Stop(); 662 Stop();
648 } 663 }
649 664
650 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_Encrypted_WebM) { 665 TEST_P(PipelineIntegrationTest, MediaSource_ConfigChange_Encrypted_WebM) {
651 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, 666 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM,
652 kAppendWholeFile); 667 kAppendWholeFile, GetParam());
653 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 668 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
654 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 669 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
655 670
656 scoped_refptr<DecoderBuffer> second_file = 671 scoped_refptr<DecoderBuffer> second_file =
657 ReadTestDataFile("bear-640x360-av_enc-av.webm"); 672 ReadTestDataFile("bear-640x360-av_enc-av.webm");
658 673
659 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 674 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
660 second_file->data(), second_file->data_size()); 675 second_file->data(), second_file->data_size());
661 676
662 source.EndOfStream(); 677 source.EndOfStream();
663 678
664 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 679 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
665 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 680 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
666 // The "+ 1" is due to estimated audio and video frame durations on the last 681 // The "+ 1" is due to estimated audio and video frame durations on the last
667 // frames appended. The unencrypted file has a TrackEntry DefaultDuration 682 // frames appended. The unencrypted file has a TrackEntry DefaultDuration
668 // field for the video track, but the encrypted file does not. 683 // field for the video track, but the encrypted file does not.
669 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs + 1, 684 EXPECT_EQ(kAppendTimeMs + k640WebMFileDurationMs + 1,
670 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 685 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
671 686
672 Play(); 687 Play();
673 688
674 EXPECT_TRUE(WaitUntilOnEnded()); 689 EXPECT_TRUE(WaitUntilOnEnded());
675 source.Abort(); 690 source.Abort();
676 Stop(); 691 Stop();
677 } 692 }
678 693
679 // Config changes from encrypted to clear are not currently supported. 694 // Config changes from encrypted to clear are not currently supported.
680 TEST_F(PipelineIntegrationTest, 695 TEST_P(PipelineIntegrationTest,
681 MediaSource_ConfigChange_ClearThenEncrypted_WebM) { 696 MediaSource_ConfigChange_ClearThenEncrypted_WebM) {
682 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM, 697 MockMediaSource source("bear-320x240-16x9-aspect.webm", kWebM,
683 kAppendWholeFile); 698 kAppendWholeFile, GetParam());
684 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 699 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
685 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 700 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
686 701
687 scoped_refptr<DecoderBuffer> second_file = 702 scoped_refptr<DecoderBuffer> second_file =
688 ReadTestDataFile("bear-640x360-av_enc-av.webm"); 703 ReadTestDataFile("bear-640x360-av_enc-av.webm");
689 704
690 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 705 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
691 second_file->data(), second_file->data_size()); 706 second_file->data(), second_file->data_size());
692 707
693 source.EndOfStream(); 708 source.EndOfStream();
694 709
695 message_loop_.Run(); 710 message_loop_.Run();
696 EXPECT_EQ(PIPELINE_ERROR_DECODE, pipeline_status_); 711 EXPECT_EQ(PIPELINE_ERROR_DECODE, pipeline_status_);
697 712
698 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 713 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
699 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 714 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
700 // The second video was not added, so its time has not been added. 715 // The second video was not added, so its time has not been added.
701 EXPECT_EQ(k320WebMFileDurationMs, 716 EXPECT_EQ(k320WebMFileDurationMs,
702 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 717 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
703 718
704 Play(); 719 Play();
705 720
706 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); 721 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError());
707 source.Abort(); 722 source.Abort();
708 } 723 }
709 724
710 // Config changes from clear to encrypted are not currently supported. 725 // Config changes from clear to encrypted are not currently supported.
711 TEST_F(PipelineIntegrationTest, 726 TEST_P(PipelineIntegrationTest,
712 MediaSource_ConfigChange_EncryptedThenClear_WebM) { 727 MediaSource_ConfigChange_EncryptedThenClear_WebM) {
713 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM, 728 MockMediaSource source("bear-320x240-16x9-aspect-av_enc-av.webm", kWebM,
714 kAppendWholeFile); 729 kAppendWholeFile, GetParam());
715 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 730 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
716 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 731 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
717 732
718 scoped_refptr<DecoderBuffer> second_file = 733 scoped_refptr<DecoderBuffer> second_file =
719 ReadTestDataFile("bear-640x360.webm"); 734 ReadTestDataFile("bear-640x360.webm");
720 735
721 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 736 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
722 second_file->data(), second_file->data_size()); 737 second_file->data(), second_file->data_size());
723 738
724 source.EndOfStream(); 739 source.EndOfStream();
725 740
726 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 741 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
727 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 742 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
728 // The second video was not added, so its time has not been added. 743 // The second video was not added, so its time has not been added.
729 // The "+ 1" is due to estimated audio and video frame durations on the last 744 // The "+ 1" is due to estimated audio and video frame durations on the last
730 // frames appended. The unencrypted file has a TrackEntry DefaultDuration 745 // frames appended. The unencrypted file has a TrackEntry DefaultDuration
731 // field for the video track, but the encrypted file does not. 746 // field for the video track, but the encrypted file does not.
732 EXPECT_EQ(k320WebMFileDurationMs + 1, 747 EXPECT_EQ(k320WebMFileDurationMs + 1,
733 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 748 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
734 749
735 Play(); 750 Play();
736 751
737 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); 752 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError());
738 source.Abort(); 753 source.Abort();
739 } 754 }
740 755
741 #if defined(USE_PROPRIETARY_CODECS) 756 #if defined(USE_PROPRIETARY_CODECS)
742 TEST_F(PipelineIntegrationTest, MediaSource_ADTS) { 757 TEST_P(PipelineIntegrationTest, MediaSource_ADTS) {
743 MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile); 758 MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile, GetParam());
744 StartPipelineWithMediaSource(&source); 759 StartPipelineWithMediaSource(&source);
745 source.EndOfStream(); 760 source.EndOfStream();
746 761
747 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 762 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
748 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 763 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
749 EXPECT_EQ(325, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 764 EXPECT_EQ(325, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
750 765
751 Play(); 766 Play();
752 767
753 EXPECT_TRUE(WaitUntilOnEnded()); 768 EXPECT_TRUE(WaitUntilOnEnded());
754 } 769 }
755 770
756 TEST_F(PipelineIntegrationTest, MediaSource_ADTS_TimestampOffset) { 771 TEST_P(PipelineIntegrationTest, MediaSource_ADTS_TimestampOffset) {
757 MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile); 772 MockMediaSource source("sfx.adts", kADTS, kAppendWholeFile, GetParam());
758 StartPipelineWithMediaSource(&source); 773 StartPipelineWithMediaSource(&source);
759 EXPECT_EQ(325, source.last_timestamp_offset().InMilliseconds()); 774 EXPECT_EQ(325, source.last_timestamp_offset().InMilliseconds());
760 775
761 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts"); 776 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.adts");
762 source.AppendAtTime( 777 source.AppendAtTime(
763 source.last_timestamp_offset() - base::TimeDelta::FromMilliseconds(10), 778 source.last_timestamp_offset() - base::TimeDelta::FromMilliseconds(10),
764 second_file->data(), 779 second_file->data(),
765 second_file->data_size()); 780 second_file->data_size());
766 source.EndOfStream(); 781 source.EndOfStream();
767 782
768 EXPECT_EQ(640, source.last_timestamp_offset().InMilliseconds()); 783 EXPECT_EQ(640, source.last_timestamp_offset().InMilliseconds());
769 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 784 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
770 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 785 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
771 EXPECT_EQ(640, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 786 EXPECT_EQ(640, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
772 787
773 Play(); 788 Play();
774 789
775 EXPECT_TRUE(WaitUntilOnEnded()); 790 EXPECT_TRUE(WaitUntilOnEnded());
776 } 791 }
777 792
778 TEST_F(PipelineIntegrationTest, MediaSource_MP3) { 793 TEST_P(PipelineIntegrationTest, MediaSource_MP3) {
779 MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile); 794 MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile, GetParam());
780 StartPipelineWithMediaSource(&source); 795 StartPipelineWithMediaSource(&source);
781 source.EndOfStream(); 796 source.EndOfStream();
782 797
783 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 798 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
784 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 799 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
785 EXPECT_EQ(339, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 800 EXPECT_EQ(339, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
786 801
787 Play(); 802 Play();
788 803
789 EXPECT_TRUE(WaitUntilOnEnded()); 804 EXPECT_TRUE(WaitUntilOnEnded());
790 } 805 }
791 806
792 TEST_F(PipelineIntegrationTest, MediaSource_MP3_TimestampOffset) { 807 TEST_P(PipelineIntegrationTest, MediaSource_MP3_TimestampOffset) {
793 MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile); 808 MockMediaSource source("sfx.mp3", kMP3, kAppendWholeFile, GetParam());
794 StartPipelineWithMediaSource(&source); 809 StartPipelineWithMediaSource(&source);
795 EXPECT_EQ(339, source.last_timestamp_offset().InMilliseconds()); 810 EXPECT_EQ(339, source.last_timestamp_offset().InMilliseconds());
796 811
797 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.mp3"); 812 scoped_refptr<DecoderBuffer> second_file = ReadTestDataFile("sfx.mp3");
798 source.AppendAtTime( 813 source.AppendAtTime(
799 source.last_timestamp_offset() - base::TimeDelta::FromMilliseconds(10), 814 source.last_timestamp_offset() - base::TimeDelta::FromMilliseconds(10),
800 second_file->data(), 815 second_file->data(),
801 second_file->data_size()); 816 second_file->data_size());
802 source.EndOfStream(); 817 source.EndOfStream();
803 818
804 EXPECT_EQ(669, source.last_timestamp_offset().InMilliseconds()); 819 EXPECT_EQ(669, source.last_timestamp_offset().InMilliseconds());
805 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 820 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
806 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 821 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
807 EXPECT_EQ(669, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 822 EXPECT_EQ(669, pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
808 823
809 Play(); 824 Play();
810 825
811 EXPECT_TRUE(WaitUntilOnEnded()); 826 EXPECT_TRUE(WaitUntilOnEnded());
812 } 827 }
813 828
814 TEST_F(PipelineIntegrationTest, MediaSource_MP3_Icecast) { 829 TEST_P(PipelineIntegrationTest, MediaSource_MP3_Icecast) {
815 MockMediaSource source("icy_sfx.mp3", kMP3, kAppendWholeFile); 830 MockMediaSource source("icy_sfx.mp3", kMP3, kAppendWholeFile, GetParam());
816 StartPipelineWithMediaSource(&source); 831 StartPipelineWithMediaSource(&source);
817 source.EndOfStream(); 832 source.EndOfStream();
818 833
819 Play(); 834 Play();
820 835
821 EXPECT_TRUE(WaitUntilOnEnded()); 836 EXPECT_TRUE(WaitUntilOnEnded());
822 } 837 }
823 838
824 TEST_F(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) { 839 TEST_P(PipelineIntegrationTest, MediaSource_ConfigChange_MP4) {
825 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile); 840 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4, kAppendWholeFile,
841 GetParam());
826 StartPipelineWithMediaSource(&source); 842 StartPipelineWithMediaSource(&source);
827 843
828 scoped_refptr<DecoderBuffer> second_file = 844 scoped_refptr<DecoderBuffer> second_file =
829 ReadTestDataFile("bear-1280x720-av_frag.mp4"); 845 ReadTestDataFile("bear-1280x720-av_frag.mp4");
830 846
831 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 847 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
832 second_file->data(), second_file->data_size()); 848 second_file->data(), second_file->data_size());
833 849
834 source.EndOfStream(); 850 source.EndOfStream();
835 851
836 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 852 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
837 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 853 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
838 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, 854 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs,
839 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 855 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
840 856
841 Play(); 857 Play();
842 858
843 EXPECT_TRUE(WaitUntilOnEnded()); 859 EXPECT_TRUE(WaitUntilOnEnded());
844 source.Abort(); 860 source.Abort();
845 Stop(); 861 Stop();
846 } 862 }
847 863
848 TEST_F(PipelineIntegrationTest, 864 TEST_P(PipelineIntegrationTest,
849 MediaSource_ConfigChange_Encrypted_MP4_CENC_VideoOnly) { 865 MediaSource_ConfigChange_Encrypted_MP4_CENC_VideoOnly) {
850 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", 866 MockMediaSource source("bear-640x360-v_frag-cenc.mp4",
851 kMP4Video, kAppendWholeFile); 867 kMP4Video, kAppendWholeFile, GetParam());
852 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 868 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
853 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 869 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
854 870
855 scoped_refptr<DecoderBuffer> second_file = 871 scoped_refptr<DecoderBuffer> second_file =
856 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); 872 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4");
857 873
858 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 874 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
859 second_file->data(), second_file->data_size()); 875 second_file->data(), second_file->data_size());
860 876
861 source.EndOfStream(); 877 source.EndOfStream();
862 878
863 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 879 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
864 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 880 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
865 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs, 881 EXPECT_EQ(kAppendTimeMs + k1280IsoFileDurationMs,
866 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 882 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
867 883
868 Play(); 884 Play();
869 885
870 EXPECT_TRUE(WaitUntilOnEnded()); 886 EXPECT_TRUE(WaitUntilOnEnded());
871 source.Abort(); 887 source.Abort();
872 Stop(); 888 Stop();
873 } 889 }
874 890
875 // Config changes from clear to encrypted are not currently supported. 891 // Config changes from clear to encrypted are not currently supported.
876 // TODO(ddorwin): Figure out why this CHECKs in AppendAtTime(). 892 // TODO(ddorwin): Figure out why this CHECKs in AppendAtTime().
877 TEST_F(PipelineIntegrationTest, 893 TEST_P(PipelineIntegrationTest,
878 DISABLED_MediaSource_ConfigChange_ClearThenEncrypted_MP4_CENC) { 894 DISABLED_MediaSource_ConfigChange_ClearThenEncrypted_MP4_CENC) {
879 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4Video, 895 MockMediaSource source("bear-640x360-av_frag.mp4", kMP4Video,
880 kAppendWholeFile); 896 kAppendWholeFile, GetParam());
881 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 897 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
882 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 898 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
883 899
884 scoped_refptr<DecoderBuffer> second_file = 900 scoped_refptr<DecoderBuffer> second_file =
885 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4"); 901 ReadTestDataFile("bear-1280x720-v_frag-cenc.mp4");
886 902
887 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 903 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
888 second_file->data(), second_file->data_size()); 904 second_file->data(), second_file->data_size());
889 905
890 source.EndOfStream(); 906 source.EndOfStream();
891 907
892 message_loop_.Run(); 908 message_loop_.Run();
893 EXPECT_EQ(PIPELINE_ERROR_DECODE, pipeline_status_); 909 EXPECT_EQ(PIPELINE_ERROR_DECODE, pipeline_status_);
894 910
895 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 911 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
896 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 912 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
897 // The second video was not added, so its time has not been added. 913 // The second video was not added, so its time has not been added.
898 EXPECT_EQ(k640IsoFileDurationMs, 914 EXPECT_EQ(k640IsoFileDurationMs,
899 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 915 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
900 916
901 Play(); 917 Play();
902 918
903 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError()); 919 EXPECT_EQ(PIPELINE_ERROR_DECODE, WaitUntilEndedOrError());
904 source.Abort(); 920 source.Abort();
905 } 921 }
906 922
907 // Config changes from encrypted to clear are not currently supported. 923 // Config changes from encrypted to clear are not currently supported.
908 TEST_F(PipelineIntegrationTest, 924 TEST_P(PipelineIntegrationTest,
909 MediaSource_ConfigChange_EncryptedThenClear_MP4_CENC) { 925 MediaSource_ConfigChange_EncryptedThenClear_MP4_CENC) {
910 MockMediaSource source("bear-640x360-v_frag-cenc.mp4", 926 MockMediaSource source("bear-640x360-v_frag-cenc.mp4",
911 kMP4Video, kAppendWholeFile); 927 kMP4Video, kAppendWholeFile, GetParam());
912 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 928 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
913 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 929 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
914 930
915 scoped_refptr<DecoderBuffer> second_file = 931 scoped_refptr<DecoderBuffer> second_file =
916 ReadTestDataFile("bear-1280x720-av_frag.mp4"); 932 ReadTestDataFile("bear-1280x720-av_frag.mp4");
917 933
918 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec), 934 source.AppendAtTime(base::TimeDelta::FromSeconds(kAppendTimeSec),
919 second_file->data(), second_file->data_size()); 935 second_file->data(), second_file->data_size());
920 936
921 source.EndOfStream(); 937 source.EndOfStream();
(...skipping 20 matching lines...) Expand all
942 958
943 #endif 959 #endif
944 960
945 TEST_F(PipelineIntegrationTest, BasicPlayback_16x9AspectRatio) { 961 TEST_F(PipelineIntegrationTest, BasicPlayback_16x9AspectRatio) {
946 ASSERT_TRUE(Start(GetTestDataFilePath("bear-320x240-16x9-aspect.webm"), 962 ASSERT_TRUE(Start(GetTestDataFilePath("bear-320x240-16x9-aspect.webm"),
947 PIPELINE_OK)); 963 PIPELINE_OK));
948 Play(); 964 Play();
949 ASSERT_TRUE(WaitUntilOnEnded()); 965 ASSERT_TRUE(WaitUntilOnEnded());
950 } 966 }
951 967
952 TEST_F(PipelineIntegrationTest, EncryptedPlayback_WebM) { 968 TEST_P(PipelineIntegrationTest, EncryptedPlayback_WebM) {
953 MockMediaSource source("bear-320x240-av_enc-av.webm", kWebM, 219816); 969 MockMediaSource source("bear-320x240-av_enc-av.webm", kWebM, 219816,
970 GetParam());
954 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 971 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
955 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 972 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
956 973
957 source.EndOfStream(); 974 source.EndOfStream();
958 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 975 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
959 976
960 Play(); 977 Play();
961 978
962 ASSERT_TRUE(WaitUntilOnEnded()); 979 ASSERT_TRUE(WaitUntilOnEnded());
963 source.Abort(); 980 source.Abort();
964 Stop(); 981 Stop();
965 } 982 }
966 983
967 TEST_F(PipelineIntegrationTest, EncryptedPlayback_ClearStart_WebM) { 984 TEST_P(PipelineIntegrationTest, EncryptedPlayback_ClearStart_WebM) {
968 MockMediaSource source("bear-320x240-av_enc-av_clear-1s.webm", 985 MockMediaSource source("bear-320x240-av_enc-av_clear-1s.webm",
969 kWebM, kAppendWholeFile); 986 kWebM, kAppendWholeFile, GetParam());
970 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 987 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
971 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 988 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
972 989
973 source.EndOfStream(); 990 source.EndOfStream();
974 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 991 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
975 992
976 Play(); 993 Play();
977 994
978 ASSERT_TRUE(WaitUntilOnEnded()); 995 ASSERT_TRUE(WaitUntilOnEnded());
979 source.Abort(); 996 source.Abort();
980 Stop(); 997 Stop();
981 } 998 }
982 999
983 TEST_F(PipelineIntegrationTest, EncryptedPlayback_NoEncryptedFrames_WebM) { 1000 TEST_P(PipelineIntegrationTest, EncryptedPlayback_NoEncryptedFrames_WebM) {
984 MockMediaSource source("bear-320x240-av_enc-av_clear-all.webm", 1001 MockMediaSource source("bear-320x240-av_enc-av_clear-all.webm",
985 kWebM, kAppendWholeFile); 1002 kWebM, kAppendWholeFile, GetParam());
986 FakeEncryptedMedia encrypted_media(new NoResponseApp()); 1003 FakeEncryptedMedia encrypted_media(new NoResponseApp());
987 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 1004 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
988 1005
989 source.EndOfStream(); 1006 source.EndOfStream();
990 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 1007 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
991 1008
992 Play(); 1009 Play();
993 1010
994 ASSERT_TRUE(WaitUntilOnEnded()); 1011 ASSERT_TRUE(WaitUntilOnEnded());
995 source.Abort(); 1012 source.Abort();
996 Stop(); 1013 Stop();
997 } 1014 }
998 1015
999 #if defined(USE_PROPRIETARY_CODECS) 1016 #if defined(USE_PROPRIETARY_CODECS)
1000 TEST_F(PipelineIntegrationTest, EncryptedPlayback_MP4_CENC_VideoOnly) { 1017 TEST_P(PipelineIntegrationTest, EncryptedPlayback_MP4_CENC_VideoOnly) {
1001 MockMediaSource source("bear-1280x720-v_frag-cenc.mp4", 1018 MockMediaSource source("bear-1280x720-v_frag-cenc.mp4",
1002 kMP4Video, kAppendWholeFile); 1019 kMP4Video, kAppendWholeFile, GetParam());
1003 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1020 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1004 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 1021 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
1005 1022
1006 source.EndOfStream(); 1023 source.EndOfStream();
1007 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 1024 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
1008 1025
1009 Play(); 1026 Play();
1010 1027
1011 ASSERT_TRUE(WaitUntilOnEnded()); 1028 ASSERT_TRUE(WaitUntilOnEnded());
1012 source.Abort(); 1029 source.Abort();
1013 Stop(); 1030 Stop();
1014 } 1031 }
1015 1032
1016 TEST_F(PipelineIntegrationTest, EncryptedPlayback_MP4_CENC_AudioOnly) { 1033 TEST_P(PipelineIntegrationTest, EncryptedPlayback_MP4_CENC_AudioOnly) {
1017 MockMediaSource source("bear-1280x720-a_frag-cenc.mp4", 1034 MockMediaSource source("bear-1280x720-a_frag-cenc.mp4",
1018 kMP4Audio, kAppendWholeFile); 1035 kMP4Audio, kAppendWholeFile, GetParam());
1019 FakeEncryptedMedia encrypted_media(new KeyProvidingApp()); 1036 FakeEncryptedMedia encrypted_media(new KeyProvidingApp());
1020 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 1037 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
1021 1038
1022 source.EndOfStream(); 1039 source.EndOfStream();
1023 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 1040 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
1024 1041
1025 Play(); 1042 Play();
1026 1043
1027 ASSERT_TRUE(WaitUntilOnEnded()); 1044 ASSERT_TRUE(WaitUntilOnEnded());
1028 source.Abort(); 1045 source.Abort();
1029 Stop(); 1046 Stop();
1030 } 1047 }
1031 1048
1032 TEST_F(PipelineIntegrationTest, 1049 TEST_P(PipelineIntegrationTest,
1033 EncryptedPlayback_NoEncryptedFrames_MP4_CENC_VideoOnly) { 1050 EncryptedPlayback_NoEncryptedFrames_MP4_CENC_VideoOnly) {
1034 MockMediaSource source("bear-1280x720-v_frag-cenc_clear-all.mp4", 1051 MockMediaSource source("bear-1280x720-v_frag-cenc_clear-all.mp4",
1035 kMP4Video, kAppendWholeFile); 1052 kMP4Video, kAppendWholeFile, GetParam());
1036 FakeEncryptedMedia encrypted_media(new NoResponseApp()); 1053 FakeEncryptedMedia encrypted_media(new NoResponseApp());
1037 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 1054 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
1038 1055
1039 source.EndOfStream(); 1056 source.EndOfStream();
1040 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 1057 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
1041 1058
1042 Play(); 1059 Play();
1043 1060
1044 ASSERT_TRUE(WaitUntilOnEnded()); 1061 ASSERT_TRUE(WaitUntilOnEnded());
1045 source.Abort(); 1062 source.Abort();
1046 Stop(); 1063 Stop();
1047 } 1064 }
1048 1065
1049 TEST_F(PipelineIntegrationTest, 1066 TEST_P(PipelineIntegrationTest,
1050 EncryptedPlayback_NoEncryptedFrames_MP4_CENC_AudioOnly) { 1067 EncryptedPlayback_NoEncryptedFrames_MP4_CENC_AudioOnly) {
1051 MockMediaSource source("bear-1280x720-a_frag-cenc_clear-all.mp4", 1068 MockMediaSource source("bear-1280x720-a_frag-cenc_clear-all.mp4",
1052 kMP4Audio, kAppendWholeFile); 1069 kMP4Audio, kAppendWholeFile, GetParam());
1053 FakeEncryptedMedia encrypted_media(new NoResponseApp()); 1070 FakeEncryptedMedia encrypted_media(new NoResponseApp());
1054 StartPipelineWithEncryptedMedia(&source, &encrypted_media); 1071 StartPipelineWithEncryptedMedia(&source, &encrypted_media);
1055 1072
1056 source.EndOfStream(); 1073 source.EndOfStream();
1057 ASSERT_EQ(PIPELINE_OK, pipeline_status_); 1074 ASSERT_EQ(PIPELINE_OK, pipeline_status_);
1058 1075
1059 Play(); 1076 Play();
1060 1077
1061 ASSERT_TRUE(WaitUntilOnEnded()); 1078 ASSERT_TRUE(WaitUntilOnEnded());
1062 source.Abort(); 1079 source.Abort();
1063 Stop(); 1080 Stop();
1064 } 1081 }
1065 1082
1066 TEST_F(PipelineIntegrationTest, BasicPlayback_MediaSource_VideoOnly_MP4_AVC3) { 1083 TEST_P(PipelineIntegrationTest, BasicPlayback_MediaSource_VideoOnly_MP4_AVC3) {
1067 MockMediaSource source("bear-1280x720-v_frag-avc3.mp4", kMP4VideoAVC3, 1084 MockMediaSource source("bear-1280x720-v_frag-avc3.mp4", kMP4VideoAVC3,
1068 kAppendWholeFile); 1085 kAppendWholeFile, GetParam());
1069 StartPipelineWithMediaSource(&source); 1086 StartPipelineWithMediaSource(&source);
1070 source.EndOfStream(); 1087 source.EndOfStream();
1071 1088
1072 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size()); 1089 EXPECT_EQ(1u, pipeline_->GetBufferedTimeRanges().size());
1073 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds()); 1090 EXPECT_EQ(0, pipeline_->GetBufferedTimeRanges().start(0).InMilliseconds());
1074 EXPECT_EQ(k1280IsoAVC3FileDurationMs, 1091 EXPECT_EQ(k1280IsoAVC3FileDurationMs,
1075 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds()); 1092 pipeline_->GetBufferedTimeRanges().end(0).InMilliseconds());
1076 1093
1077 Play(); 1094 Play();
1078 1095
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1121 EXPECT_GE(pipeline_->GetMediaTime(), seek_time); 1138 EXPECT_GE(pipeline_->GetMediaTime(), seek_time);
1122 ASSERT_TRUE(WaitUntilOnEnded()); 1139 ASSERT_TRUE(WaitUntilOnEnded());
1123 1140
1124 // Make sure seeking after reaching the end works as expected. 1141 // Make sure seeking after reaching the end works as expected.
1125 ASSERT_TRUE(Seek(seek_time)); 1142 ASSERT_TRUE(Seek(seek_time));
1126 EXPECT_GE(pipeline_->GetMediaTime(), seek_time); 1143 EXPECT_GE(pipeline_->GetMediaTime(), seek_time);
1127 ASSERT_TRUE(WaitUntilOnEnded()); 1144 ASSERT_TRUE(WaitUntilOnEnded());
1128 } 1145 }
1129 1146
1130 // Verify audio decoder & renderer can handle aborted demuxer reads. 1147 // Verify audio decoder & renderer can handle aborted demuxer reads.
1131 TEST_F(PipelineIntegrationTest, ChunkDemuxerAbortRead_AudioOnly) { 1148 TEST_P(PipelineIntegrationTest, ChunkDemuxerAbortRead_AudioOnly) {
1132 ASSERT_TRUE(TestSeekDuringRead("bear-320x240-audio-only.webm", kAudioOnlyWebM, 1149 ASSERT_TRUE(TestSeekDuringRead("bear-320x240-audio-only.webm", kAudioOnlyWebM,
1133 8192, 1150 8192,
1134 base::TimeDelta::FromMilliseconds(464), 1151 base::TimeDelta::FromMilliseconds(464),
1135 base::TimeDelta::FromMilliseconds(617), 1152 base::TimeDelta::FromMilliseconds(617),
1136 0x10CA, 19730)); 1153 0x10CA, 19730));
1137 } 1154 }
1138 1155
1139 // Verify video decoder & renderer can handle aborted demuxer reads. 1156 // Verify video decoder & renderer can handle aborted demuxer reads.
1140 TEST_F(PipelineIntegrationTest, ChunkDemuxerAbortRead_VideoOnly) { 1157 TEST_P(PipelineIntegrationTest, ChunkDemuxerAbortRead_VideoOnly) {
1141 ASSERT_TRUE(TestSeekDuringRead("bear-320x240-video-only.webm", kVideoOnlyWebM, 1158 ASSERT_TRUE(TestSeekDuringRead("bear-320x240-video-only.webm", kVideoOnlyWebM,
1142 32768, 1159 32768,
1143 base::TimeDelta::FromMilliseconds(167), 1160 base::TimeDelta::FromMilliseconds(167),
1144 base::TimeDelta::FromMilliseconds(1668), 1161 base::TimeDelta::FromMilliseconds(1668),
1145 0x1C896, 65536)); 1162 0x1C896, 65536));
1146 } 1163 }
1147 1164
1148 // Verify that Opus audio in WebM containers can be played back. 1165 // Verify that Opus audio in WebM containers can be played back.
1149 TEST_F(PipelineIntegrationTest, BasicPlayback_AudioOnly_Opus_WebM) { 1166 TEST_F(PipelineIntegrationTest, BasicPlayback_AudioOnly_Opus_WebM) {
1150 ASSERT_TRUE(Start(GetTestDataFilePath("bear-opus-end-trimming.webm"), 1167 ASSERT_TRUE(Start(GetTestDataFilePath("bear-opus-end-trimming.webm"),
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 1213
1197 // Verify that VP8 video with inband text track can be played back. 1214 // Verify that VP8 video with inband text track can be played back.
1198 TEST_F(PipelineIntegrationTest, 1215 TEST_F(PipelineIntegrationTest,
1199 BasicPlayback_VP8_WebVTT_WebM) { 1216 BasicPlayback_VP8_WebVTT_WebM) {
1200 ASSERT_TRUE(Start(GetTestDataFilePath("bear-vp8-webvtt.webm"), 1217 ASSERT_TRUE(Start(GetTestDataFilePath("bear-vp8-webvtt.webm"),
1201 PIPELINE_OK)); 1218 PIPELINE_OK));
1202 Play(); 1219 Play();
1203 ASSERT_TRUE(WaitUntilOnEnded()); 1220 ASSERT_TRUE(WaitUntilOnEnded());
1204 } 1221 }
1205 1222
1223 // TODO(wolenetz): Enable MSE testing of new frame processor based on this flag,
1224 // once the new processor has landed. See http://crbug.com/249422.
1225 INSTANTIATE_TEST_CASE_P(LegacyFrameProcessor, PipelineIntegrationTest,
1226 Values(true));
1227
1206 } // namespace media 1228 } // namespace media
OLDNEW
« content/renderer/media/webmediasource_impl.cc ('K') | « media/filters/chunk_demuxer_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698