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

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

Issue 53126: Demuxer stream now uses a callback instead of Assignable template. Cleaning ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 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') | no next file » | 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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 g_video_codec.width = 1280; 105 g_video_codec.width = 1280;
106 106
107 memset(&g_data_codec, 0, sizeof(g_data_codec)); 107 memset(&g_data_codec, 0, sizeof(g_data_codec));
108 g_data_codec.codec_type = CODEC_TYPE_DATA; 108 g_data_codec.codec_type = CODEC_TYPE_DATA;
109 g_data_codec.codec_id = CODEC_ID_NONE; 109 g_data_codec.codec_id = CODEC_ID_NONE;
110 110
111 // Initialize AVPacket structure. 111 // Initialize AVPacket structure.
112 memset(&g_packet, 0, sizeof(g_packet)); 112 memset(&g_packet, 0, sizeof(g_packet));
113 } 113 }
114 114
115 // Simple implementation of Assignable<Buffer> that lets us poke at values. 115 // Ref counted object so we can create callbacks to call DemuxerStream::Read().
116 class TestBuffer : public Assignable<Buffer> { 116 class TestReader : public base::RefCountedThreadSafe<TestReader> {
117 public: 117 public:
118 TestBuffer() : assigned_(false) {} 118 TestReader() : called_(false), expecting_call_(false) {}
119 virtual ~TestBuffer() {} 119 virtual ~TestReader() {}
120 120
121 // Assignable<Buffer> implementation. 121 void Reset() {
122 virtual void SetBuffer(Buffer* buffer) { 122 EXPECT_FALSE(expecting_call_);
123 buffer_ = buffer; 123 expecting_call_ = false;
124 called_ = false;
125 buffer_ = NULL;
124 } 126 }
125 127
126 void OnAssignment() { 128 void Read(DemuxerStream* stream) {
127 EXPECT_FALSE(assigned_); 129 EXPECT_FALSE(expecting_call_);
128 assigned_ = true; 130 called_ = false;
131 expecting_call_ = true;
132 stream->Read(NewCallback(this, &TestReader::ReadComplete));
133 }
134
135 void ReadComplete(Buffer* buffer) {
136 EXPECT_FALSE(called_);
137 EXPECT_TRUE(expecting_call_);
138 expecting_call_ = false;
139 called_ = true;
140 buffer_ = buffer;
129 } 141 }
130 142
131 // Mock getters/setters. 143 // Mock getters/setters.
132 Buffer* buffer() { return buffer_; } 144 Buffer* buffer() { return buffer_; }
133 bool assigned() { return assigned_; } 145 bool called() { return called_; }
146 bool expecting_call() { return expecting_call_; }
134 147
135 private: 148 private:
136 scoped_refptr<Buffer> buffer_; 149 scoped_refptr<Buffer> buffer_;
137 bool assigned_; 150 bool called_;
151 bool expecting_call_;
138 }; 152 };
139 153
140 } // namespace 154 } // namespace
141 155
142 TEST(FFmpegDemuxerTest, InitializeFailure) { 156 TEST(FFmpegDemuxerTest, InitializeFailure) {
143 InitializeFFmpegMocks(); 157 InitializeFFmpegMocks();
144 158
145 // Get FFmpegDemuxer's filter factory. 159 // Get FFmpegDemuxer's filter factory.
146 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory(); 160 scoped_refptr<FilterFactory> factory = FFmpegDemuxer::CreateFilterFactory();
147 161
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 ffmpeg_demuxer_stream = NULL; 343 ffmpeg_demuxer_stream = NULL;
330 EXPECT_TRUE(video_stream->QueryInterface(&ffmpeg_demuxer_stream)); 344 EXPECT_TRUE(video_stream->QueryInterface(&ffmpeg_demuxer_stream));
331 EXPECT_TRUE(ffmpeg_demuxer_stream); 345 EXPECT_TRUE(ffmpeg_demuxer_stream);
332 346
333 // Prepare our test audio packet. 347 // Prepare our test audio packet.
334 g_packet.stream_index = kAudio; 348 g_packet.stream_index = kAudio;
335 g_packet.data = audio_data; 349 g_packet.data = audio_data;
336 g_packet.size = kDataSize; 350 g_packet.size = kDataSize;
337 351
338 // Attempt a read from the audio stream and run the message loop until done. 352 // Attempt a read from the audio stream and run the message loop until done.
339 scoped_refptr<TestBuffer> buffer(new TestBuffer()); 353 scoped_refptr<TestReader> reader(new TestReader());
340 audio_stream->Read(buffer); 354 reader->Read(audio_stream);
341 pipeline.RunAllTasks(); 355 pipeline.RunAllTasks();
342 EXPECT_TRUE(buffer->assigned()); 356 EXPECT_TRUE(reader->called());
343 EXPECT_TRUE(buffer->buffer()); 357 EXPECT_TRUE(reader->buffer());
344 EXPECT_EQ(audio_data, buffer->buffer()->GetData()); 358 EXPECT_EQ(audio_data, reader->buffer()->GetData());
345 EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize()); 359 EXPECT_EQ(kDataSize, reader->buffer()->GetDataSize());
346 360
347 // Prepare our test video packet. 361 // Prepare our test video packet.
348 g_packet.stream_index = kVideo; 362 g_packet.stream_index = kVideo;
349 g_packet.data = video_data; 363 g_packet.data = video_data;
350 g_packet.size = kDataSize; 364 g_packet.size = kDataSize;
351 365
352 // Attempt a read from the video stream and run the message loop until done. 366 // Attempt a read from the video stream and run the message loop until done.
353 buffer = new TestBuffer(); 367 reader->Reset();
354 video_stream->Read(buffer); 368 reader->Read(video_stream);
355 pipeline.RunAllTasks(); 369 pipeline.RunAllTasks();
356 EXPECT_TRUE(buffer->assigned()); 370 EXPECT_TRUE(reader->called());
357 EXPECT_TRUE(buffer->buffer()); 371 EXPECT_TRUE(reader->buffer());
358 EXPECT_EQ(video_data, buffer->buffer()->GetData()); 372 EXPECT_EQ(video_data, reader->buffer()->GetData());
359 EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize()); 373 EXPECT_EQ(kDataSize, reader->buffer()->GetDataSize());
360 374
361 // Simulate end of stream. 375 // Simulate end of stream.
362 g_av_read_frame = AVERROR_IO; 376 g_av_read_frame = AVERROR_IO;
363 377
364 // Attempt a read from the audio stream and run the message loop until done. 378 // Attempt a read from the audio stream and run the message loop until done.
365 buffer = new TestBuffer(); 379 reader->Reset();
366 audio_stream->Read(buffer); 380 reader->Read(audio_stream);
367 pipeline.RunAllTasks(); 381 pipeline.RunAllTasks();
368 EXPECT_FALSE(buffer->assigned()); 382 EXPECT_FALSE(reader->called());
369 EXPECT_FALSE(buffer->buffer()); 383 EXPECT_FALSE(reader->buffer());
370 384
371 // Manually release buffer, which should release any remaining AVPackets. 385 // Manually release buffer, which should release any remaining AVPackets.
372 buffer = NULL; 386 reader = NULL;
373 EXPECT_EQ(0, g_oustanding_packets); 387 EXPECT_EQ(0, g_oustanding_packets);
374 } 388 }
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_demuxer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698