diff options
author | serya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-15 00:06:06 +0000 |
---|---|---|
committer | serya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-15 00:06:06 +0000 |
commit | 5d11eff456ebdd84b7af0f9144d0c83abd69004c (patch) | |
tree | e6cca03b70f1e3ade400d7547a608f6b9234c513 /webkit/glue | |
parent | f820d267a8d402bb3f4139e396c98a61c5c6f2d7 (diff) | |
download | chromium_src-5d11eff456ebdd84b7af0f9144d0c83abd69004c.zip chromium_src-5d11eff456ebdd84b7af0f9144d0c83abd69004c.tar.gz chromium_src-5d11eff456ebdd84b7af0f9144d0c83abd69004c.tar.bz2 |
Fixing dropped seeks.
BUG=92251,chromium-os:19888
TEST=None
Review URL: http://codereview.chromium.org/7890012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101197 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/webmediaplayer_impl.cc | 15 | ||||
-rw-r--r-- | webkit/glue/webmediaplayer_impl.h | 5 |
2 files changed, 19 insertions, 1 deletions
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc index b30e013..b6f41d9a 100644 --- a/webkit/glue/webmediaplayer_impl.cc +++ b/webkit/glue/webmediaplayer_impl.cc @@ -99,6 +99,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( paused_(true), seeking_(false), playback_rate_(0.0f), + pending_seek_(false), client_(client), proxy_(NULL), media_stream_client_(media_stream_client), @@ -295,6 +296,12 @@ void WebMediaPlayerImpl::seek(float seconds) { return; } + if (seeking_) { + pending_seek_ = true; + pending_seek_seconds_ = seconds; + return; + } + media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds); @@ -694,6 +701,13 @@ void WebMediaPlayerImpl::OnPipelineInitialize(PipelineStatus status) { void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { DCHECK(MessageLoop::current() == main_loop_); + seeking_ = false; + if (pending_seek_) { + pending_seek_ = false; + seek(pending_seek_seconds_); + return; + } + if (status == media::PIPELINE_OK) { // Update our paused time. if (paused_) { @@ -701,7 +715,6 @@ void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { } SetReadyState(WebKit::WebMediaPlayer::HaveEnoughData); - seeking_ = false; GetClient()->timeChanged(); } } diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h index 8d9bd80..1b2d8be 100644 --- a/webkit/glue/webmediaplayer_impl.h +++ b/webkit/glue/webmediaplayer_impl.h @@ -243,6 +243,11 @@ class WebMediaPlayerImpl float playback_rate_; base::TimeDelta paused_time_; + // Seek gets pending if another seek is in progress. Only last pending seek + // will have effect. + bool pending_seek_; + float pending_seek_seconds_; + WebKit::WebMediaPlayerClient* client_; scoped_refptr<WebMediaPlayerProxy> proxy_; |