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

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: incorporate aaron's comments (10/16) Created 7 years, 2 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
86 demuxer_.reset(new FFmpegDemuxer(message_loop_.message_loop_proxy(), 87 demuxer_.reset(new FFmpegDemuxer(message_loop_.message_loop_proxy(),
87 data_source_.get(), 88 data_source_.get(),
88 need_key_cb, 89 need_key_cb,
90 enable_text,
89 new MediaLog())); 91 new MediaLog()));
90 } 92 }
91 93
94 void CreateDemuxer(const std::string& name) {
95 CreateDemuxerText(name, false);
96 }
97
92 MOCK_METHOD1(CheckPoint, void(int v)); 98 MOCK_METHOD1(CheckPoint, void(int v));
93 99
94 void InitializeDemuxer() { 100 void InitializeDemuxer() {
95 EXPECT_CALL(host_, SetDuration(_)); 101 EXPECT_CALL(host_, SetDuration(_));
96 WaitableMessageLoopEvent event; 102 WaitableMessageLoopEvent event;
97 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); 103 demuxer_->Initialize(&host_, event.GetPipelineStatusCB());
98 event.RunAndWaitForStatus(PIPELINE_OK); 104 event.RunAndWaitForStatus(PIPELINE_OK);
99 } 105 }
100 106
101 MOCK_METHOD2(OnReadDoneCalled, void(int, int64)); 107 MOCK_METHOD2(OnReadDoneCalled, void(int, int64));
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 // Audio stream should be Vorbis. 297 // Audio stream should be Vorbis.
292 stream = demuxer_->GetStream(DemuxerStream::AUDIO); 298 stream = demuxer_->GetStream(DemuxerStream::AUDIO);
293 ASSERT_TRUE(stream); 299 ASSERT_TRUE(stream);
294 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); 300 EXPECT_EQ(DemuxerStream::AUDIO, stream->type());
295 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); 301 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec());
296 302
297 // Unknown stream should never be present. 303 // Unknown stream should never be present.
298 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); 304 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN));
299 } 305 }
300 306
307 TEST_F(FFmpegDemuxerTest, Initialize_MultitrackText) {
308 // Open a file containing the following streams:
309 // Stream #0: Video (VP8)
310 // Stream #1: Audio (Vorbis)
311 // Stream #2: Text (WebVTT)
312
313 CreateDemuxerText("bear-vp8-webvtt.webm", true);
314 InitializeDemuxer();
315
316 // Video stream should be VP8.
317 DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::VIDEO);
318 ASSERT_TRUE(stream);
319 EXPECT_EQ(DemuxerStream::VIDEO, stream->type());
320 EXPECT_EQ(kCodecVP8, stream->video_decoder_config().codec());
321
322 // Audio stream should be Vorbis.
323 stream = demuxer_->GetStream(DemuxerStream::AUDIO);
324 ASSERT_TRUE(stream);
325 EXPECT_EQ(DemuxerStream::AUDIO, stream->type());
326 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec());
327
328 // Text stream should also be present.
329 ASSERT_EQ(host_.text_streams_.size(), 1);
330
331 // Unknown stream should never be present.
332 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN));
333 }
334
301 TEST_F(FFmpegDemuxerTest, Initialize_Encrypted) { 335 TEST_F(FFmpegDemuxerTest, Initialize_Encrypted) {
302 EXPECT_CALL(*this, NeedKeyCBMock(kWebMEncryptInitDataType, NotNull(), 336 EXPECT_CALL(*this, NeedKeyCBMock(kWebMEncryptInitDataType, NotNull(),
303 DecryptConfig::kDecryptionKeySize)) 337 DecryptConfig::kDecryptionKeySize))
304 .Times(Exactly(2)); 338 .Times(Exactly(2));
305 339
306 CreateDemuxer("bear-320x240-av_enc-av.webm"); 340 CreateDemuxer("bear-320x240-av_enc-av.webm");
307 InitializeDemuxer(); 341 InitializeDemuxer();
308 } 342 }
309 343
310 TEST_F(FFmpegDemuxerTest, Read_Audio) { 344 TEST_F(FFmpegDemuxerTest, Read_Audio) {
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { 610 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) {
577 #if !defined(USE_PROPRIETARY_CODECS) 611 #if !defined(USE_PROPRIETARY_CODECS)
578 return; 612 return;
579 #endif 613 #endif
580 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); 614 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4");
581 InitializeDemuxer(); 615 InitializeDemuxer();
582 ReadUntilEndOfStream(); 616 ReadUntilEndOfStream();
583 } 617 }
584 618
585 } // namespace media 619 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698