summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-31 00:06:44 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-31 00:06:44 +0000
commit6c430207bf0821205fc287ee568042359a2e96b7 (patch)
treea112c2a2cbe8484b608a89ff7b99107beed02604 /webkit
parent07e8c4607a2cbd24a617757428611b4ff84ae5d3 (diff)
downloadchromium_src-6c430207bf0821205fc287ee568042359a2e96b7.zip
chromium_src-6c430207bf0821205fc287ee568042359a2e96b7.tar.gz
chromium_src-6c430207bf0821205fc287ee568042359a2e96b7.tar.bz2
Move DataSource::SetPreload() to BufferedDataSource.
Preload is a concept that only applies to HTML media elements and is only implemented by BufferedDataSource. Since the preload value is known when BufferedDataSource is created by WebMediaPlayerImpl, we can remove a lot of unnecessary plumbing in the media code. TEST=amount of data buffered (either visible on controls or via buffered attribute) is the same for each preload value (none, metadata, and auto). http://mastodon.sea/demos/preload contains a test page. Review URL: https://chromiumcodereview.appspot.com/9864022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130004 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/media/buffered_data_source.cc19
-rw-r--r--webkit/media/buffered_data_source.h10
-rw-r--r--webkit/media/buffered_data_source_unittest.cc4
-rw-r--r--webkit/media/preload.h25
-rw-r--r--webkit/media/webkit_media.gypi1
-rw-r--r--webkit/media/webmediaplayer_impl.cc8
6 files changed, 46 insertions, 21 deletions
diff --git a/webkit/media/buffered_data_source.cc b/webkit/media/buffered_data_source.cc
index 7590fd3..3e37f4c 100644
--- a/webkit/media/buffered_data_source.cc
+++ b/webkit/media/buffered_data_source.cc
@@ -42,7 +42,7 @@ BufferedDataSource::BufferedDataSource(
stopped_on_render_loop_(false),
media_is_paused_(true),
media_has_played_(false),
- preload_(media::AUTO),
+ preload_(AUTO),
cache_miss_retries_left_(kNumCacheMissRetries),
bitrate_(0),
playback_rate_(0.0),
@@ -108,6 +108,11 @@ void BufferedDataSource::Initialize(
frame_);
}
+void BufferedDataSource::SetPreload(Preload preload) {
+ DCHECK(MessageLoop::current() == render_loop_);
+ preload_ = preload;
+}
+
bool BufferedDataSource::HasSingleOrigin() {
DCHECK(MessageLoop::current() == render_loop_);
DCHECK(initialize_cb_.is_null() && loader_.get())
@@ -141,11 +146,6 @@ void BufferedDataSource::SetPlaybackRate(float playback_rate) {
&BufferedDataSource::SetPlaybackRateTask, this, playback_rate));
}
-void BufferedDataSource::SetPreload(media::Preload preload) {
- render_loop_->PostTask(FROM_HERE, base::Bind(
- &BufferedDataSource::SetPreloadTask, this, preload));
-}
-
void BufferedDataSource::SetBitrate(int bitrate) {
render_loop_->PostTask(FROM_HERE, base::Bind(
&BufferedDataSource::SetBitrateTask, this, bitrate));
@@ -277,11 +277,6 @@ void BufferedDataSource::SetPlaybackRateTask(float playback_rate) {
loader_->UpdateDeferStrategy(strategy);
}
-void BufferedDataSource::SetPreloadTask(media::Preload preload) {
- DCHECK(MessageLoop::current() == render_loop_);
- preload_ = preload;
-}
-
void BufferedDataSource::SetBitrateTask(int bitrate) {
DCHECK(MessageLoop::current() == render_loop_);
DCHECK(loader_.get());
@@ -295,7 +290,7 @@ BufferedDataSource::ChooseDeferStrategy() {
DCHECK(MessageLoop::current() == render_loop_);
// If the page indicated preload=metadata, then load exactly what is needed
// needed for starting playback.
- if (!media_has_played_ && preload_ == media::METADATA)
+ if (!media_has_played_ && preload_ == METADATA)
return BufferedResourceLoader::kReadThenDefer;
// If the playback has started (at which point the preload value is ignored)
diff --git a/webkit/media/buffered_data_source.h b/webkit/media/buffered_data_source.h
index 42332da..bdadaf5 100644
--- a/webkit/media/buffered_data_source.h
+++ b/webkit/media/buffered_data_source.h
@@ -14,6 +14,7 @@
#include "media/base/data_source.h"
#include "media/base/pipeline_status.h"
#include "webkit/media/buffered_resource_loader.h"
+#include "webkit/media/preload.h"
class MessageLoop;
@@ -43,6 +44,9 @@ class BufferedDataSource : public media::DataSource {
void Initialize(const GURL& url,
const media::PipelineStatusCB& status_cb);
+ // Adjusts the buffering algorithm based on the given preload value.
+ void SetPreload(Preload preload);
+
// Returns true if the media resource has a single origin, false otherwise.
// Only valid to call after Initialize() has completed.
//
@@ -66,7 +70,6 @@ class BufferedDataSource : public media::DataSource {
const media::DataSource::ReadCB& read_cb) OVERRIDE;
virtual bool GetSize(int64* size_out) OVERRIDE;
virtual bool IsStreaming() OVERRIDE;
- virtual void SetPreload(media::Preload preload) OVERRIDE;
virtual void SetBitrate(int bitrate) OVERRIDE;
protected:
@@ -95,9 +98,6 @@ class BufferedDataSource : public media::DataSource {
// and signals the buffered resource loader accordingly.
void SetPlaybackRateTask(float playback_rate);
- // This task saves the preload value for the media.
- void SetPreloadTask(media::Preload preload);
-
// Tells |loader_| the bitrate of the media.
void SetBitrateTask(int bitrate);
@@ -211,7 +211,7 @@ class BufferedDataSource : public media::DataSource {
// This variable holds the value of the preload attribute for the video
// element.
- media::Preload preload_;
+ Preload preload_;
// Number of cache miss retries left.
int cache_miss_retries_left_;
diff --git a/webkit/media/buffered_data_source_unittest.cc b/webkit/media/buffered_data_source_unittest.cc
index 6ae4bcf..abd9fd5 100644
--- a/webkit/media/buffered_data_source_unittest.cc
+++ b/webkit/media/buffered_data_source_unittest.cc
@@ -162,7 +162,7 @@ class BufferedDataSourceTest : public testing::Test {
return loader()->active_loader_->loader_.get();
}
- media::Preload preload() { return data_source_->preload_; }
+ Preload preload() { return data_source_->preload_; }
BufferedResourceLoader::DeferStrategy defer_strategy() {
return loader()->defer_strategy_;
}
@@ -371,7 +371,7 @@ TEST_F(BufferedDataSourceTest, DefaultValues) {
InitializeWith206Response();
// Ensure we have sane values for default loading scenario.
- EXPECT_EQ(media::AUTO, preload());
+ EXPECT_EQ(AUTO, preload());
EXPECT_EQ(BufferedResourceLoader::kThresholdDefer, defer_strategy());
EXPECT_EQ(0, data_source_bitrate());
diff --git a/webkit/media/preload.h b/webkit/media/preload.h
new file mode 100644
index 0000000..ab8143d
--- /dev/null
+++ b/webkit/media/preload.h
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_MEDIA_PRELOAD_H_
+#define WEBKIT_MEDIA_PRELOAD_H_
+
+namespace webkit_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 webkit_media
+
+#endif // WEBKIT_MEDIA_PRELOAD_H_
diff --git a/webkit/media/webkit_media.gypi b/webkit/media/webkit_media.gypi
index 56d8b3d..34aa506 100644
--- a/webkit/media/webkit_media.gypi
+++ b/webkit/media/webkit_media.gypi
@@ -26,6 +26,7 @@
'filter_helpers.cc',
'filter_helpers.h',
'media_stream_client.h',
+ 'preload.h',
'skcanvas_video_renderer.cc',
'skcanvas_video_renderer.h',
'webmediaplayer_delegate.h',
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
index 3fdda4a..6283c65 100644
--- a/webkit/media/webmediaplayer_impl.cc
+++ b/webkit/media/webmediaplayer_impl.cc
@@ -367,7 +367,7 @@ void WebMediaPlayerImpl::setVisible(bool visible) {
#define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, chromium_name) \
COMPILE_ASSERT(static_cast<int>(WebKit::WebMediaPlayer::webkit_name) == \
- static_cast<int>(media::chromium_name), \
+ static_cast<int>(webkit_media::chromium_name), \
mismatching_enums)
COMPILE_ASSERT_MATCHING_ENUM(None, NONE);
COMPILE_ASSERT_MATCHING_ENUM(MetaData, METADATA);
@@ -376,7 +376,11 @@ COMPILE_ASSERT_MATCHING_ENUM(Auto, AUTO);
void WebMediaPlayerImpl::setPreload(WebKit::WebMediaPlayer::Preload preload) {
DCHECK_EQ(main_loop_, MessageLoop::current());
- pipeline_->SetPreload(static_cast<media::Preload>(preload));
+ if (proxy_ && proxy_->data_source()) {
+ // XXX: Why do I need to use webkit_media:: prefix? clang complains!
+ proxy_->data_source()->SetPreload(
+ static_cast<webkit_media::Preload>(preload));
+ }
}
bool WebMediaPlayerImpl::totalBytesKnown() {