summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-27 01:48:36 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-27 01:48:36 +0000
commitc10f867fc0cc0acfe753663d24b4734e352d25e6 (patch)
tree93842ecf1a63651980779278ad928decb788b0ba /media
parent56159a7b3be077c33285f80da138bf1e95add7fd (diff)
downloadchromium_src-c10f867fc0cc0acfe753663d24b4734e352d25e6.zip
chromium_src-c10f867fc0cc0acfe753663d24b4734e352d25e6.tar.gz
chromium_src-c10f867fc0cc0acfe753663d24b4734e352d25e6.tar.bz2
Remove MockReader.
BUG=None TEST=All FFmpegDemuxerTest test cases that used to rely on MockReader still pass. Review URL: https://chromiumcodereview.appspot.com/10687003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@144366 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/base/mock_reader.h77
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc163
-rw-r--r--media/media.gyp1
3 files changed, 53 insertions, 188 deletions
diff --git a/media/base/mock_reader.h b/media/base/mock_reader.h
deleted file mode 100644
index b007684..0000000
--- a/media/base/mock_reader.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef MEDIA_BASE_MOCK_READER_H_
-#define MEDIA_BASE_MOCK_READER_H_
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/memory/ref_counted.h"
-#include "media/base/filters.h"
-
-namespace media {
-
-// Ref counted object so we can create callbacks for asynchronous Read()
-// methods for any filter type.
-template <class FilterType, class BufferType>
-class MockReader
- : public base::RefCountedThreadSafe<MockReader<FilterType, BufferType> > {
- public:
- MockReader()
- : called_(false),
- expecting_call_(false) {
- }
-
- virtual ~MockReader() {
- }
-
- // Prepares this object for another read.
- void Reset() {
- DCHECK(!expecting_call_);
- expecting_call_ = false;
- called_ = false;
- buffer_ = NULL;
- }
-
- // Executes an asynchronous read on the given filter.
- void Read(FilterType* filter) {
- DCHECK(!expecting_call_);
- called_ = false;
- expecting_call_ = true;
- filter->Read(base::Bind(&MockReader::OnReadComplete, this));
- }
-
- // Mock accessors.
- BufferType* buffer() { return buffer_; }
- bool called() { return called_; }
- bool expecting_call() { return expecting_call_; }
-
- private:
- void OnReadComplete(const scoped_refptr<BufferType>& buffer) {
- DCHECK(!called_);
- DCHECK(expecting_call_);
- expecting_call_ = false;
- called_ = true;
- buffer_ = buffer;
- }
-
- // Reference to the buffer provided in the callback.
- scoped_refptr<BufferType> buffer_;
-
- // Whether or not the callback was executed.
- bool called_;
-
- // Whether or not this reader was expecting a callback.
- bool expecting_call_;
-
- DISALLOW_COPY_AND_ASSIGN(MockReader);
-};
-
-// Commonly used reader types.
-typedef MockReader<DemuxerStream, DecoderBuffer> DemuxerStreamReader;
-
-} // namespace media
-
-#endif // MEDIA_BASE_MOCK_READER_H_
diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc
index 717b251..bfb31a2 100644
--- a/media/filters/ffmpeg_demuxer_unittest.cc
+++ b/media/filters/ffmpeg_demuxer_unittest.cc
@@ -6,6 +6,7 @@
#include <deque>
#include <string>
+#include "base/bind.h"
#include "base/file_path.h"
#include "base/file_util.h"
#include "base/path_service.h"
@@ -14,7 +15,6 @@
#include "media/base/mock_callback.h"
#include "media/base/mock_demuxer_host.h"
#include "media/base/mock_filters.h"
-#include "media/base/mock_reader.h"
#include "media/ffmpeg/ffmpeg_common.h"
#include "media/filters/ffmpeg_demuxer.h"
#include "media/filters/file_data_source.h"
@@ -39,6 +39,21 @@ MATCHER(IsEndOfStreamBuffer,
return arg->IsEndOfStream();
}
+static void EosOnReadDone(bool* got_eos_buffer,
+ const scoped_refptr<DecoderBuffer>& buffer) {
+ if (buffer->IsEndOfStream()) {
+ *got_eos_buffer = true;
+ EXPECT_TRUE(!buffer->GetData());
+ EXPECT_EQ(buffer->GetDataSize(), 0);
+ return;
+ }
+
+ EXPECT_TRUE(buffer->GetData());
+ EXPECT_GT(buffer->GetDataSize(), 0);
+ *got_eos_buffer = false;
+};
+
+
// Fixture class to facilitate writing tests. Takes care of setting up the
// FFmpeg, pipeline and filter host mocks.
class FFmpegDemuxerTest : public testing::Test {
@@ -80,22 +95,32 @@ class FFmpegDemuxerTest : public testing::Test {
message_loop_.RunAllPending();
}
+ MOCK_METHOD2(OnReadDoneCalled, void(int, int64));
+
// Verifies that |buffer| has a specific |size| and |timestamp|.
// |location| simply indicates where the call to this function was made.
// This makes it easier to track down where test failures occur.
- void ValidateBuffer(const tracked_objects::Location& location,
- const scoped_refptr<Buffer>& buffer,
- int size, int64 timestampInMicroseconds) {
+ void OnReadDone(const tracked_objects::Location& location,
+ int size, int64 timestampInMicroseconds,
+ const scoped_refptr<DecoderBuffer>& buffer) {
std::string location_str;
location.Write(true, false, &location_str);
location_str += "\n";
SCOPED_TRACE(location_str);
+ OnReadDoneCalled(size, timestampInMicroseconds);
EXPECT_TRUE(buffer.get() != NULL);
EXPECT_EQ(size, buffer->GetDataSize());
EXPECT_EQ(base::TimeDelta::FromMicroseconds(timestampInMicroseconds),
buffer->GetTimestamp());
}
+ DemuxerStream::ReadCB NewReadCB(const tracked_objects::Location& location,
+ int size, int64 timestampInMicroseconds) {
+ EXPECT_CALL(*this, OnReadDoneCalled(size, timestampInMicroseconds));
+ return base::Bind(&FFmpegDemuxerTest::OnReadDone, base::Unretained(this),
+ location, size, timestampInMicroseconds);
+ }
+
// Accessor to demuxer internals.
void set_duration_known(bool duration_known) {
demuxer_->duration_known_ = duration_known;
@@ -132,26 +157,12 @@ class FFmpegDemuxerTest : public testing::Test {
// We should expect an end of stream buffer.
scoped_refptr<DemuxerStream> audio =
demuxer_->GetStream(DemuxerStream::AUDIO);
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
bool got_eos_buffer = false;
const int kMaxBuffers = 170;
for (int i = 0; !got_eos_buffer && i < kMaxBuffers; i++) {
- reader->Read(audio);
+ audio->Read(base::Bind(&EosOnReadDone, &got_eos_buffer));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ASSERT_TRUE(reader->buffer());
-
- if (reader->buffer()->IsEndOfStream()) {
- got_eos_buffer = true;
- EXPECT_TRUE(reader->buffer()->GetData() == NULL);
- EXPECT_EQ(0, reader->buffer()->GetDataSize());
- break;
- }
-
- EXPECT_TRUE(reader->buffer()->GetData() != NULL);
- EXPECT_GT(reader->buffer()->GetDataSize(), 0);
- reader->Reset();
}
EXPECT_TRUE(got_eos_buffer);
@@ -291,17 +302,12 @@ TEST_F(FFmpegDemuxerTest, Read_Audio) {
// Attempt a read from the audio stream and run the message loop until done.
scoped_refptr<DemuxerStream> audio =
demuxer_->GetStream(DemuxerStream::AUDIO);
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
- reader->Read(audio);
+
+ audio->Read(NewReadCB(FROM_HERE, 29, 0));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 29, 0);
- reader->Reset();
- reader->Read(audio);
+ audio->Read(NewReadCB(FROM_HERE, 27, 3000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 27, 3000);
}
TEST_F(FFmpegDemuxerTest, Read_Video) {
@@ -312,18 +318,12 @@ TEST_F(FFmpegDemuxerTest, Read_Video) {
// Attempt a read from the video stream and run the message loop until done.
scoped_refptr<DemuxerStream> video =
demuxer_->GetStream(DemuxerStream::VIDEO);
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
- reader->Read(video);
+ video->Read(NewReadCB(FROM_HERE, 22084, 0));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 22084, 0);
- reader->Reset();
- reader->Read(video);
+ video->Read(NewReadCB(FROM_HERE, 1057, 33000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 1057, 33000);
}
TEST_F(FFmpegDemuxerTest, Read_VideoNonZeroStart) {
@@ -336,26 +336,17 @@ TEST_F(FFmpegDemuxerTest, Read_VideoNonZeroStart) {
demuxer_->GetStream(DemuxerStream::VIDEO);
scoped_refptr<DemuxerStream> audio =
demuxer_->GetStream(DemuxerStream::AUDIO);
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
// Check first buffer in video stream.
- reader->Read(video);
+ video->Read(NewReadCB(FROM_HERE, 5636, 400000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 5636, 400000);
- const base::TimeDelta video_timestamp = reader->buffer()->GetTimestamp();
// Check first buffer in audio stream.
- reader->Reset();
- reader->Read(audio);
+ audio->Read(NewReadCB(FROM_HERE, 165, 396000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 165, 396000);
- const base::TimeDelta audio_timestamp = reader->buffer()->GetTimestamp();
- // Verify that the start time is equal to the lowest timestamp.
- EXPECT_EQ(std::min(audio_timestamp, video_timestamp),
- demuxer_->GetStartTime());
+ // Verify that the start time is equal to the lowest timestamp (ie the audio).
+ EXPECT_EQ(demuxer_->GetStartTime().InMicroseconds(), 396000);
}
TEST_F(FFmpegDemuxerTest, Read_EndOfStream) {
@@ -389,14 +380,7 @@ TEST_F(FFmpegDemuxerTest, Seek) {
ASSERT_TRUE(audio);
// Read a video packet and release it.
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
- reader->Read(video);
- message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 22084, 0);
-
- // Release the video packet and verify the other packets are still queued.
- reader->Reset();
+ video->Read(NewReadCB(FROM_HERE, 22084, 0));
message_loop_.RunAllPending();
// Issue a simple forward seek, which should discard queued packets.
@@ -405,34 +389,19 @@ TEST_F(FFmpegDemuxerTest, Seek) {
message_loop_.RunAllPending();
// Audio read #1.
- reader->Read(audio);
+ audio->Read(NewReadCB(FROM_HERE, 145, 803000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 145, 803000);
// Audio read #2.
- reader->Reset();
- reader->Read(audio);
+ audio->Read(NewReadCB(FROM_HERE, 148, 826000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 148, 826000);
// Video read #1.
- reader->Reset();
- reader->Read(video);
+ video->Read(NewReadCB(FROM_HERE, 5425, 801000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 5425, 801000);
// Video read #2.
- reader->Reset();
- reader->Read(video);
- message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 1906, 834000);
-
- // Manually release the last reference to the buffer and verify it was freed.
- reader->Reset();
+ video->Read(NewReadCB(FROM_HERE, 1906, 834000));
message_loop_.RunAllPending();
}
@@ -560,18 +529,14 @@ TEST_F(FFmpegDemuxerTest, DisableAudioStream) {
EXPECT_TRUE(IsStreamStopped(DemuxerStream::AUDIO));
// Attempt a read from the video stream: it should return valid data.
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
- reader->Read(video);
+ video->Read(NewReadCB(FROM_HERE, 22084, 0));
message_loop_.RunAllPending();
- ASSERT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 22084, 0);
// Attempt a read from the audio stream: it should immediately return end of
// stream without requiring the message loop to read data.
- reader->Reset();
- reader->Read(audio);
- ASSERT_TRUE(reader->called());
- EXPECT_TRUE(reader->buffer()->IsEndOfStream());
+ bool got_eos_buffer = false;
+ audio->Read(base::Bind(&EosOnReadDone, &got_eos_buffer));
+ EXPECT_TRUE(got_eos_buffer);
}
TEST_F(FFmpegDemuxerTest, ProtocolRead) {
@@ -685,14 +650,7 @@ TEST_F(FFmpegDemuxerTest, SeekWithCuesBeforeFirstCluster) {
ASSERT_TRUE(audio);
// Read a video packet and release it.
- scoped_refptr<DemuxerStreamReader> reader(new DemuxerStreamReader());
- reader->Read(video);
- message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 22084, 0);
-
- // Release the video packet and verify the other packets are still queued.
- reader->Reset();
+ video->Read(NewReadCB(FROM_HERE, 22084, 0));
message_loop_.RunAllPending();
// Issue a simple forward seek, which should discard queued packets.
@@ -701,34 +659,19 @@ TEST_F(FFmpegDemuxerTest, SeekWithCuesBeforeFirstCluster) {
message_loop_.RunAllPending();
// Audio read #1.
- reader->Read(audio);
+ audio->Read(NewReadCB(FROM_HERE, 40, 2403000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 40, 2403000);
// Audio read #2.
- reader->Reset();
- reader->Read(audio);
+ audio->Read(NewReadCB(FROM_HERE, 42, 2406000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 42, 2406000);
// Video read #1.
- reader->Reset();
- reader->Read(video);
+ video->Read(NewReadCB(FROM_HERE, 5276, 2402000));
message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 5276, 2402000);
// Video read #2.
- reader->Reset();
- reader->Read(video);
- message_loop_.RunAllPending();
- EXPECT_TRUE(reader->called());
- ValidateBuffer(FROM_HERE, reader->buffer(), 1740, 2436000);
-
- // Manually release the last reference to the buffer and verify it was freed.
- reader->Reset();
+ video->Read(NewReadCB(FROM_HERE, 1740, 2436000));
message_loop_.RunAllPending();
}
diff --git a/media/media.gyp b/media/media.gyp
index 0b3a1f4..7ac3890 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -667,7 +667,6 @@
'base/djb2_unittest.cc',
'base/filter_collection_unittest.cc',
'base/h264_bitstream_converter_unittest.cc',
- 'base/mock_reader.h',
'base/pipeline_unittest.cc',
'base/ranges_unittest.cc',
'base/run_all_unittests.cc',