Index: media/filters/ffmpeg_demuxer_unittest.cc |
=================================================================== |
--- media/filters/ffmpeg_demuxer_unittest.cc (revision 12628) |
+++ media/filters/ffmpeg_demuxer_unittest.cc (working copy) |
@@ -112,29 +112,43 @@ |
memset(&g_packet, 0, sizeof(g_packet)); |
} |
-// Simple implementation of Assignable<Buffer> that lets us poke at values. |
-class TestBuffer : public Assignable<Buffer> { |
+// Ref counted object so we can create callbacks to call DemuxerStream::Read(). |
+class TestReader : public base::RefCountedThreadSafe<TestReader> { |
public: |
- TestBuffer() : assigned_(false) {} |
- virtual ~TestBuffer() {} |
+ TestReader() : called_(false), expecting_call_(false) {} |
+ virtual ~TestReader() {} |
- // Assignable<Buffer> implementation. |
- virtual void SetBuffer(Buffer* buffer) { |
- buffer_ = buffer; |
+ void Reset() { |
+ EXPECT_FALSE(expecting_call_); |
+ expecting_call_ = false; |
+ called_ = false; |
+ buffer_ = NULL; |
} |
- void OnAssignment() { |
- EXPECT_FALSE(assigned_); |
- assigned_ = true; |
+ void Read(DemuxerStream* stream) { |
+ EXPECT_FALSE(expecting_call_); |
+ called_ = false; |
+ expecting_call_ = true; |
+ stream->Read(NewCallback(this, &TestReader::ReadComplete)); |
} |
+ void ReadComplete(Buffer* buffer) { |
+ EXPECT_FALSE(called_); |
+ EXPECT_TRUE(expecting_call_); |
+ expecting_call_ = false; |
+ called_ = true; |
+ buffer_ = buffer; |
+ } |
+ |
// Mock getters/setters. |
Buffer* buffer() { return buffer_; } |
- bool assigned() { return assigned_; } |
+ bool called() { return called_; } |
+ bool expecting_call() { return expecting_call_; } |
private: |
scoped_refptr<Buffer> buffer_; |
- bool assigned_; |
+ bool called_; |
+ bool expecting_call_; |
}; |
} // namespace |
@@ -336,13 +350,13 @@ |
g_packet.size = kDataSize; |
// Attempt a read from the audio stream and run the message loop until done. |
- scoped_refptr<TestBuffer> buffer(new TestBuffer()); |
- audio_stream->Read(buffer); |
+ scoped_refptr<TestReader> reader(new TestReader()); |
+ reader->Read(audio_stream); |
pipeline.RunAllTasks(); |
- EXPECT_TRUE(buffer->assigned()); |
- EXPECT_TRUE(buffer->buffer()); |
- EXPECT_EQ(audio_data, buffer->buffer()->GetData()); |
- EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize()); |
+ EXPECT_TRUE(reader->called()); |
+ EXPECT_TRUE(reader->buffer()); |
+ EXPECT_EQ(audio_data, reader->buffer()->GetData()); |
+ EXPECT_EQ(kDataSize, reader->buffer()->GetDataSize()); |
// Prepare our test video packet. |
g_packet.stream_index = kVideo; |
@@ -350,25 +364,25 @@ |
g_packet.size = kDataSize; |
// Attempt a read from the video stream and run the message loop until done. |
- buffer = new TestBuffer(); |
- video_stream->Read(buffer); |
+ reader->Reset(); |
+ reader->Read(video_stream); |
pipeline.RunAllTasks(); |
- EXPECT_TRUE(buffer->assigned()); |
- EXPECT_TRUE(buffer->buffer()); |
- EXPECT_EQ(video_data, buffer->buffer()->GetData()); |
- EXPECT_EQ(kDataSize, buffer->buffer()->GetDataSize()); |
+ EXPECT_TRUE(reader->called()); |
+ EXPECT_TRUE(reader->buffer()); |
+ EXPECT_EQ(video_data, reader->buffer()->GetData()); |
+ EXPECT_EQ(kDataSize, reader->buffer()->GetDataSize()); |
// Simulate end of stream. |
g_av_read_frame = AVERROR_IO; |
// Attempt a read from the audio stream and run the message loop until done. |
- buffer = new TestBuffer(); |
- audio_stream->Read(buffer); |
+ reader->Reset(); |
+ reader->Read(audio_stream); |
pipeline.RunAllTasks(); |
- EXPECT_FALSE(buffer->assigned()); |
- EXPECT_FALSE(buffer->buffer()); |
+ EXPECT_FALSE(reader->called()); |
+ EXPECT_FALSE(reader->buffer()); |
// Manually release buffer, which should release any remaining AVPackets. |
- buffer = NULL; |
+ reader = NULL; |
EXPECT_EQ(0, g_oustanding_packets); |
} |