summaryrefslogtreecommitdiffstats
path: root/media/base
diff options
context:
space:
mode:
authortkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-12 09:01:00 +0000
committertkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-12 09:01:00 +0000
commit15af2b58ceeddb4bdb08fc9c58f9f9de3b372687 (patch)
treea28e94c785f28ba8fdd969fb80e4066e3ee0b572 /media/base
parent193bacdf287c87aab760f6ea25fff8bda6326c60 (diff)
downloadchromium_src-15af2b58ceeddb4bdb08fc9c58f9f9de3b372687.zip
chromium_src-15af2b58ceeddb4bdb08fc9c58f9f9de3b372687.tar.gz
chromium_src-15af2b58ceeddb4bdb08fc9c58f9f9de3b372687.tar.bz2
Revert 136679 - Delete MockDataSource, remove IsLocalSource & IsSeekable from Demuxer/Pipeline.
It broke LayoutTests/http/tests/media/media-source/webm/video-media-source-seek.html and video-media-source-state-changes.html. http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&showLargeExpectations=true&tests=http%2Ftests%2Fmedia%2Fmedia-source%2Fwebm%2Fvideo-media-source-seek.html%2Chttp%2Ftests%2Fmedia%2Fmedia-source%2Fwebm%2Fvideo-media-source-state-changes.html Review URL: https://chromiumcodereview.appspot.com/10378100 TBR=fischman@chromium.org Review URL: https://chromiumcodereview.appspot.com/10378119 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@136753 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base')
-rw-r--r--media/base/demuxer.h9
-rw-r--r--media/base/mock_filters.cc23
-rw-r--r--media/base/mock_filters.h37
-rw-r--r--media/base/pipeline.cc10
-rw-r--r--media/base/pipeline.h8
-rw-r--r--media/base/pipeline_unittest.cc24
6 files changed, 110 insertions, 1 deletions
diff --git a/media/base/demuxer.h b/media/base/demuxer.h
index a8cf50b..1e913d4 100644
--- a/media/base/demuxer.h
+++ b/media/base/demuxer.h
@@ -70,6 +70,15 @@ class MEDIA_EXPORT Demuxer : public base::RefCountedThreadSafe<Demuxer> {
// approximated. Returns 0 if it is unknown.
virtual int GetBitrate() = 0;
+ // Returns true if the source is from a local file or stream (such as a
+ // webcam stream), false otherwise.
+ //
+ // TODO(scherkus): See http://crbug.com/120426 on why we should remove this.
+ virtual bool IsLocalSource() = 0;
+
+ // Returns true if seeking is possible; false otherwise.
+ virtual bool IsSeekable() = 0;
+
protected:
friend class base::RefCountedThreadSafe<Demuxer>;
virtual ~Demuxer();
diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc
index a5977a4..00347cd 100644
--- a/media/base/mock_filters.cc
+++ b/media/base/mock_filters.cc
@@ -15,6 +15,29 @@ using ::testing::Return;
namespace media {
+MockDataSource::MockDataSource()
+ : total_bytes_(-1),
+ buffered_bytes_(-1) {
+}
+
+MockDataSource::~MockDataSource() {}
+
+void MockDataSource::set_host(DataSourceHost* data_source_host) {
+ DataSource::set_host(data_source_host);
+
+ if (total_bytes_ > 0)
+ host()->SetTotalBytes(total_bytes_);
+
+ if (buffered_bytes_ > 0)
+ host()->SetBufferedBytes(buffered_bytes_);
+}
+
+void MockDataSource::SetTotalAndBufferedBytes(int64 total_bytes,
+ int64 buffered_bytes) {
+ total_bytes_ = total_bytes;
+ buffered_bytes_ = buffered_bytes;
+}
+
MockDemuxer::MockDemuxer() {}
MockDemuxer::~MockDemuxer() {}
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index 32b2333..a5060d3 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -3,7 +3,8 @@
// found in the LICENSE file.
//
// A new breed of mock media filters, this time using gmock! Feel free to add
-// actions if you need interesting side-effects.
+// actions if you need interesting side-effects (i.e., copying data to the
+// buffer passed into MockDataSource::Read()).
//
// Don't forget you can use StrictMock<> and NiceMock<> if you want the mock
// filters to fail the test or do nothing when an unexpected method is called.
@@ -69,6 +70,38 @@ class MockFilter : public Filter {
DISALLOW_COPY_AND_ASSIGN(MockFilter);
};
+class MockDataSource : public DataSource {
+ public:
+ MockDataSource();
+
+ virtual void set_host(DataSourceHost* data_source_host);
+
+ MOCK_METHOD1(Stop, void(const base::Closure& callback));
+ MOCK_METHOD1(SetPlaybackRate, void(float playback_rate));
+ MOCK_METHOD2(Seek, void(base::TimeDelta time, const PipelineStatusCB& cb));
+ MOCK_METHOD0(OnAudioRendererDisabled, void());
+
+ // DataSource implementation.
+ MOCK_METHOD4(Read, void(int64 position, int size, uint8* data,
+ const DataSource::ReadCB& callback));
+ MOCK_METHOD1(GetSize, bool(int64* size_out));
+ MOCK_METHOD1(SetBitrate, void(int bitrate));
+ MOCK_METHOD0(IsStreaming, bool());
+
+ // Sets the TotalBytes & BufferedBytes values to be sent to host() when
+ // the set_host() is called.
+ void SetTotalAndBufferedBytes(int64 total_bytes, int64 buffered_bytes);
+
+ protected:
+ virtual ~MockDataSource();
+
+ private:
+ int64 total_bytes_;
+ int64 buffered_bytes_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockDataSource);
+};
+
class MockDemuxer : public Demuxer {
public:
MockDemuxer();
@@ -82,6 +115,8 @@ class MockDemuxer : public Demuxer {
MOCK_METHOD1(GetStream, scoped_refptr<DemuxerStream>(DemuxerStream::Type));
MOCK_CONST_METHOD0(GetStartTime, base::TimeDelta());
MOCK_METHOD0(GetBitrate, int());
+ MOCK_METHOD0(IsLocalSource, bool());
+ MOCK_METHOD0(IsSeekable, bool());
protected:
virtual ~MockDemuxer();
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
index 623cecf..260f04d 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -223,6 +223,16 @@ void Pipeline::GetNaturalVideoSize(gfx::Size* out_size) const {
*out_size = natural_size_;
}
+bool Pipeline::IsStreaming() const {
+ base::AutoLock auto_lock(lock_);
+ return demuxer_ && !demuxer_->IsSeekable();
+}
+
+bool Pipeline::IsLocalSource() const {
+ base::AutoLock auto_lock(lock_);
+ return demuxer_ && demuxer_->IsLocalSource();
+}
+
PipelineStatistics Pipeline::GetStatistics() const {
base::AutoLock auto_lock(lock_);
return statistics_;
diff --git a/media/base/pipeline.h b/media/base/pipeline.h
index 73359c2..699b5e2 100644
--- a/media/base/pipeline.h
+++ b/media/base/pipeline.h
@@ -230,6 +230,14 @@ class MEDIA_EXPORT Pipeline
// be 0.
void GetNaturalVideoSize(gfx::Size* out_size) const;
+ // If this method returns true, that means the data source is a streaming
+ // data source. Seeking may not be possible.
+ bool IsStreaming() const;
+
+ // If this method returns true, that means the data source is local and
+ // the network is not needed.
+ bool IsLocalSource() const;
+
// Gets the current pipeline statistics.
PipelineStatistics GetStatistics() const;
diff --git a/media/base/pipeline_unittest.cc b/media/base/pipeline_unittest.cc
index 888b962..56d39ff 100644
--- a/media/base/pipeline_unittest.cc
+++ b/media/base/pipeline_unittest.cc
@@ -36,6 +36,8 @@ namespace media {
static const int kTotalBytes = 1024;
static const int kBufferedBytes = 1024;
static const int kBitrate = 1234;
+static const bool kLocalSource = false;
+static const bool kSeekable = true;
ACTION_P(InitializeDemuxerWithError, error) {
arg1.Run(error);
@@ -115,6 +117,10 @@ class PipelineTest : public ::testing::Test {
// Demuxer properties.
EXPECT_CALL(*mocks_->demuxer(), GetBitrate())
.WillRepeatedly(Return(kBitrate));
+ EXPECT_CALL(*mocks_->demuxer(), IsLocalSource())
+ .WillRepeatedly(Return(kLocalSource));
+ EXPECT_CALL(*mocks_->demuxer(), IsSeekable())
+ .WillRepeatedly(Return(kSeekable));
// Configure the demuxer to return the streams.
for (size_t i = 0; i < streams->size(); ++i) {
@@ -794,6 +800,24 @@ TEST_F(PipelineTest, StartTimeIsNonZero) {
EXPECT_EQ(kStartTime, pipeline_->GetCurrentTime());
}
+TEST_F(PipelineTest, DemuxerProperties) {
+ CreateAudioStream();
+ CreateVideoStream();
+ MockDemuxerStreamVector streams;
+ streams.push_back(audio_stream());
+ streams.push_back(video_stream());
+
+ InitializeDemuxer(&streams);
+ InitializeAudioDecoder(audio_stream());
+ InitializeAudioRenderer();
+ InitializeVideoDecoder(video_stream());
+ InitializeVideoRenderer();
+ InitializePipeline(PIPELINE_OK);
+
+ EXPECT_EQ(kLocalSource, pipeline_->IsLocalSource());
+ EXPECT_NE(kSeekable, pipeline_->IsStreaming());
+}
+
class FlexibleCallbackRunner : public base::DelegateSimpleThread::Delegate {
public:
FlexibleCallbackRunner(base::TimeDelta delay, PipelineStatus status,