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

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

Issue 42635: Lots of files touched for a very simple change. Everywhere we used a const M... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 11 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
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | media/filters/ffmpeg_video_decoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <deque> 5 #include <deque>
6 6
7 #include "media/base/filter_host.h" 7 #include "media/base/filter_host.h"
8 #include "media/base/filters.h" 8 #include "media/base/filters.h"
9 #include "media/base/mock_filter_host.h" 9 #include "media/base/mock_filter_host.h"
10 #include "media/base/mock_media_filters.h" 10 #include "media/base/mock_media_filters.h"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 141
142 TEST(FFmpegDemuxerTest, InitializeFailure) { 142 TEST(FFmpegDemuxerTest, InitializeFailure) {
143 InitializeFFmpegMocks(); 143 InitializeFFmpegMocks();
144 144
145 // Get FFmpegDemuxer's filter factory. 145 // Get FFmpegDemuxer's filter factory.
146 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory(); 146 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory();
147 147
148 // Should only accept application/octet-stream type. 148 // Should only accept application/octet-stream type.
149 MediaFormat media_format; 149 MediaFormat media_format;
150 media_format.SetAsString(MediaFormat::kMimeType, "foo/x-bar"); 150 media_format.SetAsString(MediaFormat::kMimeType, "foo/x-bar");
151 scoped_refptr<Demuxer> demuxer(factory->Create<Demuxer>(&media_format)); 151 scoped_refptr<Demuxer> demuxer(factory->Create<Demuxer>(media_format));
152 ASSERT_FALSE(demuxer); 152 ASSERT_FALSE(demuxer);
153 media_format.Clear(); 153 media_format.Clear();
154 media_format.SetAsString(MediaFormat::kMimeType, 154 media_format.SetAsString(MediaFormat::kMimeType,
155 mime_type::kApplicationOctetStream); 155 mime_type::kApplicationOctetStream);
156 demuxer = factory->Create<Demuxer>(&media_format); 156 demuxer = factory->Create<Demuxer>(media_format);
157 ASSERT_TRUE(demuxer); 157 ASSERT_TRUE(demuxer);
158 158
159 // Prepare a filter host and data source for the demuxer. 159 // Prepare a filter host and data source for the demuxer.
160 MockPipeline pipeline; 160 MockPipeline pipeline;
161 scoped_ptr< MockFilterHost<Demuxer> > filter_host; 161 scoped_ptr< MockFilterHost<Demuxer> > filter_host;
162 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer)); 162 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer));
163 MockFilterConfig config; 163 MockFilterConfig config;
164 scoped_refptr<MockDataSource> data_source(new MockDataSource(&config)); 164 scoped_refptr<MockDataSource> data_source(new MockDataSource(&config));
165 165
166 // Simulate av_open_input_fail failing. 166 // Simulate av_open_input_fail failing.
167 g_av_open_input_file = AVERROR_IO; 167 g_av_open_input_file = AVERROR_IO;
168 g_av_find_stream_info = 0; 168 g_av_find_stream_info = 0;
169 EXPECT_FALSE(demuxer->Initialize(data_source)); 169 EXPECT_FALSE(demuxer->Initialize(data_source));
170 EXPECT_FALSE(filter_host->IsInitialized()); 170 EXPECT_FALSE(filter_host->IsInitialized());
171 EXPECT_EQ(DEMUXER_ERROR_COULD_NOT_OPEN, pipeline.GetError()); 171 EXPECT_EQ(DEMUXER_ERROR_COULD_NOT_OPEN, pipeline.GetError());
172 172
173 // Simulate av_find_stream_info failing. 173 // Simulate av_find_stream_info failing.
174 g_av_open_input_file = 0; 174 g_av_open_input_file = 0;
175 g_av_find_stream_info = AVERROR_IO; 175 g_av_find_stream_info = AVERROR_IO;
176 demuxer = factory->Create<Demuxer>(&media_format); 176 demuxer = factory->Create<Demuxer>(media_format);
177 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer)); 177 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer));
178 EXPECT_FALSE(demuxer->Initialize(data_source)); 178 EXPECT_FALSE(demuxer->Initialize(data_source));
179 EXPECT_FALSE(filter_host->IsInitialized()); 179 EXPECT_FALSE(filter_host->IsInitialized());
180 EXPECT_EQ(DEMUXER_ERROR_COULD_NOT_PARSE, pipeline.GetError()); 180 EXPECT_EQ(DEMUXER_ERROR_COULD_NOT_PARSE, pipeline.GetError());
181 181
182 // Simulate media with no parseable streams. 182 // Simulate media with no parseable streams.
183 InitializeFFmpegMocks(); 183 InitializeFFmpegMocks();
184 demuxer = factory->Create<Demuxer>(&media_format); 184 demuxer = factory->Create<Demuxer>(media_format);
185 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer)); 185 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer));
186 EXPECT_FALSE(demuxer->Initialize(data_source)); 186 EXPECT_FALSE(demuxer->Initialize(data_source));
187 EXPECT_FALSE(filter_host->IsInitialized()); 187 EXPECT_FALSE(filter_host->IsInitialized());
188 EXPECT_EQ(DEMUXER_ERROR_NO_SUPPORTED_STREAMS, pipeline.GetError()); 188 EXPECT_EQ(DEMUXER_ERROR_NO_SUPPORTED_STREAMS, pipeline.GetError());
189 189
190 // Simulate media with a data stream but no audio or video streams. 190 // Simulate media with a data stream but no audio or video streams.
191 g_format.nb_streams = 1; 191 g_format.nb_streams = 1;
192 g_format.streams[0] = &g_streams[0]; 192 g_format.streams[0] = &g_streams[0];
193 g_streams[0].codec = &g_data_codec; 193 g_streams[0].codec = &g_data_codec;
194 g_streams[0].duration = 10; 194 g_streams[0].duration = 10;
195 demuxer = factory->Create<Demuxer>(&media_format); 195 demuxer = factory->Create<Demuxer>(media_format);
196 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer)); 196 filter_host.reset(new MockFilterHost<Demuxer>(&pipeline, demuxer));
197 EXPECT_FALSE(demuxer->Initialize(data_source)); 197 EXPECT_FALSE(demuxer->Initialize(data_source));
198 EXPECT_FALSE(filter_host->IsInitialized()); 198 EXPECT_FALSE(filter_host->IsInitialized());
199 EXPECT_EQ(DEMUXER_ERROR_NO_SUPPORTED_STREAMS, pipeline.GetError()); 199 EXPECT_EQ(DEMUXER_ERROR_NO_SUPPORTED_STREAMS, pipeline.GetError());
200 } 200 }
201 201
202 TEST(FFmpegDemuxerTest, InitializeStreams) { 202 TEST(FFmpegDemuxerTest, InitializeStreams) {
203 // Simulate media with a data stream, a video stream and audio stream. 203 // Simulate media with a data stream, a video stream and audio stream.
204 InitializeFFmpegMocks(); 204 InitializeFFmpegMocks();
205 g_format.nb_streams = 3; 205 g_format.nb_streams = 3;
(...skipping 13 matching lines...) Expand all
219 // Create our data source. 219 // Create our data source.
220 MockFilterConfig config; 220 MockFilterConfig config;
221 scoped_refptr<MockDataSource> data_source = new MockDataSource(&config); 221 scoped_refptr<MockDataSource> data_source = new MockDataSource(&config);
222 MockFilterHost<DataSource> filter_host_a(&pipeline, data_source); 222 MockFilterHost<DataSource> filter_host_a(&pipeline, data_source);
223 EXPECT_TRUE(data_source->Initialize("foo")); 223 EXPECT_TRUE(data_source->Initialize("foo"));
224 EXPECT_TRUE(filter_host_a.IsInitialized()); 224 EXPECT_TRUE(filter_host_a.IsInitialized());
225 225
226 // Create our demuxer. 226 // Create our demuxer.
227 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory(); 227 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory();
228 scoped_refptr<Demuxer> demuxer 228 scoped_refptr<Demuxer> demuxer
229 = factory->Create<Demuxer>(data_source->GetMediaFormat()); 229 = factory->Create<Demuxer>(data_source->media_format());
230 EXPECT_TRUE(demuxer); 230 EXPECT_TRUE(demuxer);
231 MockFilterHost<Demuxer> filter_host_b(&pipeline, demuxer); 231 MockFilterHost<Demuxer> filter_host_b(&pipeline, demuxer);
232 EXPECT_TRUE(demuxer->Initialize(data_source)); 232 EXPECT_TRUE(demuxer->Initialize(data_source));
233 EXPECT_TRUE(filter_host_b.IsInitialized()); 233 EXPECT_TRUE(filter_host_b.IsInitialized());
234 EXPECT_EQ(PIPELINE_OK, pipeline.GetError()); 234 EXPECT_EQ(PIPELINE_OK, pipeline.GetError());
235 235
236 // Since we ignore data streams, the duration should be equal to the video 236 // Since we ignore data streams, the duration should be equal to the video
237 // stream's duration. 237 // stream's duration.
238 EXPECT_EQ(g_streams[1].duration, pipeline.GetDuration().InMicroseconds()); 238 EXPECT_EQ(g_streams[1].duration, pipeline.GetDuration().InMicroseconds());
239 239
240 // Verify that 2 out of 3 streams were created. 240 // Verify that 2 out of 3 streams were created.
241 EXPECT_EQ(2, demuxer->GetNumberOfStreams()); 241 EXPECT_EQ(2, demuxer->GetNumberOfStreams());
242 242
243 // First stream should be video. 243 // First stream should be video.
244 scoped_refptr<DemuxerStream> stream = demuxer->GetStream(0); 244 scoped_refptr<DemuxerStream> stream = demuxer->GetStream(0);
245 ASSERT_TRUE(stream); 245 ASSERT_TRUE(stream);
246 const MediaFormat* stream_format = stream->GetMediaFormat();
247 std::string mime_type; 246 std::string mime_type;
248 int result; 247 int result;
249 EXPECT_TRUE(stream_format->GetAsString(MediaFormat::kMimeType, &mime_type)); 248 EXPECT_TRUE(
249 stream->media_format().GetAsString(MediaFormat::kMimeType, &mime_type));
250 EXPECT_STREQ(mime_type::kFFmpegVideo, mime_type.c_str()); 250 EXPECT_STREQ(mime_type::kFFmpegVideo, mime_type.c_str());
251 EXPECT_TRUE(stream_format->GetAsInteger(kFFmpegCodecID, &result)); 251 EXPECT_TRUE(
252 stream->media_format().GetAsInteger(kFFmpegCodecID, &result));
252 EXPECT_EQ(CODEC_ID_THEORA, static_cast<CodecID>(result)); 253 EXPECT_EQ(CODEC_ID_THEORA, static_cast<CodecID>(result));
253 EXPECT_TRUE(stream_format->GetAsInteger(MediaFormat::kHeight, &result)); 254 EXPECT_TRUE(
255 stream->media_format().GetAsInteger(MediaFormat::kHeight, &result));
254 EXPECT_EQ(g_video_codec.height, result); 256 EXPECT_EQ(g_video_codec.height, result);
255 EXPECT_TRUE(stream_format->GetAsInteger(MediaFormat::kWidth, &result)); 257 EXPECT_TRUE(
258 stream->media_format().GetAsInteger(MediaFormat::kWidth, &result));
256 EXPECT_EQ(g_video_codec.width, result); 259 EXPECT_EQ(g_video_codec.width, result);
257 260
258 // Second stream should be audio. 261 // Second stream should be audio.
259 stream = demuxer->GetStream(1); 262 stream = demuxer->GetStream(1);
260 ASSERT_TRUE(stream); 263 ASSERT_TRUE(stream);
261 stream_format = stream->GetMediaFormat(); 264 EXPECT_TRUE(
262 EXPECT_TRUE(stream_format->GetAsString(MediaFormat::kMimeType, &mime_type)); 265 stream->media_format().GetAsString(MediaFormat::kMimeType, &mime_type));
263 EXPECT_STREQ(mime_type::kFFmpegAudio, mime_type.c_str()); 266 EXPECT_STREQ(mime_type::kFFmpegAudio, mime_type.c_str());
264 EXPECT_TRUE(stream_format->GetAsInteger(kFFmpegCodecID, &result)); 267 EXPECT_TRUE(
268 stream->media_format().GetAsInteger(kFFmpegCodecID, &result));
265 EXPECT_EQ(CODEC_ID_VORBIS, static_cast<CodecID>(result)); 269 EXPECT_EQ(CODEC_ID_VORBIS, static_cast<CodecID>(result));
266 EXPECT_TRUE(stream_format->GetAsInteger(MediaFormat::kChannels, &result)); 270 EXPECT_TRUE(
271 stream->media_format().GetAsInteger(MediaFormat::kChannels, &result));
267 EXPECT_EQ(g_audio_codec.channels, result); 272 EXPECT_EQ(g_audio_codec.channels, result);
268 EXPECT_TRUE(stream_format->GetAsInteger(MediaFormat::kSampleRate, &result)); 273 EXPECT_TRUE(
274 stream->media_format().GetAsInteger(MediaFormat::kSampleRate, &result));
269 EXPECT_EQ(g_audio_codec.sample_rate, result); 275 EXPECT_EQ(g_audio_codec.sample_rate, result);
270 } 276 }
271 277
272 TEST(FFmpegDemuxerTest, Read) { 278 TEST(FFmpegDemuxerTest, Read) {
273 // Prepare some test data. 279 // Prepare some test data.
274 const int kAudio = 0; 280 const int kAudio = 0;
275 const int kVideo = 1; 281 const int kVideo = 1;
276 const size_t kDataSize = 4; 282 const size_t kDataSize = 4;
277 uint8 audio_data[kDataSize] = {0, 1, 2, 3}; 283 uint8 audio_data[kDataSize] = {0, 1, 2, 3};
278 uint8 video_data[kDataSize] = {4, 5, 6, 7}; 284 uint8 video_data[kDataSize] = {4, 5, 6, 7};
(...skipping 14 matching lines...) Expand all
293 // Create our data source. 299 // Create our data source.
294 MockFilterConfig config; 300 MockFilterConfig config;
295 scoped_refptr<MockDataSource> data_source = new MockDataSource(&config); 301 scoped_refptr<MockDataSource> data_source = new MockDataSource(&config);
296 MockFilterHost<DataSource> filter_host_a(&pipeline, data_source); 302 MockFilterHost<DataSource> filter_host_a(&pipeline, data_source);
297 EXPECT_TRUE(data_source->Initialize("foo")); 303 EXPECT_TRUE(data_source->Initialize("foo"));
298 EXPECT_TRUE(filter_host_a.IsInitialized()); 304 EXPECT_TRUE(filter_host_a.IsInitialized());
299 305
300 // Create our demuxer. 306 // Create our demuxer.
301 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory(); 307 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory();
302 scoped_refptr<Demuxer> demuxer 308 scoped_refptr<Demuxer> demuxer
303 = factory->Create<Demuxer>(data_source->GetMediaFormat()); 309 = factory->Create<Demuxer>(data_source->media_format());
304 EXPECT_TRUE(demuxer); 310 EXPECT_TRUE(demuxer);
305 MockFilterHost<Demuxer> filter_host_b(&pipeline, demuxer); 311 MockFilterHost<Demuxer> filter_host_b(&pipeline, demuxer);
306 EXPECT_TRUE(demuxer->Initialize(data_source)); 312 EXPECT_TRUE(demuxer->Initialize(data_source));
307 EXPECT_TRUE(filter_host_b.IsInitialized()); 313 EXPECT_TRUE(filter_host_b.IsInitialized());
308 EXPECT_EQ(PIPELINE_OK, pipeline.GetError()); 314 EXPECT_EQ(PIPELINE_OK, pipeline.GetError());
309 315
310 // Verify both streams were created. 316 // Verify both streams were created.
311 EXPECT_EQ(2, demuxer->GetNumberOfStreams()); 317 EXPECT_EQ(2, demuxer->GetNumberOfStreams());
312 318
313 // Get our streams. 319 // Get our streams.
(...skipping 14 matching lines...) Expand all
328 g_packet.stream_index = kAudio; 334 g_packet.stream_index = kAudio;
329 g_packet.data = audio_data; 335 g_packet.data = audio_data;
330 g_packet.size = kDataSize; 336 g_packet.size = kDataSize;
331 337
332 // Attempt a read from the audio stream and run the message loop until done. 338 // Attempt a read from the audio stream and run the message loop until done.
333 scoped_refptr<TestBuffer> buffer(new TestBuffer()); 339 scoped_refptr<TestBuffer> buffer(new TestBuffer());
334 audio_stream->Read(buffer); 340 audio_stream->Read(buffer);
335 pipeline.RunAllTasks(); 341 pipeline.RunAllTasks();
336 EXPECT_TRUE(buffer->assigned()); 342 EXPECT_TRUE(buffer->assigned());
337 EXPECT_TRUE(buffer->buffer()); 343 EXPECT_TRUE(buffer->buffer());
338 EXPECT_EQ(audio_data, (uint8*)buffer->buffer()->GetData()); 344 EXPECT_EQ(audio_data, buffer->buffer()->GetData());
339 EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize()); 345 EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize());
340 346
341 // Prepare our test video packet. 347 // Prepare our test video packet.
342 g_packet.stream_index = kVideo; 348 g_packet.stream_index = kVideo;
343 g_packet.data = video_data; 349 g_packet.data = video_data;
344 g_packet.size = kDataSize; 350 g_packet.size = kDataSize;
345 351
346 // Attempt a read from the video stream and run the message loop until done. 352 // Attempt a read from the video stream and run the message loop until done.
347 buffer = new TestBuffer(); 353 buffer = new TestBuffer();
348 video_stream->Read(buffer); 354 video_stream->Read(buffer);
349 pipeline.RunAllTasks(); 355 pipeline.RunAllTasks();
350 EXPECT_TRUE(buffer->assigned()); 356 EXPECT_TRUE(buffer->assigned());
351 EXPECT_TRUE(buffer->buffer()); 357 EXPECT_TRUE(buffer->buffer());
352 EXPECT_EQ(video_data, (uint8*)buffer->buffer()->GetData()); 358 EXPECT_EQ(video_data, buffer->buffer()->GetData());
353 EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize()); 359 EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize());
354 360
355 // Simulate end of stream. 361 // Simulate end of stream.
356 g_av_read_frame = AVERROR_IO; 362 g_av_read_frame = AVERROR_IO;
357 363
358 // Attempt a read from the audio stream and run the message loop until done. 364 // Attempt a read from the audio stream and run the message loop until done.
359 buffer = new TestBuffer(); 365 buffer = new TestBuffer();
360 audio_stream->Read(buffer); 366 audio_stream->Read(buffer);
361 pipeline.RunAllTasks(); 367 pipeline.RunAllTasks();
362 EXPECT_FALSE(buffer->assigned()); 368 EXPECT_FALSE(buffer->assigned());
363 EXPECT_FALSE(buffer->buffer()); 369 EXPECT_FALSE(buffer->buffer());
364 370
365 // Manually release buffer, which should release any remaining AVPackets. 371 // Manually release buffer, which should release any remaining AVPackets.
366 buffer = NULL; 372 buffer = NULL;
367 EXPECT_EQ(0, g_oustanding_packets); 373 EXPECT_EQ(0, g_oustanding_packets);
368 } 374 }
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | media/filters/ffmpeg_video_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698