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 <algorithm> | 8 #include <algorithm> |
9 #include <deque> | 9 #include <deque> |
10 #include <string> | 10 #include <string> |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 message_loop_.task_runner(), data_source_.get(), | 103 message_loop_.task_runner(), data_source_.get(), |
104 encrypted_media_init_data_cb, tracks_updated_cb, new MediaLog())); | 104 encrypted_media_init_data_cb, tracks_updated_cb, new MediaLog())); |
105 } | 105 } |
106 | 106 |
107 MOCK_METHOD1(CheckPoint, void(int v)); | 107 MOCK_METHOD1(CheckPoint, void(int v)); |
108 | 108 |
109 void InitializeDemuxerInternal(bool enable_text, | 109 void InitializeDemuxerInternal(bool enable_text, |
110 media::PipelineStatus expected_pipeline_status, | 110 media::PipelineStatus expected_pipeline_status, |
111 base::Time timeline_offset) { | 111 base::Time timeline_offset) { |
112 if (expected_pipeline_status == PIPELINE_OK) | 112 if (expected_pipeline_status == PIPELINE_OK) |
113 EXPECT_CALL(host_, SetDuration(_)); | 113 EXPECT_CALL(host_, SetDuration(_)).Times(AnyNumber()); |
114 WaitableMessageLoopEvent event; | 114 WaitableMessageLoopEvent event; |
115 demuxer_->Initialize(&host_, event.GetPipelineStatusCB(), enable_text); | 115 demuxer_->Initialize(&host_, event.GetPipelineStatusCB(), enable_text); |
116 demuxer_->timeline_offset_ = timeline_offset; | 116 demuxer_->timeline_offset_ = timeline_offset; |
117 event.RunAndWaitForStatus(expected_pipeline_status); | 117 event.RunAndWaitForStatus(expected_pipeline_status); |
118 } | 118 } |
119 | 119 |
120 void InitializeDemuxer() { | 120 void InitializeDemuxer() { |
121 InitializeDemuxerInternal(/*enable_text=*/false, PIPELINE_OK, base::Time()); | 121 InitializeDemuxerInternal(/*enable_text=*/false, PIPELINE_OK, base::Time()); |
122 } | 122 } |
123 | 123 |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 MOCK_METHOD2(OnEncryptedMediaInitData, | 215 MOCK_METHOD2(OnEncryptedMediaInitData, |
216 void(EmeInitDataType init_data_type, | 216 void(EmeInitDataType init_data_type, |
217 const std::vector<uint8_t>& init_data)); | 217 const std::vector<uint8_t>& init_data)); |
218 | 218 |
219 void OnMediaTracksUpdated(std::unique_ptr<MediaTracks> tracks) { | 219 void OnMediaTracksUpdated(std::unique_ptr<MediaTracks> tracks) { |
220 CHECK(tracks.get()); | 220 CHECK(tracks.get()); |
221 media_tracks_ = std::move(tracks); | 221 media_tracks_ = std::move(tracks); |
222 } | 222 } |
223 | 223 |
224 // Accessor to demuxer internals. | 224 // Accessor to demuxer internals. |
225 void set_duration_known(bool duration_known) { | 225 void SetDurationKnown(bool duration_known) { |
226 demuxer_->duration_known_ = duration_known; | 226 demuxer_->duration_known_ = duration_known; |
| 227 if (!duration_known) |
| 228 demuxer_->duration_ = kInfiniteDuration; |
227 } | 229 } |
228 | 230 |
229 bool IsStreamStopped(DemuxerStream::Type type) { | 231 bool IsStreamStopped(DemuxerStream::Type type) { |
230 DemuxerStream* stream = demuxer_->GetStream(type); | 232 DemuxerStream* stream = demuxer_->GetStream(type); |
231 CHECK(stream); | 233 CHECK(stream); |
232 return !static_cast<FFmpegDemuxerStream*>(stream)->demuxer_; | 234 return !static_cast<FFmpegDemuxerStream*>(stream)->demuxer_; |
233 } | 235 } |
234 | 236 |
235 // Fixture members. | 237 // Fixture members. |
236 std::unique_ptr<FileDataSource> data_source_; | 238 std::unique_ptr<FileDataSource> data_source_; |
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
796 base::RunLoop().Run(); | 798 base::RunLoop().Run(); |
797 } | 799 } |
798 | 800 |
799 EXPECT_TRUE(got_eos_buffer); | 801 EXPECT_TRUE(got_eos_buffer); |
800 } | 802 } |
801 | 803 |
802 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration) { | 804 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration) { |
803 // Verify that end of stream buffers are created. | 805 // Verify that end of stream buffers are created. |
804 CreateDemuxer("bear-320x240.webm"); | 806 CreateDemuxer("bear-320x240.webm"); |
805 InitializeDemuxer(); | 807 InitializeDemuxer(); |
806 set_duration_known(false); | 808 SetDurationKnown(false); |
807 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2767))); | 809 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2767))); |
808 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); | 810 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); |
809 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::VIDEO)); | 811 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::VIDEO)); |
810 } | 812 } |
811 | 813 |
812 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_VideoOnly) { | 814 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_VideoOnly) { |
813 // Verify that end of stream buffers are created. | 815 // Verify that end of stream buffers are created. |
814 CreateDemuxer("bear-320x240-video-only.webm"); | 816 CreateDemuxer("bear-320x240-video-only.webm"); |
815 InitializeDemuxer(); | 817 InitializeDemuxer(); |
816 set_duration_known(false); | 818 SetDurationKnown(false); |
817 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2736))); | 819 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2736))); |
818 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::VIDEO)); | 820 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::VIDEO)); |
819 } | 821 } |
820 | 822 |
821 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_AudioOnly) { | 823 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_AudioOnly) { |
822 // Verify that end of stream buffers are created. | 824 // Verify that end of stream buffers are created. |
823 CreateDemuxer("bear-320x240-audio-only.webm"); | 825 CreateDemuxer("bear-320x240-audio-only.webm"); |
824 InitializeDemuxer(); | 826 InitializeDemuxer(); |
825 set_duration_known(false); | 827 SetDurationKnown(false); |
826 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2767))); | 828 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(2767))); |
827 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); | 829 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); |
828 } | 830 } |
829 | 831 |
830 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_UnsupportedStream) { | 832 TEST_F(FFmpegDemuxerTest, Read_EndOfStream_NoDuration_UnsupportedStream) { |
831 // Verify that end of stream buffers are created and we don't crash | 833 // Verify that end of stream buffers are created and we don't crash |
832 // if there are streams in the file that we don't support. | 834 // if there are streams in the file that we don't support. |
833 CreateDemuxer("vorbis_audio_wmv_video.mkv"); | 835 CreateDemuxer("vorbis_audio_wmv_video.mkv"); |
834 InitializeDemuxer(); | 836 InitializeDemuxer(); |
835 set_duration_known(false); | 837 SetDurationKnown(false); |
836 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(1014))); | 838 EXPECT_CALL(host_, SetDuration(base::TimeDelta::FromMilliseconds(1014))); |
837 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); | 839 ReadUntilEndOfStream(demuxer_->GetStream(DemuxerStream::AUDIO)); |
838 } | 840 } |
839 | 841 |
840 TEST_F(FFmpegDemuxerTest, Seek) { | 842 TEST_F(FFmpegDemuxerTest, Seek) { |
841 // We're testing that the demuxer frees all queued packets when it receives | 843 // We're testing that the demuxer frees all queued packets when it receives |
842 // a Seek(). | 844 // a Seek(). |
843 CreateDemuxer("bear-320x240.webm"); | 845 CreateDemuxer("bear-320x240.webm"); |
844 InitializeDemuxer(); | 846 InitializeDemuxer(); |
845 | 847 |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1395 | 1397 |
1396 const MediaTrack& audio_track = *(media_tracks_->tracks()[1]); | 1398 const MediaTrack& audio_track = *(media_tracks_->tracks()[1]); |
1397 EXPECT_EQ(audio_track.type(), MediaTrack::Audio); | 1399 EXPECT_EQ(audio_track.type(), MediaTrack::Audio); |
1398 EXPECT_EQ(audio_track.bytestream_track_id(), 2); | 1400 EXPECT_EQ(audio_track.bytestream_track_id(), 2); |
1399 EXPECT_EQ(audio_track.kind(), "main"); | 1401 EXPECT_EQ(audio_track.kind(), "main"); |
1400 EXPECT_EQ(audio_track.label(), ""); | 1402 EXPECT_EQ(audio_track.label(), ""); |
1401 EXPECT_EQ(audio_track.language(), ""); | 1403 EXPECT_EQ(audio_track.language(), ""); |
1402 } | 1404 } |
1403 | 1405 |
1404 } // namespace media | 1406 } // namespace media |
OLD | NEW |