| 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 |