diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-31 00:06:44 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-31 00:06:44 +0000 |
commit | 6c430207bf0821205fc287ee568042359a2e96b7 (patch) | |
tree | a112c2a2cbe8484b608a89ff7b99107beed02604 /webkit | |
parent | 07e8c4607a2cbd24a617757428611b4ff84ae5d3 (diff) | |
download | chromium_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.cc | 19 | ||||
-rw-r--r-- | webkit/media/buffered_data_source.h | 10 | ||||
-rw-r--r-- | webkit/media/buffered_data_source_unittest.cc | 4 | ||||
-rw-r--r-- | webkit/media/preload.h | 25 | ||||
-rw-r--r-- | webkit/media/webkit_media.gypi | 1 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 8 |
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() { |