OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |