summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-16 17:14:25 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-16 17:14:25 +0000
commit236119cf32eb61f4b775ba573ecf46a1c504e7a3 (patch)
tree9a292fdefecf37aa48d448f3f7706ab5521e4d33
parent7046bfcb6c8f46d0693c129d52de27bc68042af7 (diff)
downloadchromium_src-236119cf32eb61f4b775ba573ecf46a1c504e7a3.zip
chromium_src-236119cf32eb61f4b775ba573ecf46a1c504e7a3.tar.gz
chromium_src-236119cf32eb61f4b775ba573ecf46a1c504e7a3.tar.bz2
Removing DataSource from Filter hierarchy and refactoring FilterHost into DemuxerHost & DataSourceHost.
Over the last year, several refactorings have caused DataSource to have almost nothing in common with the Filter interface. This change removes it from the Filter class hierarchy and splits up the FilterHost interface so that DataSource, Demuxer, and Filter have their own host interfaces. Splitting FilterHost improves encapsulation and makes it easier to reason about which host methods are required by different parts of the code. BUG= TEST=media_unittests Review URL: http://codereview.chromium.org/8936014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114819 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--media/base/composite_filter.cc37
-rw-r--r--media/base/data_source.cc30
-rw-r--r--media/base/data_source.h86
-rw-r--r--media/base/demuxer.cc4
-rw-r--r--media/base/demuxer.h45
-rw-r--r--media/base/filter_host.h28
-rw-r--r--media/base/filters.cc3
-rw-r--r--media/base/filters.h43
-rw-r--r--media/base/mock_data_source_host.cc13
-rw-r--r--media/base/mock_data_source_host.h32
-rw-r--r--media/base/mock_demuxer_host.cc13
-rw-r--r--media/base/mock_demuxer_host.h38
-rw-r--r--media/base/mock_filters.cc8
-rw-r--r--media/base/mock_filters.h7
-rw-r--r--media/base/pipeline.h4
-rw-r--r--media/base/pipeline_impl.cc9
-rw-r--r--media/base/pipeline_impl.h23
-rw-r--r--media/base/preload.h25
-rw-r--r--media/filters/chunk_demuxer.cc11
-rw-r--r--media/filters/chunk_demuxer.h2
-rw-r--r--media/filters/chunk_demuxer_unittest.cc31
-rw-r--r--media/filters/ffmpeg_demuxer.cc15
-rw-r--r--media/filters/ffmpeg_demuxer.h8
-rw-r--r--media/filters/ffmpeg_demuxer_unittest.cc4
-rw-r--r--media/filters/file_data_source.cc4
-rw-r--r--media/filters/file_data_source.h8
-rw-r--r--media/filters/file_data_source_unittest.cc16
-rw-r--r--media/media.gyp7
-rw-r--r--webkit/media/buffered_data_source.cc10
-rw-r--r--webkit/media/buffered_data_source.h9
-rw-r--r--webkit/media/buffered_data_source_unittest.cc4
-rw-r--r--webkit/media/simple_data_source.cc3
-rw-r--r--webkit/media/simple_data_source.h8
-rw-r--r--webkit/media/simple_data_source_unittest.cc4
-rw-r--r--webkit/media/web_data_source.h2
-rw-r--r--webkit/media/webmediaplayer_proxy.h4
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;