diff options
36 files changed, 375 insertions, 223 deletions
diff --git a/media/base/composite_filter.cc b/media/base/composite_filter.cc index 191280b..2b0166c 100644 --- a/media/base/composite_filter.cc +++ b/media/base/composite_filter.cc @@ -22,16 +22,9 @@ class CompositeFilter::FilterHostImpl : public FilterHost { virtual base::TimeDelta GetTime() const OVERRIDE; virtual base::TimeDelta GetDuration() const OVERRIDE; virtual void SetTime(base::TimeDelta time) OVERRIDE; - virtual void SetDuration(base::TimeDelta duration) OVERRIDE; - virtual void SetBufferedTime(base::TimeDelta buffered_time) OVERRIDE; - virtual void SetTotalBytes(int64 total_bytes) OVERRIDE; - virtual void SetBufferedBytes(int64 buffered_bytes) OVERRIDE; virtual void SetNaturalVideoSize(const gfx::Size& size) OVERRIDE; virtual void NotifyEnded() OVERRIDE; - virtual void SetNetworkActivity(bool network_activity) OVERRIDE; virtual void DisableAudioRenderer() OVERRIDE; - virtual void SetCurrentReadPosition(int64 offset) OVERRIDE; - virtual int64 GetCurrentReadPosition() OVERRIDE; private: CompositeFilter* parent_; @@ -507,23 +500,6 @@ void CompositeFilter::FilterHostImpl::SetTime(base::TimeDelta time) { host_->SetTime(time); } -void CompositeFilter::FilterHostImpl::SetDuration(base::TimeDelta duration) { - host_->SetDuration(duration); -} - -void CompositeFilter::FilterHostImpl::SetBufferedTime( - base::TimeDelta buffered_time) { - host_->SetBufferedTime(buffered_time); -} - -void CompositeFilter::FilterHostImpl::SetTotalBytes(int64 total_bytes) { - host_->SetTotalBytes(total_bytes); -} - -void CompositeFilter::FilterHostImpl::SetBufferedBytes(int64 buffered_bytes) { - host_->SetBufferedBytes(buffered_bytes); -} - void CompositeFilter::FilterHostImpl::SetNaturalVideoSize( const gfx::Size& size) { host_->SetNaturalVideoSize(size); @@ -533,21 +509,8 @@ void CompositeFilter::FilterHostImpl::NotifyEnded() { host_->NotifyEnded(); } -void CompositeFilter::FilterHostImpl::SetNetworkActivity( - bool network_activity) { - host_->SetNetworkActivity(network_activity); -} - void CompositeFilter::FilterHostImpl::DisableAudioRenderer() { host_->DisableAudioRenderer(); } -void CompositeFilter::FilterHostImpl::SetCurrentReadPosition(int64 offset) { - host_->SetCurrentReadPosition(offset); -} - -int64 CompositeFilter::FilterHostImpl::GetCurrentReadPosition() { - return host_->GetCurrentReadPosition(); -} - } // namespace media diff --git a/media/base/data_source.cc b/media/base/data_source.cc new file mode 100644 index 0000000..f310af8 --- /dev/null +++ b/media/base/data_source.cc @@ -0,0 +1,30 @@ +// Copyright (c) 2011 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. + +#include "media/base/data_source.h" + +#include "base/logging.h" + +namespace media { + +// static +const size_t DataSource::kReadError = static_cast<size_t>(-1); + +DataSourceHost::~DataSourceHost() {} + +DataSource::DataSource() : host_(NULL) {} + +DataSource::~DataSource() {} + +void DataSource::set_host(DataSourceHost* host) { + DCHECK(host); + DCHECK(!host_); + host_ = host; +} + +void DataSource::SetPlaybackRate(float playback_rate) {} + +DataSourceHost* DataSource::host() { return host_; } + +} // namespace media diff --git a/media/base/data_source.h b/media/base/data_source.h new file mode 100644 index 0000000..9de147e --- /dev/null +++ b/media/base/data_source.h @@ -0,0 +1,86 @@ +// Copyright (c) 2011 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_DATA_SOURCE_H_ +#define MEDIA_BASE_DATA_SOURCE_H_ + +#include "base/callback.h" +#include "base/memory/ref_counted.h" +#include "media/base/media_export.h" +#include "media/base/preload.h" + +namespace media { + +class MEDIA_EXPORT DataSourceHost { + public: + virtual ~DataSourceHost(); + + // Set the total size of the media file. + virtual void SetTotalBytes(int64 total_bytes) = 0; + + // Sets the total number of bytes that are buffered on the client and ready to + // be played. + virtual void SetBufferedBytes(int64 buffered_bytes) = 0; + + // Sets the flag to indicate current network activity. + virtual void SetNetworkActivity(bool is_downloading_data) = 0; +}; + +class MEDIA_EXPORT DataSource : public base::RefCountedThreadSafe<DataSource> { + public: + typedef base::Callback<void(int64, int64)> StatusCallback; + typedef base::Callback<void(size_t)> ReadCallback; + static const size_t kReadError; + + DataSource(); + + virtual void set_host(DataSourceHost* host); + + // Reads |size| bytes from |position| into |data|. And when the read is done + // or failed, |read_callback| is called with the number of bytes read or + // kReadError in case of error. + // TODO(hclam): should change |size| to int! It makes the code so messy + // with size_t and int all over the place.. + virtual void Read(int64 position, size_t size, + uint8* data, + const DataSource::ReadCallback& read_callback) = 0; + + // Notifies the DataSource of a change in the current playback rate. + virtual void SetPlaybackRate(float playback_rate); + + // Stops the DataSource. Once this is called all future Read() calls will + // return an error. + virtual void Stop(const base::Closure& callback) = 0; + + // Returns true and the file size, false if the file size could not be + // retrieved. + virtual bool GetSize(int64* size_out) = 0; + + // Returns true if we are performing streaming. In this case seeking is + // not possible. + virtual bool IsStreaming() = 0; + + // Alert the DataSource that the video preload value has been changed. + virtual void SetPreload(Preload preload) = 0; + + // Notify the DataSource of the bitrate of the media. + // Values of |bitrate| <= 0 are invalid and should be ignored. + virtual void SetBitrate(int bitrate) = 0; + + protected: + // Only allow scoped_refptr<> to delete DataSource. + friend class base::RefCountedThreadSafe<DataSource>; + virtual ~DataSource(); + + DataSourceHost* host(); + + private: + DataSourceHost* host_; + + DISALLOW_COPY_AND_ASSIGN(DataSource); +}; + +} // namespace media + +#endif // MEDIA_BASE_DATA_SOURCE_H_ diff --git a/media/base/demuxer.cc b/media/base/demuxer.cc index 83bfce3..b6b2d18 100644 --- a/media/base/demuxer.cc +++ b/media/base/demuxer.cc @@ -8,11 +8,13 @@ namespace media { +DemuxerHost::~DemuxerHost() {} + Demuxer::Demuxer() : host_(NULL) {} Demuxer::~Demuxer() {} -void Demuxer::set_host(FilterHost* host) { +void Demuxer::set_host(DemuxerHost* host) { DCHECK(host); DCHECK(!host_); host_ = host; diff --git a/media/base/demuxer.h b/media/base/demuxer.h index 972d250..f049f6f 100644 --- a/media/base/demuxer.h +++ b/media/base/demuxer.h @@ -6,28 +6,45 @@ #define MEDIA_BASE_DEMUXER_H_ #include "base/memory/ref_counted.h" +#include "base/time.h" +#include "media/base/data_source.h" #include "media/base/demuxer_stream.h" #include "media/base/media_export.h" - -// TODO(acolwell): Remove include once DataSource & Preload are moved -// out of "media/base/filters.h" and Stop() is converted to use new callbacks. -#include "media/base/filters.h" #include "media/base/pipeline_status.h" +#include "media/base/preload.h" namespace media { -class FilterHost; +class MEDIA_EXPORT DemuxerHost : public DataSourceHost { + public: + virtual ~DemuxerHost(); + + // Get the duration of the media in microseconds. If the duration has not + // been determined yet, then returns 0. + virtual void SetDuration(base::TimeDelta duration) = 0; + + // Set the approximate amount of playable data buffered so far in micro- + // seconds. + virtual void SetBufferedTime(base::TimeDelta buffered_time) = 0; + + // Sets the byte offset at which the client is requesting the video. + virtual void SetCurrentReadPosition(int64 offset) = 0; + + // Stops execution of the pipeline due to a fatal error. Do not call this + // method with PIPELINE_OK. + virtual void OnDemuxerError(PipelineStatus error) = 0; +}; class MEDIA_EXPORT Demuxer : public base::RefCountedThreadSafe<Demuxer> { public: + Demuxer(); + // Sets the private member |host_|. This is the first method called by - // the FilterHost after a demuxer is created. The host holds a strong + // the DemuxerHost after a demuxer is created. The host holds a strong // reference to the demuxer. The reference held by the host is guaranteed // to be released before the host object is destroyed by the pipeline. - // - // TODO(acolwell): Change this to a narrow DemuxerHost interface. - virtual void set_host(FilterHost* host); + virtual void set_host(DemuxerHost* host); // The pipeline playback rate has been changed. Demuxers may implement this // method if they need to respond to this call. @@ -69,14 +86,18 @@ class MEDIA_EXPORT Demuxer virtual bool IsSeekable() = 0; protected: - Demuxer(); - FilterHost* host() { return host_; } + // Only allow derived objects access to the DemuxerHost. This is + // kept out of the public interface because demuxers need to be + // aware of all calls made to the host object so they can insure + // the state presented to the host is always consistent with its own + // state. + DemuxerHost* host() { return host_; } friend class base::RefCountedThreadSafe<Demuxer>; virtual ~Demuxer(); private: - FilterHost* host_; + DemuxerHost* host_; DISALLOW_COPY_AND_ASSIGN(Demuxer); }; diff --git a/media/base/filter_host.h b/media/base/filter_host.h index 807fd5f..864bc99 100644 --- a/media/base/filter_host.h +++ b/media/base/filter_host.h @@ -28,31 +28,16 @@ class MEDIA_EXPORT FilterHost { // method with PIPELINE_OK. virtual void SetError(PipelineStatus error) = 0; - // Gets the current time in microseconds. + // Gets the current time. virtual base::TimeDelta GetTime() const = 0; - // Gets the duration in microseconds. + // Gets the duration. virtual base::TimeDelta GetDuration() const = 0; // Updates the current time. Other filters should poll to examine the updated // time. virtual void SetTime(base::TimeDelta time) = 0; - // Get the duration of the media in microseconds. If the duration has not - // been determined yet, then returns 0. - virtual void SetDuration(base::TimeDelta duration) = 0; - - // Set the approximate amount of playable data buffered so far in micro- - // seconds. - virtual void SetBufferedTime(base::TimeDelta buffered_time) = 0; - - // Set the total size of the media file. - virtual void SetTotalBytes(int64 total_bytes) = 0; - - // Sets the total number of bytes that are buffered on the client and ready to - // be played. - virtual void SetBufferedBytes(int64 buffered_bytes) = 0; - // Sets the natural size of the video output in pixel units. virtual void SetNaturalVideoSize(const gfx::Size& size) = 0; @@ -60,19 +45,10 @@ class MEDIA_EXPORT FilterHost { // endpoints such as renderers. virtual void NotifyEnded() = 0; - // Sets the flag to indicate current network activity. - virtual void SetNetworkActivity(bool is_downloading_data) = 0; - // Disable audio renderer by calling OnAudioRendererDisabled() on all // filters. virtual void DisableAudioRenderer() = 0; - // Sets the byte offset at which the client is requesting the video. - virtual void SetCurrentReadPosition(int64 offset) = 0; - - // Gets the byte offset at which the client is requesting the video. - virtual int64 GetCurrentReadPosition() = 0; - protected: virtual ~FilterHost() {} }; diff --git a/media/base/filters.cc b/media/base/filters.cc index ace7d4e..c137216 100644 --- a/media/base/filters.cc +++ b/media/base/filters.cc @@ -8,9 +8,6 @@ namespace media { -// static -const size_t DataSource::kReadError = static_cast<size_t>(-1); - void ResetAndRunCB(FilterStatusCB* cb, PipelineStatus status) { DCHECK(!cb->is_null()); FilterStatusCB tmp_cb(*cb); diff --git a/media/base/filters.h b/media/base/filters.h index 5cd4cf8..654dae1 100644 --- a/media/base/filters.h +++ b/media/base/filters.h @@ -46,19 +46,6 @@ class FilterHost; struct PipelineStatistics; -// Used to specify video preload states. They are "hints" to the browser about -// how aggressively the browser should load and buffer data. -// Please see the HTML5 spec for the descriptions of these values: -// http://www.w3.org/TR/html5/video.html#attr-media-preload -// -// Enum values must match the values in WebCore::MediaPlayer::Preload and -// there will be assertions at compile time if they do not match. -enum Preload { - NONE, - METADATA, - AUTO, -}; - // Used for completing asynchronous methods. typedef base::Callback<void(PipelineStatus)> FilterStatusCB; @@ -133,36 +120,6 @@ class MEDIA_EXPORT Filter : public base::RefCountedThreadSafe<Filter> { DISALLOW_COPY_AND_ASSIGN(Filter); }; -class MEDIA_EXPORT DataSource : public Filter { - public: - typedef base::Callback<void(size_t)> ReadCallback; - static const size_t kReadError; - - // Reads |size| bytes from |position| into |data|. And when the read is done - // or failed, |read_callback| is called with the number of bytes read or - // kReadError in case of error. - // TODO(hclam): should change |size| to int! It makes the code so messy - // with size_t and int all over the place.. - virtual void Read(int64 position, size_t size, - uint8* data, - const DataSource::ReadCallback& read_callback) = 0; - - // Returns true and the file size, false if the file size could not be - // retrieved. - virtual bool GetSize(int64* size_out) = 0; - - // Returns true if we are performing streaming. In this case seeking is - // not possible. - virtual bool IsStreaming() = 0; - - // Alert the DataSource that the video preload value has been changed. - virtual void SetPreload(Preload preload) = 0; - - // Notify the DataSource of the bitrate of the media. - // Values of |bitrate| <= 0 are invalid and should be ignored. - virtual void SetBitrate(int bitrate) = 0; -}; - class MEDIA_EXPORT VideoDecoder : public Filter { public: // Initialize a VideoDecoder with the given DemuxerStream, executing the diff --git a/media/base/mock_data_source_host.cc b/media/base/mock_data_source_host.cc new file mode 100644 index 0000000..eff0b78 --- /dev/null +++ b/media/base/mock_data_source_host.cc @@ -0,0 +1,13 @@ +// Copyright (c) 2011 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. + +#include "media/base/mock_data_source_host.h" + +namespace media { + +MockDataSourceHost::MockDataSourceHost() {} + +MockDataSourceHost::~MockDataSourceHost() {} + +} // namespace media diff --git a/media/base/mock_data_source_host.h b/media/base/mock_data_source_host.h new file mode 100644 index 0000000..b569b77 --- /dev/null +++ b/media/base/mock_data_source_host.h @@ -0,0 +1,32 @@ +// Copyright (c) 2011 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_DATA_SOURCE_HOST_H_ +#define MEDIA_BASE_MOCK_DATA_SOURCE_HOST_H_ + +#include <string> + +#include "base/memory/scoped_ptr.h" +#include "media/base/data_source.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace media { + +class MockDataSourceHost : public DataSourceHost { + public: + MockDataSourceHost(); + virtual ~MockDataSourceHost(); + + // DataSourceHost implementation. + MOCK_METHOD1(SetTotalBytes, void(int64 total_bytes)); + MOCK_METHOD1(SetBufferedBytes, void(int64 buffered_bytes)); + MOCK_METHOD1(SetNetworkActivity, void(bool network_activity)); + + private: + DISALLOW_COPY_AND_ASSIGN(MockDataSourceHost); +}; + +} // namespace media + +#endif // MEDIA_BASE_MOCK_DATA_SOURCE_HOST_H_ diff --git a/media/base/mock_demuxer_host.cc b/media/base/mock_demuxer_host.cc new file mode 100644 index 0000000..100787f --- /dev/null +++ b/media/base/mock_demuxer_host.cc @@ -0,0 +1,13 @@ +// Copyright (c) 2011 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. + +#include "media/base/mock_demuxer_host.h" + +namespace media { + +MockDemuxerHost::MockDemuxerHost() {} + +MockDemuxerHost::~MockDemuxerHost() {} + +} // namespace media diff --git a/media/base/mock_demuxer_host.h b/media/base/mock_demuxer_host.h new file mode 100644 index 0000000..ae86473 --- /dev/null +++ b/media/base/mock_demuxer_host.h @@ -0,0 +1,38 @@ +// Copyright (c) 2011 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_DEMUXER_HOST_H_ +#define MEDIA_BASE_MOCK_DEMUXER_HOST_H_ + +#include <string> + +#include "base/memory/scoped_ptr.h" +#include "media/base/demuxer.h" +#include "testing/gmock/include/gmock/gmock.h" + +namespace media { + +class MockDemuxerHost : public DemuxerHost { + public: + MockDemuxerHost(); + virtual ~MockDemuxerHost(); + + // DataSourceHost implementation. + MOCK_METHOD1(SetTotalBytes, void(int64 total_bytes)); + MOCK_METHOD1(SetBufferedBytes, void(int64 buffered_bytes)); + MOCK_METHOD1(SetNetworkActivity, void(bool network_activity)); + + // DemuxerHost implementation. + MOCK_METHOD1(OnDemuxerError, void(PipelineStatus error)); + MOCK_METHOD1(SetDuration, void(base::TimeDelta duration)); + MOCK_METHOD1(SetBufferedTime, void(base::TimeDelta buffered_time)); + MOCK_METHOD1(SetCurrentReadPosition, void(int64 offset)); + + private: + DISALLOW_COPY_AND_ASSIGN(MockDemuxerHost); +}; + +} // namespace media + +#endif // MEDIA_BASE_MOCK_DEMUXER_HOST_H_ diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc index d398448..a406620 100644 --- a/media/base/mock_filters.cc +++ b/media/base/mock_filters.cc @@ -20,8 +20,8 @@ MockDataSource::MockDataSource() MockDataSource::~MockDataSource() {} -void MockDataSource::set_host(FilterHost* filter_host) { - Filter::set_host(filter_host); +void MockDataSource::set_host(DataSourceHost* data_source_host) { + DataSource::set_host(data_source_host); if (total_bytes_ > 0) host()->SetTotalBytes(total_bytes_); @@ -74,8 +74,8 @@ MockDemuxer::MockDemuxer() MockDemuxer::~MockDemuxer() {} -void MockDemuxer::set_host(FilterHost* filter_host) { - Demuxer::set_host(filter_host); +void MockDemuxer::set_host(DemuxerHost* demuxer_host) { + Demuxer::set_host(demuxer_host); if (total_bytes_ > 0) host()->SetTotalBytes(total_bytes_); diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h index 28817e9..b3758f2 100644 --- a/media/base/mock_filters.h +++ b/media/base/mock_filters.h @@ -72,8 +72,7 @@ class MockDataSource : public DataSource { public: MockDataSource(); - // Filter implementation. - virtual void set_host(FilterHost* host); + virtual void set_host(DataSourceHost* data_source_host); MOCK_METHOD1(Stop, void(const base::Closure& callback)); MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); @@ -105,8 +104,8 @@ class MockDataSource : public DataSource { class MockDemuxer : public Demuxer { public: MockDemuxer(); - // Filter implementation. - virtual void set_host(FilterHost* host); + + virtual void set_host(DemuxerHost* demuxer_host); MOCK_METHOD1(Stop, void(const base::Closure& callback)); MOCK_METHOD1(SetPlaybackRate, void(float playback_rate)); MOCK_METHOD1(SetPreload, void(Preload preload)); diff --git a/media/base/pipeline.h b/media/base/pipeline.h index 1534ea5..cc38c4b 100644 --- a/media/base/pipeline.h +++ b/media/base/pipeline.h @@ -11,8 +11,10 @@ #include <string> -#include "media/base/filters.h" +#include "media/base/media_export.h" #include "media/base/pipeline_status.h" +#include "media/base/preload.h" +#include "ui/gfx/size.h" namespace base { class TimeDelta; diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index aa5ac3b..f4d8774 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc @@ -340,11 +340,6 @@ void PipelineImpl::SetCurrentReadPosition(int64 offset) { current_bytes_ = offset; } -int64 PipelineImpl::GetCurrentReadPosition() { - base::AutoLock auto_lock(lock_); - return current_bytes_; -} - void PipelineImpl::ResetState() { base::AutoLock auto_lock(lock_); const base::TimeDelta kZero; @@ -457,6 +452,10 @@ PipelineImpl::State PipelineImpl::FindNextState(State current) { } } +void PipelineImpl::OnDemuxerError(PipelineStatus error) { + SetError(error); +} + void PipelineImpl::SetError(PipelineStatus error) { DCHECK(IsRunning()); DCHECK_NE(PIPELINE_OK, error); diff --git a/media/base/pipeline_impl.h b/media/base/pipeline_impl.h index 9426688..be55291 100644 --- a/media/base/pipeline_impl.h +++ b/media/base/pipeline_impl.h @@ -96,7 +96,10 @@ class MEDIA_EXPORT PipelineStatusNotification { // If any error ever happens, this object will transition to the "Error" state // from any state. If Stop() is ever called, this object will transition to // "Stopped" state. -class MEDIA_EXPORT PipelineImpl : public Pipeline, public FilterHost { +class MEDIA_EXPORT PipelineImpl + : public Pipeline, + public FilterHost, + public DemuxerHost { public: explicit PipelineImpl(MessageLoop* message_loop, MediaLog* media_log); @@ -190,21 +193,25 @@ class MEDIA_EXPORT PipelineImpl : public Pipeline, public FilterHost { // Given the current state, returns the next state. State FindNextState(State current); + // DataSourceHost (by way of DemuxerHost) implementation. + virtual void SetTotalBytes(int64 total_bytes) OVERRIDE; + virtual void SetBufferedBytes(int64 buffered_bytes) OVERRIDE; + virtual void SetNetworkActivity(bool is_downloading_data) OVERRIDE; + + // DemuxerHost implementaion. + virtual void SetDuration(base::TimeDelta duration) OVERRIDE; + virtual void SetBufferedTime(base::TimeDelta buffered_time) OVERRIDE; + virtual void SetCurrentReadPosition(int64 offset) OVERRIDE; + virtual void OnDemuxerError(PipelineStatus error) OVERRIDE; + // FilterHost implementation. virtual void SetError(PipelineStatus error) OVERRIDE; virtual base::TimeDelta GetTime() const OVERRIDE; virtual base::TimeDelta GetDuration() const OVERRIDE; virtual void SetTime(base::TimeDelta time) OVERRIDE; - virtual void SetDuration(base::TimeDelta duration) OVERRIDE; - virtual void SetBufferedTime(base::TimeDelta buffered_time) OVERRIDE; - virtual void SetTotalBytes(int64 total_bytes) OVERRIDE; - virtual void SetBufferedBytes(int64 buffered_bytes) OVERRIDE; virtual void SetNaturalVideoSize(const gfx::Size& size) OVERRIDE; - virtual void SetNetworkActivity(bool is_downloading_data) OVERRIDE; virtual void NotifyEnded() OVERRIDE; virtual void DisableAudioRenderer() OVERRIDE; - virtual void SetCurrentReadPosition(int64 offset) OVERRIDE; - virtual int64 GetCurrentReadPosition() OVERRIDE; // Callbacks executed by filters upon completing initialization. void OnFilterInitialize(PipelineStatus status); diff --git a/media/base/preload.h b/media/base/preload.h new file mode 100644 index 0000000..136e84c --- /dev/null +++ b/media/base/preload.h @@ -0,0 +1,25 @@ +// Copyright (c) 2011 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_PRELOAD_H_ +#define MEDIA_BASE_PRELOAD_H_ + +namespace media { + +// Used to specify video preload states. They are "hints" to the browser about +// how aggressively the browser should load and buffer data. +// Please see the HTML5 spec for the descriptions of these values: +// http://www.w3.org/TR/html5/video.html#attr-media-preload +// +// Enum values must match the values in WebCore::MediaPlayer::Preload and +// there will be assertions at compile time if they do not match. +enum Preload { + NONE, + METADATA, + AUTO, +}; + +} // namespace media + +#endif // MEDIA_BASE_PRELOAD_H_ diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc index f81b80f..cda484b 100644 --- a/media/filters/chunk_demuxer.cc +++ b/media/filters/chunk_demuxer.cc @@ -12,7 +12,6 @@ #include "base/logging.h" #include "base/message_loop.h" #include "media/base/audio_decoder_config.h" -#include "media/base/filter_host.h" #include "media/base/data_buffer.h" #include "media/base/video_decoder_config.h" #include "media/ffmpeg/ffmpeg_common.h" @@ -323,11 +322,11 @@ void ChunkDemuxer::Init(const PipelineStatusCB& cb) { client_->DemuxerOpened(this); } -void ChunkDemuxer::set_host(FilterHost* filter_host) { +void ChunkDemuxer::set_host(DemuxerHost* host) { DCHECK_EQ(state_, INITIALIZED); - Demuxer::set_host(filter_host); - filter_host->SetDuration(duration_); - filter_host->SetCurrentReadPosition(0); + Demuxer::set_host(host); + host->SetDuration(duration_); + host->SetCurrentReadPosition(0); } void ChunkDemuxer::Stop(const base::Closure& callback) { @@ -811,7 +810,7 @@ void ChunkDemuxer::ReportError_Locked(PipelineStatus error) { { base::AutoUnlock auto_unlock(lock_); if (cb.is_null()) { - host()->SetError(error); + host()->OnDemuxerError(error); return; } cb.Run(error); diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h index 42f1097..3313c11 100644 --- a/media/filters/chunk_demuxer.h +++ b/media/filters/chunk_demuxer.h @@ -30,7 +30,7 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer { void Init(const PipelineStatusCB& cb); // Demuxer implementation. - virtual void set_host(FilterHost* filter_host) OVERRIDE; + virtual void set_host(DemuxerHost* host) OVERRIDE; virtual void Stop(const base::Closure& callback) OVERRIDE; virtual void Seek(base::TimeDelta time, const PipelineStatusCB& cb) OVERRIDE; virtual void OnAudioRendererDisabled() OVERRIDE; diff --git a/media/filters/chunk_demuxer_unittest.cc b/media/filters/chunk_demuxer_unittest.cc index bffb8ad..ecbcbee 100644 --- a/media/filters/chunk_demuxer_unittest.cc +++ b/media/filters/chunk_demuxer_unittest.cc @@ -5,7 +5,7 @@ #include "base/bind.h" #include "media/base/audio_decoder_config.h" #include "media/base/mock_callback.h" -#include "media/base/mock_filter_host.h" +#include "media/base/mock_demuxer_host.h" #include "media/base/test_data_util.h" #include "media/filters/chunk_demuxer.h" #include "media/filters/chunk_demuxer_client.h" @@ -114,9 +114,10 @@ class ChunkDemuxerTest : public testing::Test { } void AppendData(const uint8* data, size_t length) { - EXPECT_CALL(mock_filter_host_, SetBufferedBytes(_)).Times(AnyNumber()); - EXPECT_CALL(mock_filter_host_, SetBufferedTime(_)).Times(AnyNumber()); - EXPECT_CALL(mock_filter_host_, SetNetworkActivity(true)).Times(AnyNumber()); + EXPECT_CALL(mock_demuxer_host_, SetBufferedBytes(_)).Times(AnyNumber()); + EXPECT_CALL(mock_demuxer_host_, SetBufferedTime(_)).Times(AnyNumber()); + EXPECT_CALL(mock_demuxer_host_, SetNetworkActivity(true)) + .Times(AnyNumber()); EXPECT_TRUE(demuxer_->AppendData(data, length)); } @@ -148,10 +149,10 @@ class ChunkDemuxerTest : public testing::Test { EXPECT_EQ(status, expected_status); if (status == PIPELINE_OK) { - EXPECT_CALL(mock_filter_host_, SetDuration(expected_duration)); - EXPECT_CALL(mock_filter_host_, SetCurrentReadPosition(_)); + EXPECT_CALL(mock_demuxer_host_, SetDuration(expected_duration)); + EXPECT_CALL(mock_demuxer_host_, SetCurrentReadPosition(_)); - demuxer_->set_host(&mock_filter_host_); + demuxer_->set_host(&mock_demuxer_host_); } } @@ -193,7 +194,7 @@ class ChunkDemuxerTest : public testing::Test { MOCK_METHOD1(Checkpoint, void(int id)); - MockFilterHost mock_filter_host_; + MockDemuxerHost mock_demuxer_host_; scoped_ptr<MockChunkDemuxerClient> client_; scoped_refptr<ChunkDemuxer> demuxer_; @@ -348,7 +349,7 @@ TEST_F(ChunkDemuxerTest, TestOutOfOrderClusters) { // Make sure that AppendData() fails because this cluster data // is before previous data. - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_DECODE)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); AppendData(clusterB->data(), clusterB->size()); // Verify that AppendData() doesn't accept more data now. @@ -373,7 +374,7 @@ TEST_F(ChunkDemuxerTest, TestNonMonotonicButAboveClusterTimecode) { AddSimpleBlock(&cb, kVideoTrackNum, 15); scoped_ptr<Cluster> clusterA(cb.Finish()); - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_DECODE)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); AppendData(clusterA->data(), clusterA->size()); // Verify that AppendData() doesn't accept more data now. @@ -398,7 +399,7 @@ TEST_F(ChunkDemuxerTest, TestBackwardsAndBeforeClusterTimecode) { AddSimpleBlock(&cb, kVideoTrackNum, 3); scoped_ptr<Cluster> clusterA(cb.Finish()); - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_DECODE)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); AppendData(clusterA->data(), clusterA->size()); // Verify that AppendData() doesn't accept more data now. @@ -424,7 +425,7 @@ TEST_F(ChunkDemuxerTest, TestPerStreamMonotonicallyIncreasingTimestamps) { AddSimpleBlock(&cb, kVideoTrackNum, 7); scoped_ptr<Cluster> cluster(cb.Finish()); - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_DECODE)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); AppendData(cluster->data(), cluster->size()); } @@ -447,7 +448,7 @@ TEST_F(ChunkDemuxerTest, TestMonotonicallyIncreasingTimestampsAcrossClusters) { AddSimpleBlock(&cb, kVideoTrackNum, 7); scoped_ptr<Cluster> clusterB(cb.Finish()); - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_DECODE)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); AppendData(clusterB->data(), clusterB->size()); // Verify that AppendData() doesn't accept more data now. @@ -491,7 +492,7 @@ TEST_F(ChunkDemuxerTest, TestDecodeErrorEndOfStream) { scoped_ptr<Cluster> cluster(cb.Finish()); AppendData(cluster->data(), cluster->size()); - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_DECODE)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_DECODE)); demuxer_->EndOfStream(PIPELINE_ERROR_DECODE); } @@ -507,7 +508,7 @@ TEST_F(ChunkDemuxerTest, TestNetworkErrorEndOfStream) { scoped_ptr<Cluster> cluster(cb.Finish()); AppendData(cluster->data(), cluster->size()); - EXPECT_CALL(mock_filter_host_, SetError(PIPELINE_ERROR_NETWORK)); + EXPECT_CALL(mock_demuxer_host_, OnDemuxerError(PIPELINE_ERROR_NETWORK)); demuxer_->EndOfStream(PIPELINE_ERROR_NETWORK); } diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc index aa24e7a..f85d3f3 100644 --- a/media/filters/ffmpeg_demuxer.cc +++ b/media/filters/ffmpeg_demuxer.cc @@ -11,7 +11,6 @@ #include "base/string_util.h" #include "base/time.h" #include "media/base/data_buffer.h" -#include "media/base/filter_host.h" #include "media/base/limits.h" #include "media/base/media_switches.h" #include "media/ffmpeg/ffmpeg_common.h" @@ -319,7 +318,7 @@ void FFmpegDemuxer::Stop(const base::Closure& callback) { SignalReadCompleted(DataSource::kReadError); } -void FFmpegDemuxer::Seek(base::TimeDelta time, const FilterStatusCB& cb) { +void FFmpegDemuxer::Seek(base::TimeDelta time, const PipelineStatusCB& cb) { message_loop_->PostTask(FROM_HERE, base::Bind(&FFmpegDemuxer::SeekTask, this, time, cb)); } @@ -339,16 +338,16 @@ void FFmpegDemuxer::OnAudioRendererDisabled() { &FFmpegDemuxer::DisableAudioStreamTask, this)); } -void FFmpegDemuxer::set_host(FilterHost* filter_host) { - Demuxer::set_host(filter_host); +void FFmpegDemuxer::set_host(DemuxerHost* demuxer_host) { + Demuxer::set_host(demuxer_host); if (data_source_) - data_source_->set_host(filter_host); + data_source_->set_host(demuxer_host); if (max_duration_.InMicroseconds() >= 0) host()->SetDuration(max_duration_); if (read_position_ > 0) host()->SetCurrentReadPosition(read_position_); if (deferred_status_ != PIPELINE_OK) - host()->SetError(deferred_status_); + host()->OnDemuxerError(deferred_status_); } void FFmpegDemuxer::Initialize(DataSource* data_source, @@ -399,7 +398,7 @@ size_t FFmpegDemuxer::Read(size_t size, uint8* data) { size_t last_read_bytes = WaitForRead(); if (last_read_bytes == DataSource::kReadError) { if (host()) - host()->SetError(PIPELINE_ERROR_READ); + host()->OnDemuxerError(PIPELINE_ERROR_READ); else deferred_status_ = PIPELINE_ERROR_READ; @@ -595,7 +594,7 @@ bool FFmpegDemuxer::IsSeekable() { return !IsStreaming(); } -void FFmpegDemuxer::SeekTask(base::TimeDelta time, const FilterStatusCB& cb) { +void FFmpegDemuxer::SeekTask(base::TimeDelta time, const PipelineStatusCB& cb) { DCHECK_EQ(MessageLoop::current(), message_loop_); // TODO(scherkus): remove this by separating Seek() from Flush() from diff --git a/media/filters/ffmpeg_demuxer.h b/media/filters/ffmpeg_demuxer.h index 3f2e596..5db09b33 100644 --- a/media/filters/ffmpeg_demuxer.h +++ b/media/filters/ffmpeg_demuxer.h @@ -140,9 +140,9 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol { // Demuxer implementation. virtual void Stop(const base::Closure& callback) OVERRIDE; - virtual void Seek(base::TimeDelta time, const FilterStatusCB& cb) OVERRIDE; + virtual void Seek(base::TimeDelta time, const PipelineStatusCB& cb) OVERRIDE; virtual void OnAudioRendererDisabled() OVERRIDE; - virtual void set_host(FilterHost* filter_host) OVERRIDE; + virtual void set_host(DemuxerHost* demuxer_host) OVERRIDE; virtual void SetPlaybackRate(float playback_rate) OVERRIDE; virtual scoped_refptr<DemuxerStream> GetStream( DemuxerStream::Type type) OVERRIDE; @@ -175,7 +175,7 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol { DataSource* data_source, const PipelineStatusCB& callback); // Carries out a seek on the demuxer thread. - void SeekTask(base::TimeDelta time, const FilterStatusCB& cb); + void SeekTask(base::TimeDelta time, const PipelineStatusCB& cb); // Carries out demuxing and satisfying stream reads on the demuxer thread. void DemuxTask(); @@ -247,7 +247,7 @@ class MEDIA_EXPORT FFmpegDemuxer : public Demuxer, public FFmpegURLProtocol { int64 read_position_; // Initialization can happen before set_host() is called, in which case we - // store these bits for deferred reporting to the FilterHost when we get one. + // store these bits for deferred reporting to the DemuxerHost when we get one. base::TimeDelta max_duration_; PipelineStatus deferred_status_; diff --git a/media/filters/ffmpeg_demuxer_unittest.cc b/media/filters/ffmpeg_demuxer_unittest.cc index 79c3b44..45838f6 100644 --- a/media/filters/ffmpeg_demuxer_unittest.cc +++ b/media/filters/ffmpeg_demuxer_unittest.cc @@ -9,7 +9,7 @@ #include "base/threading/thread.h" #include "media/base/filters.h" #include "media/base/mock_callback.h" -#include "media/base/mock_filter_host.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" @@ -134,7 +134,7 @@ class FFmpegDemuxerTest : public testing::Test { // Fixture members. scoped_refptr<FFmpegDemuxer> demuxer_; - StrictMock<MockFilterHost> host_; + StrictMock<MockDemuxerHost> host_; MessageLoop message_loop_; int64 current_read_position_; diff --git a/media/filters/file_data_source.cc b/media/filters/file_data_source.cc index 9116b50..2270fe9 100644 --- a/media/filters/file_data_source.cc +++ b/media/filters/file_data_source.cc @@ -49,8 +49,8 @@ PipelineStatus FileDataSource::Initialize(const std::string& url) { return PIPELINE_OK; } -void FileDataSource::set_host(FilterHost* filter_host) { - DataSource::set_host(filter_host); +void FileDataSource::set_host(DataSourceHost* host) { + DataSource::set_host(host); UpdateHostBytes(); } diff --git a/media/filters/file_data_source.h b/media/filters/file_data_source.h index 0a26855..0b94c63 100644 --- a/media/filters/file_data_source.h +++ b/media/filters/file_data_source.h @@ -9,7 +9,7 @@ #include "base/gtest_prod_util.h" #include "base/synchronization/lock.h" -#include "media/base/filters.h" +#include "media/base/data_source.h" namespace media { @@ -23,11 +23,9 @@ class MEDIA_EXPORT FileDataSource : public DataSource { PipelineStatus Initialize(const std::string& url); - // Implementation of Filter. - virtual void set_host(FilterHost* filter_host) OVERRIDE; - virtual void Stop(const base::Closure& callback) OVERRIDE; - // Implementation of DataSource. + virtual void set_host(DataSourceHost* host) OVERRIDE; + virtual void Stop(const base::Closure& callback) OVERRIDE; virtual void Read(int64 position, size_t size, uint8* data, const DataSource::ReadCallback& read_callback) OVERRIDE; virtual bool GetSize(int64* size_out) OVERRIDE; diff --git a/media/filters/file_data_source_unittest.cc b/media/filters/file_data_source_unittest.cc index 9d781a3..bac45d9 100644 --- a/media/filters/file_data_source_unittest.cc +++ b/media/filters/file_data_source_unittest.cc @@ -10,7 +10,7 @@ #include "base/path_service.h" #include "base/utf_string_conversions.h" #include "media/base/mock_callback.h" -#include "media/base/mock_filter_host.h" +#include "media/base/mock_data_source_host.h" #include "media/base/mock_filters.h" #include "media/filters/file_data_source.h" @@ -51,7 +51,7 @@ std::string TestFileURL() { // Test that FileDataSource call the appropriate methods on its filter host. TEST(FileDataSourceTest, OpenFile) { - StrictMock<MockFilterHost> host; + StrictMock<MockDataSourceHost> host; EXPECT_CALL(host, SetTotalBytes(10)); EXPECT_CALL(host, SetBufferedBytes(10)); @@ -68,7 +68,7 @@ TEST(FileDataSourceTest, ReadData) { uint8 ten_bytes[10]; // Create our mock filter host and initialize the data source. - NiceMock<MockFilterHost> host; + NiceMock<MockDataSourceHost> host; scoped_refptr<FileDataSource> filter(new FileDataSource()); filter->set_host(&host); @@ -97,14 +97,4 @@ TEST(FileDataSourceTest, ReadData) { filter->Stop(NewExpectedClosure()); } -// Test that FileDataSource does nothing on Seek(). -TEST(FileDataSourceTest, Seek) { - const base::TimeDelta kZero; - - scoped_refptr<FileDataSource> filter(new FileDataSource()); - filter->Seek(kZero, NewExpectedStatusCB(PIPELINE_OK)); - - filter->Stop(NewExpectedClosure()); -} - } // namespace media diff --git a/media/media.gyp b/media/media.gyp index 79f6c53..0b18d62 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -115,6 +115,8 @@ 'base/composite_filter.h', 'base/data_buffer.cc', 'base/data_buffer.h', + 'base/data_source.cc', + 'base/data_source.h', 'base/demuxer.cc', 'base/demuxer.h', 'base/demuxer_stream.cc', @@ -150,6 +152,7 @@ 'base/pipeline_impl.cc', 'base/pipeline_impl.h', 'base/pipeline_status.h', + 'base/preload.h', 'base/pts_heap.cc', 'base/pts_heap.h', 'base/pts_stream.cc', @@ -678,6 +681,10 @@ 'audio/test_audio_input_controller_factory.h', 'base/mock_callback.cc', 'base/mock_callback.h', + 'base/mock_data_source_host.cc', + 'base/mock_ddata_source_host.h', + 'base/mock_demuxer_host.cc', + 'base/mock_demuxer_host.h', 'base/mock_filter_host.cc', 'base/mock_filter_host.h', 'base/mock_filters.cc', diff --git a/webkit/media/buffered_data_source.cc b/webkit/media/buffered_data_source.cc index 794c40e..20b9b7a 100644 --- a/webkit/media/buffered_data_source.cc +++ b/webkit/media/buffered_data_source.cc @@ -5,7 +5,6 @@ #include "webkit/media/buffered_data_source.h" #include "base/bind.h" -#include "media/base/filter_host.h" #include "media/base/media_log.h" #include "net/base/net_errors.h" #include "webkit/media/web_data_source_factory.h" @@ -85,7 +84,7 @@ BufferedResourceLoader* BufferedDataSource::CreateResourceLoader( media_log_); } -void BufferedDataSource::set_host(media::FilterHost* host) { +void BufferedDataSource::set_host(media::DataSourceHost* host) { DataSource::set_host(host); if (loader_.get()) { @@ -650,13 +649,12 @@ void BufferedDataSource::UpdateHostState_Locked() { // Called from various threads, under lock. lock_.AssertAcquired(); - media::FilterHost* filter_host = host(); - if (!filter_host) + if (!host()) return; if (total_bytes_ != kPositionNotSpecified) - filter_host->SetTotalBytes(total_bytes_); - filter_host->SetBufferedBytes(buffered_bytes_); + host()->SetTotalBytes(total_bytes_); + host()->SetBufferedBytes(buffered_bytes_); } } // namespace webkit_media diff --git a/webkit/media/buffered_data_source.h b/webkit/media/buffered_data_source.h index 11210b9..eac8e13 100644 --- a/webkit/media/buffered_data_source.h +++ b/webkit/media/buffered_data_source.h @@ -11,7 +11,7 @@ #include "base/memory/scoped_ptr.h" #include "base/synchronization/lock.h" #include "media/base/filter_factories.h" -#include "media/base/filters.h" +#include "media/base/data_source.h" #include "webkit/media/buffered_resource_loader.h" namespace media { @@ -37,13 +37,12 @@ class BufferedDataSource : public WebDataSource { virtual ~BufferedDataSource(); - // media::Filter implementation. - virtual void set_host(media::FilterHost* host) OVERRIDE; + // media::DataSource implementation. + // Called from demuxer thread. + virtual void set_host(media::DataSourceHost* host) OVERRIDE; virtual void Stop(const base::Closure& callback) OVERRIDE; virtual void SetPlaybackRate(float playback_rate) OVERRIDE; - // media::DataSource implementation. - // Called from demuxer thread. virtual void Read( int64 position, size_t size, diff --git a/webkit/media/buffered_data_source_unittest.cc b/webkit/media/buffered_data_source_unittest.cc index 83d58cf..9150fd0 100644 --- a/webkit/media/buffered_data_source_unittest.cc +++ b/webkit/media/buffered_data_source_unittest.cc @@ -5,7 +5,7 @@ #include "base/bind.h" #include "media/base/media_log.h" #include "media/base/mock_callback.h" -#include "media/base/mock_filter_host.h" +#include "media/base/mock_data_source_host.h" #include "media/base/mock_filters.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLResponse.h" @@ -176,7 +176,7 @@ class BufferedDataSourceTest : public testing::Test { MockWebFrameClient client_; WebView* view_; - StrictMock<media::MockFilterHost> host_; + StrictMock<media::MockDataSourceHost> host_; MessageLoop* message_loop_; private: diff --git a/webkit/media/simple_data_source.cc b/webkit/media/simple_data_source.cc index 24b7b01..cc950dc 100644 --- a/webkit/media/simple_data_source.cc +++ b/webkit/media/simple_data_source.cc @@ -7,7 +7,6 @@ #include "base/bind.h" #include "base/message_loop.h" #include "base/process_util.h" -#include "media/base/filter_host.h" #include "media/base/media_log.h" #include "net/base/data_url.h" #include "net/base/load_flags.h" @@ -59,7 +58,7 @@ SimpleDataSource::~SimpleDataSource() { DCHECK(state_ == UNINITIALIZED || state_ == STOPPED); } -void SimpleDataSource::set_host(media::FilterHost* host) { +void SimpleDataSource::set_host(media::DataSourceHost* host) { DataSource::set_host(host); base::AutoLock auto_lock(lock_); diff --git a/webkit/media/simple_data_source.h b/webkit/media/simple_data_source.h index 7408019..e905be9 100644 --- a/webkit/media/simple_data_source.h +++ b/webkit/media/simple_data_source.h @@ -16,7 +16,7 @@ #include "base/memory/scoped_ptr.h" #include "base/message_loop.h" #include "media/base/filter_factories.h" -#include "media/base/filters.h" +#include "media/base/data_source.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLLoader.h" #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURLLoaderClient.h" @@ -46,11 +46,9 @@ class SimpleDataSource SimpleDataSource(MessageLoop* render_loop, WebKit::WebFrame* frame); virtual ~SimpleDataSource(); - // media::Filter implementation. - virtual void set_host(media::FilterHost* host) OVERRIDE; - virtual void Stop(const base::Closure& callback) OVERRIDE; - // media::DataSource implementation. + virtual void set_host(media::DataSourceHost* host) OVERRIDE; + virtual void Stop(const base::Closure& callback) OVERRIDE; virtual void Read(int64 position, size_t size, uint8* data, diff --git a/webkit/media/simple_data_source_unittest.cc b/webkit/media/simple_data_source_unittest.cc index fd99202..a21135f 100644 --- a/webkit/media/simple_data_source_unittest.cc +++ b/webkit/media/simple_data_source_unittest.cc @@ -5,7 +5,7 @@ #include "base/bind.h" #include "media/base/filters.h" #include "media/base/mock_callback.h" -#include "media/base/mock_filter_host.h" +#include "media/base/mock_data_source_host.h" #include "media/base/mock_filters.h" #include "net/base/net_errors.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" @@ -154,7 +154,7 @@ class SimpleDataSourceTest : public testing::Test { scoped_ptr<MessageLoop> message_loop_; NiceMock<MockWebURLLoader>* url_loader_; scoped_refptr<SimpleDataSource> data_source_; - StrictMock<media::MockFilterHost> host_; + StrictMock<media::MockDataSourceHost> host_; MockWebFrameClient client_; WebView* view_; diff --git a/webkit/media/web_data_source.h b/webkit/media/web_data_source.h index 5cb27c4..e492e88 100644 --- a/webkit/media/web_data_source.h +++ b/webkit/media/web_data_source.h @@ -6,7 +6,7 @@ #define WEBKIT_MEDIA_WEB_DATA_SOURCE_H_ #include "base/callback.h" -#include "media/base/filters.h" +#include "media/base/data_source.h" #include "media/base/pipeline_status.h" namespace webkit_media { diff --git a/webkit/media/webmediaplayer_proxy.h b/webkit/media/webmediaplayer_proxy.h index 3cff7a4..83877e4 100644 --- a/webkit/media/webmediaplayer_proxy.h +++ b/webkit/media/webmediaplayer_proxy.h @@ -20,6 +20,10 @@ namespace gfx { class Rect; } +namespace media { +class VideoFrame; +} + namespace webkit_media { class WebMediaPlayerImpl; |