Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Unified Diff: content/renderer/media/webmediaplayer_impl.cc

Issue 24267018: Suppress redundant seeks to within same usec (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/webmediaplayer_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/webmediaplayer_impl.cc
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index a99c3aef5920e14e1db9ac4e0afb103eb5867f8b..d738895e5ecd7d51a4ad25d42a1b817d26683e04 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -138,9 +138,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
media_loop_(params.message_loop_proxy()),
paused_(true),
seeking_(false),
- playback_rate_(0.0f),
+ playback_rate_(0.0),
pending_seek_(false),
- pending_seek_seconds_(0.0f),
client_(client),
delegate_(delegate),
defer_load_cb_(params.defer_load_cb()),
@@ -337,30 +336,40 @@ bool WebMediaPlayerImpl::supportsSave() const {
void WebMediaPlayerImpl::seek(double seconds) {
DCHECK(main_loop_->BelongsToCurrentThread());
- base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds);
+ base::TimeDelta new_seek_time = ConvertSecondsToTimestamp(seconds);
+
+ // Suppress redundant seek to same microsecond as current seek. Clear any
+ // pending seek in this case, too. For example, seek(1), seek(2), seek(1)
+ // without any intervening seek completion should result in only a current
+ // seek to (1) without any left-over pending seek.
+ if (seeking_ && new_seek_time == seek_time_) {
wolenetz 2013/10/01 19:51:49 This is incorrect; I'll need to fix this in subseq
+ pending_seek_ = false;
+ return;
+ }
if (starting_ || seeking_) {
pending_seek_ = true;
- pending_seek_seconds_ = seconds;
+ pending_seek_time_ = new_seek_time;
if (chunk_demuxer_)
- chunk_demuxer_->CancelPendingSeek(seek_time);
+ chunk_demuxer_->CancelPendingSeek(pending_seek_time_);
return;
}
+ seek_time_ = new_seek_time;
media_log_->AddEvent(media_log_->CreateSeekEvent(seconds));
// Update our paused time.
if (paused_)
- paused_time_ = seek_time;
+ paused_time_ = seek_time_;
seeking_ = true;
if (chunk_demuxer_)
- chunk_demuxer_->StartWaitingForSeek(seek_time);
+ chunk_demuxer_->StartWaitingForSeek(seek_time_);
// Kick off the asynchronous seek!
pipeline_->Seek(
- seek_time,
+ seek_time_,
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek));
}
@@ -838,7 +847,7 @@ void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) {
seeking_ = false;
if (pending_seek_) {
pending_seek_ = false;
- seek(pending_seek_seconds_);
+ seek(pending_seek_time_.InSecondsF());
return;
}
@@ -882,6 +891,7 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
void WebMediaPlayerImpl::OnPipelineBufferingState(
media::Pipeline::BufferingState buffering_state) {
+ DCHECK(main_loop_->BelongsToCurrentThread());
DVLOG(1) << "OnPipelineBufferingState(" << buffering_state << ")";
switch (buffering_state) {
« no previous file with comments | « content/renderer/media/webmediaplayer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698