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 <algorithm> | 5 #include <algorithm> |
6 #include <deque> | 6 #include <deque> |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 FFmpegDemuxerTest() {} | 65 FFmpegDemuxerTest() {} |
66 | 66 |
67 virtual ~FFmpegDemuxerTest() { | 67 virtual ~FFmpegDemuxerTest() { |
68 if (demuxer_) { | 68 if (demuxer_) { |
69 WaitableMessageLoopEvent event; | 69 WaitableMessageLoopEvent event; |
70 demuxer_->Stop(event.GetClosure()); | 70 demuxer_->Stop(event.GetClosure()); |
71 event.RunAndWait(); | 71 event.RunAndWait(); |
72 } | 72 } |
73 } | 73 } |
74 | 74 |
75 void CreateDemuxer(const std::string& name) { | 75 void CreateDemuxerText(const std::string& name, bool enable_text) { |
76 CHECK(!demuxer_); | 76 CHECK(!demuxer_); |
77 | 77 |
78 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); | 78 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); |
79 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber()); | 79 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber()); |
80 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); | 80 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); |
81 | 81 |
82 CreateDataSource(name); | 82 CreateDataSource(name); |
83 | 83 |
84 Demuxer::NeedKeyCB need_key_cb = | 84 Demuxer::NeedKeyCB need_key_cb = |
85 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this)); | 85 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this)); |
86 | |
87 media::FFmpegAddTextTrackCB add_text_track_cb; | |
88 if (enable_text) { | |
89 add_text_track_cb = | |
90 base::Bind(&FFmpegDemuxerTest::AddTextTrackCB, | |
91 base::Unretained(this)); | |
92 } | |
93 | |
86 demuxer_.reset(new FFmpegDemuxer(message_loop_.message_loop_proxy(), | 94 demuxer_.reset(new FFmpegDemuxer(message_loop_.message_loop_proxy(), |
87 data_source_.get(), | 95 data_source_.get(), |
88 need_key_cb, | 96 need_key_cb, |
97 add_text_track_cb, | |
89 new MediaLog())); | 98 new MediaLog())); |
90 } | 99 } |
91 | 100 |
101 void CreateDemuxer(const std::string& name) { | |
102 CreateDemuxerText(name, false); | |
103 } | |
104 | |
92 MOCK_METHOD1(CheckPoint, void(int v)); | 105 MOCK_METHOD1(CheckPoint, void(int v)); |
93 | 106 |
94 void InitializeDemuxer() { | 107 void InitializeDemuxer() { |
95 EXPECT_CALL(host_, SetDuration(_)); | 108 EXPECT_CALL(host_, SetDuration(_)); |
96 WaitableMessageLoopEvent event; | 109 WaitableMessageLoopEvent event; |
97 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); | 110 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); |
98 event.RunAndWaitForStatus(PIPELINE_OK); | 111 event.RunAndWaitForStatus(PIPELINE_OK); |
99 } | 112 } |
100 | 113 |
101 MOCK_METHOD2(OnReadDoneCalled, void(int, int64)); | 114 MOCK_METHOD2(OnReadDoneCalled, void(int, int64)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
134 // (http://code.google.com/p/googletest/issues/detail?id=395) or when we use | 147 // (http://code.google.com/p/googletest/issues/detail?id=395) or when we use |
135 // std::string instead of scoped_ptr<uint8[]> (http://crbug.com/130689). | 148 // std::string instead of scoped_ptr<uint8[]> (http://crbug.com/130689). |
136 MOCK_METHOD3(NeedKeyCBMock, void(const std::string& type, | 149 MOCK_METHOD3(NeedKeyCBMock, void(const std::string& type, |
137 const uint8* init_data, int init_data_size)); | 150 const uint8* init_data, int init_data_size)); |
138 void NeedKeyCB(const std::string& type, | 151 void NeedKeyCB(const std::string& type, |
139 const std::vector<uint8>& init_data) { | 152 const std::vector<uint8>& init_data) { |
140 const uint8* init_data_ptr = init_data.empty() ? NULL : &init_data[0]; | 153 const uint8* init_data_ptr = init_data.empty() ? NULL : &init_data[0]; |
141 NeedKeyCBMock(type, init_data_ptr, init_data.size()); | 154 NeedKeyCBMock(type, init_data_ptr, init_data.size()); |
142 } | 155 } |
143 | 156 |
157 void AddTextTrackCB(media::TextKind kind, | |
158 const std::string& label, | |
159 const std::string& language, | |
160 int index) { | |
161 } | |
162 | |
144 // Accessor to demuxer internals. | 163 // Accessor to demuxer internals. |
145 void set_duration_known(bool duration_known) { | 164 void set_duration_known(bool duration_known) { |
146 demuxer_->duration_known_ = duration_known; | 165 demuxer_->duration_known_ = duration_known; |
147 } | 166 } |
148 | 167 |
149 bool IsStreamStopped(DemuxerStream::Type type) { | 168 bool IsStreamStopped(DemuxerStream::Type type) { |
150 DemuxerStream* stream = demuxer_->GetStream(type); | 169 DemuxerStream* stream = demuxer_->GetStream(type); |
151 CHECK(stream); | 170 CHECK(stream); |
152 return !static_cast<FFmpegDemuxerStream*>(stream)->demuxer_; | 171 return !static_cast<FFmpegDemuxerStream*>(stream)->demuxer_; |
153 } | 172 } |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
291 // Audio stream should be Vorbis. | 310 // Audio stream should be Vorbis. |
292 stream = demuxer_->GetStream(DemuxerStream::AUDIO); | 311 stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
293 ASSERT_TRUE(stream); | 312 ASSERT_TRUE(stream); |
294 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); | 313 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); |
295 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); | 314 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); |
296 | 315 |
297 // Unknown stream should never be present. | 316 // Unknown stream should never be present. |
298 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); | 317 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); |
299 } | 318 } |
300 | 319 |
320 TEST_F(FFmpegDemuxerTest, Initialize_MultitrackText) { | |
321 // Open a file containing the following streams: | |
322 // Stream #0: Video (VP8) | |
323 // Stream #1: Audio (Vorbis) | |
324 // Stream #2: Text (WebVTT) | |
325 | |
326 CreateDemuxerText("bear-vp8-webvtt.webm", true); | |
327 InitializeDemuxer(); | |
328 | |
329 // Video stream should be VP8. | |
330 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO); | |
331 ASSERT_TRUE(stream); | |
332 EXPECT_EQ(DemuxerStream::VIDEO, stream->type()); | |
333 EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec()); | |
334 | |
335 // Audio stream should be Vorbis. | |
336 stream = demuxer_->GetStream(DemuxerStream::AUDIO); | |
337 ASSERT_TRUE(stream); | |
338 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); | |
339 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); | |
340 | |
341 // Text stream should also be present. | |
342 stream = demuxer_->GetStream(DemuxerStream::TEXT); | |
343 ASSERT_TRUE(stream); | |
344 EXPECT_EQ(DemuxerStream::TEXT, stream->type()); | |
345 | |
346 // Unknown stream should never be present. | |
347 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); | |
348 } | |
349 | |
350 // TODO(matthewjheaney): Enable this test when the binary file lands. | |
351 TEST_F(FFmpegDemuxerTest, DISABLED_Initialize_MultitrackTwoTextStreams) { | |
352 // Open a file containing the following streams: | |
353 // Stream #0: Video (VP8) | |
354 // Stream #1: Audio (Vorbis) | |
355 // Stream #2: Text (WebVTT) | |
356 // Stream #3: Text (WebVTT) | |
357 | |
358 CreateDemuxerText("bear-vp8-webvtt2.webm", true); | |
359 InitializeDemuxer(); | |
360 | |
361 int stream_count = demuxer_->GetStreamCount(); | |
362 EXPECT_EQ(4, stream_count); | |
acolwell GONE FROM CHROMIUM
2013/09/12 00:15:15
nit: inline here since the count isn't used anywhe
Matthew Heaney (Chromium)
2013/09/13 19:51:54
Done.
Matthew Heaney (Chromium)
2013/09/20 23:53:54
This is OBE anyway, since GetStreamCount and frien
| |
363 | |
364 // Video stream should be VP8. | |
365 DemuxerStream* stream = demuxer_->GetStreamByIndex(0); | |
366 ASSERT_TRUE(stream); | |
367 EXPECT_EQ(DemuxerStream::VIDEO, stream->type()); | |
368 EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec()); | |
369 | |
370 // Audio stream should be Vorbis. | |
371 stream = demuxer_->GetStreamByIndex(1); | |
372 ASSERT_TRUE(stream); | |
373 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); | |
374 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); | |
375 | |
376 // First text stream should be present. | |
377 stream = demuxer_->GetStreamByIndex(2); | |
378 ASSERT_TRUE(stream); | |
379 EXPECT_EQ(DemuxerStream::TEXT, stream->type()); | |
380 | |
381 // Second text stream should be present. | |
382 stream = demuxer_->GetStreamByIndex(3); | |
383 ASSERT_TRUE(stream); | |
384 EXPECT_EQ(DemuxerStream::TEXT, stream->type()); | |
385 | |
386 // Unknown stream should never be present. | |
387 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); | |
388 } | |
389 | |
301 TEST_F(FFmpegDemuxerTest, Initialize_Encrypted) { | 390 TEST_F(FFmpegDemuxerTest, Initialize_Encrypted) { |
302 EXPECT_CALL(*this, NeedKeyCBMock(kWebMEncryptInitDataType, NotNull(), | 391 EXPECT_CALL(*this, NeedKeyCBMock(kWebMEncryptInitDataType, NotNull(), |
303 DecryptConfig::kDecryptionKeySize)) | 392 DecryptConfig::kDecryptionKeySize)) |
304 .Times(Exactly(2)); | 393 .Times(Exactly(2)); |
305 | 394 |
306 CreateDemuxer("bear-320x240-av_enc-av.webm"); | 395 CreateDemuxer("bear-320x240-av_enc-av.webm"); |
307 InitializeDemuxer(); | 396 InitializeDemuxer(); |
308 } | 397 } |
309 | 398 |
310 TEST_F(FFmpegDemuxerTest, Read_Audio) { | 399 TEST_F(FFmpegDemuxerTest, Read_Audio) { |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
576 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { | 665 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { |
577 #if !defined(USE_PROPRIETARY_CODECS) | 666 #if !defined(USE_PROPRIETARY_CODECS) |
578 return; | 667 return; |
579 #endif | 668 #endif |
580 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); | 669 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); |
581 InitializeDemuxer(); | 670 InitializeDemuxer(); |
582 ReadUntilEndOfStream(); | 671 ReadUntilEndOfStream(); |
583 } | 672 } |
584 | 673 |
585 } // namespace media | 674 } // namespace media |
OLD | NEW |