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

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

Issue 10829470: Support for parsing encrypted WebM streams by src. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressing comments Created 7 years, 9 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 | Annotate | Revision Log
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/file_util.h" 10 #include "base/file_util.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 EXPECT_TRUE(buffer->GetData()); 51 EXPECT_TRUE(buffer->GetData());
52 EXPECT_GT(buffer->GetDataSize(), 0); 52 EXPECT_GT(buffer->GetDataSize(), 0);
53 *got_eos_buffer = false; 53 *got_eos_buffer = false;
54 }; 54 };
55 55
56 56
57 // Fixture class to facilitate writing tests. Takes care of setting up the 57 // Fixture class to facilitate writing tests. Takes care of setting up the
58 // FFmpeg, pipeline and filter host mocks. 58 // FFmpeg, pipeline and filter host mocks.
59 class FFmpegDemuxerTest : public testing::Test { 59 class FFmpegDemuxerTest : public testing::Test {
60 protected: 60 protected:
61 FFmpegDemuxerTest() {} 61 FFmpegDemuxerTest() : need_key_called_(0) {}
62 62
63 virtual ~FFmpegDemuxerTest() { 63 virtual ~FFmpegDemuxerTest() {
64 if (demuxer_) { 64 if (demuxer_) {
65 demuxer_->Stop(MessageLoop::QuitWhenIdleClosure()); 65 demuxer_->Stop(MessageLoop::QuitWhenIdleClosure());
66 message_loop_.Run(); 66 message_loop_.Run();
67 } 67 }
68 68
69 demuxer_ = NULL; 69 demuxer_ = NULL;
70 } 70 }
71 71
72 void CreateDemuxer(const std::string& name) { 72 void CreateDemuxer(const std::string& name) {
73 CHECK(!demuxer_); 73 CHECK(!demuxer_);
74 74
75 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber()); 75 EXPECT_CALL(host_, SetTotalBytes(_)).Times(AnyNumber());
76 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber()); 76 EXPECT_CALL(host_, AddBufferedByteRange(_, _)).Times(AnyNumber());
77 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber()); 77 EXPECT_CALL(host_, AddBufferedTimeRange(_, _)).Times(AnyNumber());
78 78
79 CreateDataSource(name); 79 CreateDataSource(name);
80
81 media::FFmpegNeedKeyCB need_key_cb =
82 base::Bind(&FFmpegDemuxerTest::NeedKeyCB, base::Unretained(this));
80 demuxer_ = new FFmpegDemuxer(message_loop_.message_loop_proxy(), 83 demuxer_ = new FFmpegDemuxer(message_loop_.message_loop_proxy(),
81 data_source_); 84 data_source_,
85 need_key_cb);
82 } 86 }
83 87
84 MOCK_METHOD1(CheckPoint, void(int v)); 88 MOCK_METHOD1(CheckPoint, void(int v));
85 89
86 void InitializeDemuxer() { 90 void InitializeDemuxer() {
87 EXPECT_CALL(host_, SetDuration(_)); 91 EXPECT_CALL(host_, SetDuration(_));
88 WaitableMessageLoopEvent event; 92 WaitableMessageLoopEvent event;
89 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); 93 demuxer_->Initialize(&host_, event.GetPipelineStatusCB());
90 event.RunAndWaitForStatus(PIPELINE_OK); 94 event.RunAndWaitForStatus(PIPELINE_OK);
91 } 95 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 DemuxerStream* stream = demuxer_->GetStream(type); 134 DemuxerStream* stream = demuxer_->GetStream(type);
131 CHECK(stream); 135 CHECK(stream);
132 return static_cast<FFmpegDemuxerStream*>(stream)->stopped_; 136 return static_cast<FFmpegDemuxerStream*>(stream)->stopped_;
133 } 137 }
134 138
135 // Fixture members. 139 // Fixture members.
136 scoped_refptr<FileDataSource> data_source_; 140 scoped_refptr<FileDataSource> data_source_;
137 scoped_refptr<FFmpegDemuxer> demuxer_; 141 scoped_refptr<FFmpegDemuxer> demuxer_;
138 StrictMock<MockDemuxerHost> host_; 142 StrictMock<MockDemuxerHost> host_;
139 MessageLoop message_loop_; 143 MessageLoop message_loop_;
144 int need_key_called_;
140 145
141 AVFormatContext* format_context() { 146 AVFormatContext* format_context() {
142 return demuxer_->glue_->format_context(); 147 return demuxer_->glue_->format_context();
143 } 148 }
144 149
145 void ReadUntilEndOfStream() { 150 void ReadUntilEndOfStream() {
146 // We should expect an end of stream buffer. 151 // We should expect an end of stream buffer.
147 scoped_refptr<DemuxerStream> audio = 152 scoped_refptr<DemuxerStream> audio =
148 demuxer_->GetStream(DemuxerStream::AUDIO); 153 demuxer_->GetStream(DemuxerStream::AUDIO);
149 154
(...skipping 16 matching lines...) Expand all
166 171
167 file_path = file_path.Append(FILE_PATH_LITERAL("media")) 172 file_path = file_path.Append(FILE_PATH_LITERAL("media"))
168 .Append(FILE_PATH_LITERAL("test")) 173 .Append(FILE_PATH_LITERAL("test"))
169 .Append(FILE_PATH_LITERAL("data")) 174 .Append(FILE_PATH_LITERAL("data"))
170 .AppendASCII(name); 175 .AppendASCII(name);
171 176
172 data_source_ = new FileDataSource(); 177 data_source_ = new FileDataSource();
173 EXPECT_TRUE(data_source_->Initialize(file_path)); 178 EXPECT_TRUE(data_source_->Initialize(file_path));
174 } 179 }
175 180
181 void NeedKeyCB(const std::string& type,
ddorwin 2013/03/13 18:07:24 MOCK_METHOD...
fgalligan1 2013/03/13 19:05:26 Done.
182 scoped_array<uint8> init_data, int init_data_size) {
183 need_key_called_++;
184 }
185
176 DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest); 186 DISALLOW_COPY_AND_ASSIGN(FFmpegDemuxerTest);
177 }; 187 };
178 188
179 TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) { 189 TEST_F(FFmpegDemuxerTest, Initialize_OpenFails) {
180 // Simulate avformat_open_input() failing. 190 // Simulate avformat_open_input() failing.
181 CreateDemuxer("ten_byte_file"); 191 CreateDemuxer("ten_byte_file");
182 WaitableMessageLoopEvent event; 192 WaitableMessageLoopEvent event;
183 demuxer_->Initialize(&host_, event.GetPipelineStatusCB()); 193 demuxer_->Initialize(&host_, event.GetPipelineStatusCB());
184 event.RunAndWaitForStatus(DEMUXER_ERROR_COULD_NOT_OPEN); 194 event.RunAndWaitForStatus(DEMUXER_ERROR_COULD_NOT_OPEN);
185 } 195 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 // Audio stream should be Vorbis. 284 // Audio stream should be Vorbis.
275 stream = demuxer_->GetStream(DemuxerStream::AUDIO); 285 stream = demuxer_->GetStream(DemuxerStream::AUDIO);
276 ASSERT_TRUE(stream); 286 ASSERT_TRUE(stream);
277 EXPECT_EQ(DemuxerStream::AUDIO, stream->type()); 287 EXPECT_EQ(DemuxerStream::AUDIO, stream->type());
278 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec()); 288 EXPECT_EQ(kCodecVorbis, stream->audio_decoder_config().codec());
279 289
280 // Unknown stream should never be present. 290 // Unknown stream should never be present.
281 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN)); 291 EXPECT_FALSE(demuxer_->GetStream(DemuxerStream::UNKNOWN));
282 } 292 }
283 293
294 // TODO(fgalligan): Enable test when code to parse encrypted WebM files lands
295 // in Chromium's FFmpeg. crbug.com/189221
296 TEST_F(FFmpegDemuxerTest, DISABLED_Initialize_Encrypted) {
297 CreateDemuxer("bear-320x240-av_enc-av.webm");
298 InitializeDemuxer();
299
300 // NeedKey callback should have been called twice. Once for each encrypted
301 // stream.
302 EXPECT_EQ(2, need_key_called_);
ddorwin 2013/03/13 18:07:24 This is what mocks do well. Since this tests alrea
fgalligan1 2013/03/13 19:05:26 Done.
303 }
304
284 TEST_F(FFmpegDemuxerTest, Read_Audio) { 305 TEST_F(FFmpegDemuxerTest, Read_Audio) {
285 // We test that on a successful audio packet read. 306 // We test that on a successful audio packet read.
286 CreateDemuxer("bear-320x240.webm"); 307 CreateDemuxer("bear-320x240.webm");
287 InitializeDemuxer(); 308 InitializeDemuxer();
288 309
289 // Attempt a read from the audio stream and run the message loop until done. 310 // Attempt a read from the audio stream and run the message loop until done.
290 scoped_refptr<DemuxerStream> audio = 311 scoped_refptr<DemuxerStream> audio =
291 demuxer_->GetStream(DemuxerStream::AUDIO); 312 demuxer_->GetStream(DemuxerStream::AUDIO);
292 313
293 audio->Read(NewReadCB(FROM_HERE, 29, 0)); 314 audio->Read(NewReadCB(FROM_HERE, 29, 0));
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) { 642 TEST_F(FFmpegDemuxerTest, MP4_ZeroStszEntry) {
622 #if !defined(USE_PROPRIETARY_CODECS) 643 #if !defined(USE_PROPRIETARY_CODECS)
623 return; 644 return;
624 #endif 645 #endif
625 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4"); 646 CreateDemuxer("bear-1280x720-zero-stsz-entry.mp4");
626 InitializeDemuxer(); 647 InitializeDemuxer();
627 ReadUntilEndOfStream(); 648 ReadUntilEndOfStream();
628 } 649 }
629 650
630 } // namespace media 651 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698