OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 CHECK_NE(codecs_param_end, std::string::npos); | 625 CHECK_NE(codecs_param_end, std::string::npos); |
626 | 626 |
627 std::string codecs_param = mimetype_.substr( | 627 std::string codecs_param = mimetype_.substr( |
628 codecs_param_start, codecs_param_end - codecs_param_start); | 628 codecs_param_start, codecs_param_end - codecs_param_start); |
629 codecs = base::SplitString(codecs_param, ",", base::KEEP_WHITESPACE, | 629 codecs = base::SplitString(codecs_param, ",", base::KEEP_WHITESPACE, |
630 base::SPLIT_WANT_NONEMPTY); | 630 base::SPLIT_WANT_NONEMPTY); |
631 } | 631 } |
632 | 632 |
633 CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs), ChunkDemuxer::kOk); | 633 CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs), ChunkDemuxer::kOk); |
634 chunk_demuxer_->SetTracksWatcher( | 634 chunk_demuxer_->SetTracksWatcher( |
635 kSourceId, base::Bind(&MockMediaSource::InitSegmentReceivedWrapper, | 635 kSourceId, base::Bind(&MockMediaSource::InitSegmentReceived, |
636 base::Unretained(this))); | 636 base::Unretained(this))); |
637 | 637 |
638 AppendData(initial_append_size_); | 638 AppendData(initial_append_size_); |
639 } | 639 } |
640 | 640 |
641 void OnEncryptedMediaInitData(EmeInitDataType init_data_type, | 641 void OnEncryptedMediaInitData(EmeInitDataType init_data_type, |
642 const std::vector<uint8_t>& init_data) { | 642 const std::vector<uint8_t>& init_data) { |
643 DCHECK(!init_data.empty()); | 643 DCHECK(!init_data.empty()); |
644 CHECK(!encrypted_media_init_data_cb_.is_null()); | 644 CHECK(!encrypted_media_init_data_cb_.is_null()); |
645 encrypted_media_init_data_cb_.Run(init_data_type, init_data); | 645 encrypted_media_init_data_cb_.Run(init_data_type, init_data); |
646 } | 646 } |
647 | 647 |
648 base::TimeDelta last_timestamp_offset() const { | 648 base::TimeDelta last_timestamp_offset() const { |
649 return last_timestamp_offset_; | 649 return last_timestamp_offset_; |
650 } | 650 } |
651 | 651 |
652 // A workaround for gtest mocks not allowing moving scoped_ptrs. | 652 void InitSegmentReceived(std::unique_ptr<MediaTracks> tracks) { |
653 void InitSegmentReceivedWrapper(std::unique_ptr<MediaTracks> tracks) { | 653 CHECK(tracks.get()); |
654 InitSegmentReceived(tracks); | 654 EXPECT_GT(tracks->tracks().size(), 0u); |
| 655 CHECK(chunk_demuxer_); |
| 656 // Verify that track ids are unique. |
| 657 std::set<MediaTrack::TrackId> track_ids; |
| 658 for (const auto& track : tracks->tracks()) { |
| 659 EXPECT_EQ(track_ids.end(), track_ids.find(track->id())); |
| 660 track_ids.insert(track->id()); |
| 661 } |
| 662 InitSegmentReceivedMock(tracks); |
655 } | 663 } |
656 | 664 |
657 MOCK_METHOD1(InitSegmentReceived, void(std::unique_ptr<MediaTracks>&)); | 665 MOCK_METHOD1(InitSegmentReceivedMock, void(std::unique_ptr<MediaTracks>&)); |
658 | 666 |
659 private: | 667 private: |
660 scoped_refptr<DecoderBuffer> file_data_; | 668 scoped_refptr<DecoderBuffer> file_data_; |
661 size_t current_position_; | 669 size_t current_position_; |
662 size_t initial_append_size_; | 670 size_t initial_append_size_; |
663 std::string mimetype_; | 671 std::string mimetype_; |
664 ChunkDemuxer* chunk_demuxer_; | 672 ChunkDemuxer* chunk_demuxer_; |
665 std::unique_ptr<Demuxer> owned_chunk_demuxer_; | 673 std::unique_ptr<Demuxer> owned_chunk_demuxer_; |
666 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_; | 674 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_; |
667 base::TimeDelta last_timestamp_offset_; | 675 base::TimeDelta last_timestamp_offset_; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
707 public: | 715 public: |
708 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source) { | 716 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source) { |
709 return StartPipelineWithMediaSource(source, kNormal); | 717 return StartPipelineWithMediaSource(source, kNormal); |
710 } | 718 } |
711 | 719 |
712 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source, | 720 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source, |
713 uint8_t test_type) { | 721 uint8_t test_type) { |
714 hashing_enabled_ = test_type & kHashed; | 722 hashing_enabled_ = test_type & kHashed; |
715 clockless_playback_ = test_type & kClockless; | 723 clockless_playback_ = test_type & kClockless; |
716 | 724 |
717 EXPECT_CALL(*source, InitSegmentReceived(_)).Times(AtLeast(1)); | 725 EXPECT_CALL(*source, InitSegmentReceivedMock(_)).Times(AtLeast(1)); |
718 EXPECT_CALL(*this, OnMetadata(_)) | 726 EXPECT_CALL(*this, OnMetadata(_)) |
719 .Times(AtMost(1)) | 727 .Times(AtMost(1)) |
720 .WillRepeatedly(SaveArg<0>(&metadata_)); | 728 .WillRepeatedly(SaveArg<0>(&metadata_)); |
721 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) | 729 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) |
722 .Times(AnyNumber()); | 730 .Times(AnyNumber()); |
723 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) | 731 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) |
724 .Times(AnyNumber()); | 732 .Times(AnyNumber()); |
725 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); | 733 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); |
726 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); | 734 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); |
727 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); | 735 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); |
728 | 736 |
729 // Encrypted content not used, so this is never called. | 737 // Encrypted content not used, so this is never called. |
730 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); | 738 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); |
731 | 739 |
732 demuxer_ = source->GetDemuxer(); | 740 demuxer_ = source->GetDemuxer(); |
733 pipeline_->Start(demuxer_.get(), CreateRenderer(), this, | 741 pipeline_->Start(demuxer_.get(), CreateRenderer(), this, |
734 base::Bind(&PipelineIntegrationTest::OnStatusCallback, | 742 base::Bind(&PipelineIntegrationTest::OnStatusCallback, |
735 base::Unretained(this))); | 743 base::Unretained(this))); |
736 message_loop_.Run(); | 744 message_loop_.Run(); |
737 EXPECT_EQ(PIPELINE_OK, pipeline_status_); | 745 EXPECT_EQ(PIPELINE_OK, pipeline_status_); |
738 return pipeline_status_; | 746 return pipeline_status_; |
739 } | 747 } |
740 | 748 |
741 void StartPipelineWithEncryptedMedia(MockMediaSource* source, | 749 void StartPipelineWithEncryptedMedia(MockMediaSource* source, |
742 FakeEncryptedMedia* encrypted_media) { | 750 FakeEncryptedMedia* encrypted_media) { |
743 EXPECT_CALL(*source, InitSegmentReceived(_)).Times(AtLeast(1)); | 751 EXPECT_CALL(*source, InitSegmentReceivedMock(_)).Times(AtLeast(1)); |
744 EXPECT_CALL(*this, OnMetadata(_)) | 752 EXPECT_CALL(*this, OnMetadata(_)) |
745 .Times(AtMost(1)) | 753 .Times(AtMost(1)) |
746 .WillRepeatedly(SaveArg<0>(&metadata_)); | 754 .WillRepeatedly(SaveArg<0>(&metadata_)); |
747 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) | 755 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) |
748 .Times(AnyNumber()); | 756 .Times(AnyNumber()); |
749 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) | 757 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) |
750 .Times(AnyNumber()); | 758 .Times(AnyNumber()); |
751 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); | 759 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); |
752 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); | 760 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); |
753 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); | 761 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); |
(...skipping 1465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2219 | 2227 |
2220 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 2228 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
2221 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 2229 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
2222 Play(); | 2230 Play(); |
2223 ASSERT_TRUE(WaitUntilOnEnded()); | 2231 ASSERT_TRUE(WaitUntilOnEnded()); |
2224 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 2232 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
2225 demuxer_->GetStartTime()); | 2233 demuxer_->GetStartTime()); |
2226 } | 2234 } |
2227 | 2235 |
2228 } // namespace media | 2236 } // namespace media |
OLD | NEW |