diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-14 20:23:43 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-14 20:23:43 +0000 |
commit | 4948090e4385c271a374e94baf43d2dcc4c230ce (patch) | |
tree | 27597e2489e9caf2accb4df311672d13c84b3e03 /webkit | |
parent | 8ea6f608f2866de703e386bc947d335054da2faa (diff) | |
download | chromium_src-4948090e4385c271a374e94baf43d2dcc4c230ce.zip chromium_src-4948090e4385c271a374e94baf43d2dcc4c230ce.tar.gz chromium_src-4948090e4385c271a374e94baf43d2dcc4c230ce.tar.bz2 |
Fixed bug where playbackRate wasn't being respected.
BUG=16502
TEST=setting defaultPlaybackRate before the media starts playing should be respected when play() is called
Review URL: http://codereview.chromium.org/155404
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20652 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/webmediaplayer_impl.cc | 13 | ||||
-rw-r--r-- | webkit/glue/webmediaplayer_impl.h | 9 |
2 files changed, 18 insertions, 4 deletions
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc index 9f5702f..3bd5138 100644 --- a/webkit/glue/webmediaplayer_impl.cc +++ b/webkit/glue/webmediaplayer_impl.cc @@ -167,6 +167,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client, main_loop_(NULL), filter_factory_(factory), pipeline_thread_("PipelineThread"), + paused_(true), + playback_rate_(0.0f), client_(client) { // Saves the current message loop. DCHECK(!main_loop_); @@ -224,14 +226,14 @@ void WebMediaPlayerImpl::cancelLoad() { void WebMediaPlayerImpl::play() { DCHECK(MessageLoop::current() == main_loop_); - // TODO(hclam): We should restore the previous playback rate rather than - // having it at 1.0. - pipeline_->SetPlaybackRate(1.0f); + paused_ = false; + pipeline_->SetPlaybackRate(playback_rate_); } void WebMediaPlayerImpl::pause() { DCHECK(MessageLoop::current() == main_loop_); + paused_ = true; pipeline_->SetPlaybackRate(0.0f); } @@ -257,7 +259,10 @@ void WebMediaPlayerImpl::setEndTime(float seconds) { void WebMediaPlayerImpl::setRate(float rate) { DCHECK(MessageLoop::current() == main_loop_); - pipeline_->SetPlaybackRate(rate); + playback_rate_ = rate; + if (!paused_) { + pipeline_->SetPlaybackRate(rate); + } } void WebMediaPlayerImpl::setVolume(float volume) { diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h index b8a44b0..c13d30f 100644 --- a/webkit/glue/webmediaplayer_impl.h +++ b/webkit/glue/webmediaplayer_impl.h @@ -252,6 +252,15 @@ class WebMediaPlayerImpl : public WebKit::WebMediaPlayer, scoped_ptr<media::PipelineImpl> pipeline_; base::Thread pipeline_thread_; + // Playback state. + // + // TODO(scherkus): we have these because Pipeline favours the simplicity of a + // single "playback rate" over worrying about paused/stopped etc... It forces + // all clients to manage the pause+playback rate externally, but is that + // really a bad thing? + bool paused_; + float playback_rate_; + WebKit::WebMediaPlayerClient* client_; scoped_refptr<Proxy> proxy_; |