From e63783695ea1efc9789883c132b7cfb56c26454c Mon Sep 17 00:00:00 2001 From: "vrk@google.com" Date: Mon, 14 Jun 2010 20:05:13 +0000 Subject: Added checks to GetBufferedTime() to cap at the media's duration No longer tries to estimate buffered time when media is fully loaded. Also caps estimation at the duration of the media. BUG=none TEST=media_unittests Review URL: http://codereview.chromium.org/2782004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49714 0039d316-1c4b-4281-b951-d872f2087c98 --- media/base/pipeline_impl.cc | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'media/base/pipeline_impl.cc') diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index d7f153d..ec0f791 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc @@ -221,11 +221,13 @@ base::TimeDelta PipelineImpl::GetCurrentTime() const { return elapsed; } - base::TimeDelta PipelineImpl::GetBufferedTime() { - DCHECK(buffered_bytes_ >= current_bytes_); AutoLock auto_lock(lock_); + // If media is fully loaded, then return duration. + if (loaded_) + return duration_; + // If buffered time was set, we report that value directly. if (buffered_time_.ToInternalValue() > 0) return buffered_time_; @@ -238,15 +240,18 @@ base::TimeDelta PipelineImpl::GetBufferedTime() { double current_time = static_cast(current_bytes_) / total_bytes_ * duration_.InMilliseconds(); double rate = current_time / current_bytes_; - double buffered_time = rate * (buffered_bytes_ - current_bytes_) + - current_time; + DCHECK_GE(buffered_bytes_, current_bytes_); + base::TimeDelta buffered_time = base::TimeDelta::FromMilliseconds( + static_cast(rate * (buffered_bytes_ - current_bytes_) + + current_time)); + + // Cap approximated buffered time at the length of the video. + buffered_time = std::min(buffered_time, duration_); // Only print the max buffered time for smooth buffering. - if (buffered_time > max_buffered_time_) - max_buffered_time_ = buffered_time; + max_buffered_time_ = std::max(buffered_time, max_buffered_time_); - return base::TimeDelta::FromMilliseconds( - static_cast(max_buffered_time_)); + return max_buffered_time_; } base::TimeDelta PipelineImpl::GetMediaDuration() const { -- cgit v1.1