diff options
author | tkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-12 09:01:00 +0000 |
---|---|---|
committer | tkent@chromium.org <tkent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-12 09:01:00 +0000 |
commit | 15af2b58ceeddb4bdb08fc9c58f9f9de3b372687 (patch) | |
tree | a28e94c785f28ba8fdd969fb80e4066e3ee0b572 /media/base | |
parent | 193bacdf287c87aab760f6ea25fff8bda6326c60 (diff) | |
download | chromium_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.h | 9 | ||||
-rw-r--r-- | media/base/mock_filters.cc | 23 | ||||
-rw-r--r-- | media/base/mock_filters.h | 37 | ||||
-rw-r--r-- | media/base/pipeline.cc | 10 | ||||
-rw-r--r-- | media/base/pipeline.h | 8 | ||||
-rw-r--r-- | media/base/pipeline_unittest.cc | 24 |
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, |