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

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

Issue 23702007: Render inband text tracks in the media pipeline (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 3 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
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 <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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698