| 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 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 CHECK_NE(codecs_param_end, std::string::npos); | 622 CHECK_NE(codecs_param_end, std::string::npos); |
| 623 | 623 |
| 624 std::string codecs_param = mimetype_.substr( | 624 std::string codecs_param = mimetype_.substr( |
| 625 codecs_param_start, codecs_param_end - codecs_param_start); | 625 codecs_param_start, codecs_param_end - codecs_param_start); |
| 626 codecs = base::SplitString(codecs_param, ",", base::KEEP_WHITESPACE, | 626 codecs = base::SplitString(codecs_param, ",", base::KEEP_WHITESPACE, |
| 627 base::SPLIT_WANT_NONEMPTY); | 627 base::SPLIT_WANT_NONEMPTY); |
| 628 } | 628 } |
| 629 | 629 |
| 630 CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs), ChunkDemuxer::kOk); | 630 CHECK_EQ(chunk_demuxer_->AddId(kSourceId, type, codecs), ChunkDemuxer::kOk); |
| 631 chunk_demuxer_->SetTracksWatcher( | 631 chunk_demuxer_->SetTracksWatcher( |
| 632 kSourceId, base::Bind(&MockMediaSource::InitSegmentReceivedWrapper, | 632 kSourceId, base::Bind(&MockMediaSource::InitSegmentReceived, |
| 633 base::Unretained(this))); | 633 base::Unretained(this))); |
| 634 | 634 |
| 635 AppendData(initial_append_size_); | 635 AppendData(initial_append_size_); |
| 636 } | 636 } |
| 637 | 637 |
| 638 void OnEncryptedMediaInitData(EmeInitDataType init_data_type, | 638 void OnEncryptedMediaInitData(EmeInitDataType init_data_type, |
| 639 const std::vector<uint8_t>& init_data) { | 639 const std::vector<uint8_t>& init_data) { |
| 640 DCHECK(!init_data.empty()); | 640 DCHECK(!init_data.empty()); |
| 641 CHECK(!encrypted_media_init_data_cb_.is_null()); | 641 CHECK(!encrypted_media_init_data_cb_.is_null()); |
| 642 encrypted_media_init_data_cb_.Run(init_data_type, init_data); | 642 encrypted_media_init_data_cb_.Run(init_data_type, init_data); |
| 643 } | 643 } |
| 644 | 644 |
| 645 base::TimeDelta last_timestamp_offset() const { | 645 base::TimeDelta last_timestamp_offset() const { |
| 646 return last_timestamp_offset_; | 646 return last_timestamp_offset_; |
| 647 } | 647 } |
| 648 | 648 |
| 649 // A workaround for gtest mocks not allowing moving scoped_ptrs. | 649 void InitSegmentReceived(std::unique_ptr<MediaTracks> tracks) { |
| 650 void InitSegmentReceivedWrapper(std::unique_ptr<MediaTracks> tracks) { | 650 CHECK(tracks.get()); |
| 651 InitSegmentReceived(tracks); | 651 EXPECT_GT(tracks->tracks().size(), 0u); |
| 652 CHECK(chunk_demuxer_); |
| 653 // Generate track ids. |
| 654 std::vector<unsigned> track_ids; |
| 655 for (size_t track_id = 1; track_id <= tracks->tracks().size(); ++track_id) { |
| 656 track_ids.push_back(track_id); |
| 657 } |
| 658 |
| 659 chunk_demuxer_->OnTrackIdsAssigned(*tracks.get(), track_ids); |
| 660 InitSegmentReceivedMock(tracks); |
| 652 } | 661 } |
| 653 | 662 |
| 654 MOCK_METHOD1(InitSegmentReceived, void(std::unique_ptr<MediaTracks>&)); | 663 MOCK_METHOD1(InitSegmentReceivedMock, void(std::unique_ptr<MediaTracks>&)); |
| 655 | 664 |
| 656 private: | 665 private: |
| 657 scoped_refptr<DecoderBuffer> file_data_; | 666 scoped_refptr<DecoderBuffer> file_data_; |
| 658 size_t current_position_; | 667 size_t current_position_; |
| 659 size_t initial_append_size_; | 668 size_t initial_append_size_; |
| 660 std::string mimetype_; | 669 std::string mimetype_; |
| 661 ChunkDemuxer* chunk_demuxer_; | 670 ChunkDemuxer* chunk_demuxer_; |
| 662 std::unique_ptr<Demuxer> owned_chunk_demuxer_; | 671 std::unique_ptr<Demuxer> owned_chunk_demuxer_; |
| 663 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_; | 672 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_; |
| 664 base::TimeDelta last_timestamp_offset_; | 673 base::TimeDelta last_timestamp_offset_; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 public: | 713 public: |
| 705 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source) { | 714 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source) { |
| 706 return StartPipelineWithMediaSource(source, kNormal); | 715 return StartPipelineWithMediaSource(source, kNormal); |
| 707 } | 716 } |
| 708 | 717 |
| 709 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source, | 718 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source, |
| 710 uint8_t test_type) { | 719 uint8_t test_type) { |
| 711 hashing_enabled_ = test_type & kHashed; | 720 hashing_enabled_ = test_type & kHashed; |
| 712 clockless_playback_ = test_type & kClockless; | 721 clockless_playback_ = test_type & kClockless; |
| 713 | 722 |
| 714 EXPECT_CALL(*source, InitSegmentReceived(_)).Times(AtLeast(1)); | 723 EXPECT_CALL(*source, InitSegmentReceivedMock(_)).Times(AtLeast(1)); |
| 715 EXPECT_CALL(*this, OnMetadata(_)) | 724 EXPECT_CALL(*this, OnMetadata(_)) |
| 716 .Times(AtMost(1)) | 725 .Times(AtMost(1)) |
| 717 .WillRepeatedly(SaveArg<0>(&metadata_)); | 726 .WillRepeatedly(SaveArg<0>(&metadata_)); |
| 718 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) | 727 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) |
| 719 .Times(AnyNumber()); | 728 .Times(AnyNumber()); |
| 720 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) | 729 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) |
| 721 .Times(AnyNumber()); | 730 .Times(AnyNumber()); |
| 722 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); | 731 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); |
| 723 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); | 732 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); |
| 724 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); | 733 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); |
| 725 | 734 |
| 726 // Encrypted content not used, so this is never called. | 735 // Encrypted content not used, so this is never called. |
| 727 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); | 736 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); |
| 728 | 737 |
| 729 demuxer_ = source->GetDemuxer(); | 738 demuxer_ = source->GetDemuxer(); |
| 730 pipeline_->Start(demuxer_.get(), CreateRenderer(), this, | 739 pipeline_->Start(demuxer_.get(), CreateRenderer(), this, |
| 731 base::Bind(&PipelineIntegrationTest::OnStatusCallback, | 740 base::Bind(&PipelineIntegrationTest::OnStatusCallback, |
| 732 base::Unretained(this))); | 741 base::Unretained(this))); |
| 733 message_loop_.Run(); | 742 message_loop_.Run(); |
| 734 EXPECT_EQ(PIPELINE_OK, pipeline_status_); | 743 EXPECT_EQ(PIPELINE_OK, pipeline_status_); |
| 735 return pipeline_status_; | 744 return pipeline_status_; |
| 736 } | 745 } |
| 737 | 746 |
| 738 void StartPipelineWithEncryptedMedia(MockMediaSource* source, | 747 void StartPipelineWithEncryptedMedia(MockMediaSource* source, |
| 739 FakeEncryptedMedia* encrypted_media) { | 748 FakeEncryptedMedia* encrypted_media) { |
| 740 EXPECT_CALL(*source, InitSegmentReceived(_)).Times(AtLeast(1)); | 749 EXPECT_CALL(*source, InitSegmentReceivedMock(_)).Times(AtLeast(1)); |
| 741 EXPECT_CALL(*this, OnMetadata(_)) | 750 EXPECT_CALL(*this, OnMetadata(_)) |
| 742 .Times(AtMost(1)) | 751 .Times(AtMost(1)) |
| 743 .WillRepeatedly(SaveArg<0>(&metadata_)); | 752 .WillRepeatedly(SaveArg<0>(&metadata_)); |
| 744 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) | 753 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)) |
| 745 .Times(AnyNumber()); | 754 .Times(AnyNumber()); |
| 746 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) | 755 EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)) |
| 747 .Times(AnyNumber()); | 756 .Times(AnyNumber()); |
| 748 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); | 757 EXPECT_CALL(*this, OnDurationChange()).Times(AnyNumber()); |
| 749 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); | 758 EXPECT_CALL(*this, OnVideoNaturalSizeChange(_)).Times(AtMost(1)); |
| 750 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); | 759 EXPECT_CALL(*this, OnVideoOpacityChange(_)).Times(AtMost(1)); |
| (...skipping 1465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2216 | 2225 |
| 2217 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 2226 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
| 2218 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 2227 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
| 2219 Play(); | 2228 Play(); |
| 2220 ASSERT_TRUE(WaitUntilOnEnded()); | 2229 ASSERT_TRUE(WaitUntilOnEnded()); |
| 2221 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 2230 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
| 2222 demuxer_->GetStartTime()); | 2231 demuxer_->GetStartTime()); |
| 2223 } | 2232 } |
| 2224 | 2233 |
| 2225 } // namespace media | 2234 } // namespace media |
| OLD | NEW |