diff options
author | vrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-14 20:05:13 +0000 |
---|---|---|
committer | vrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-14 20:05:13 +0000 |
commit | e63783695ea1efc9789883c132b7cfb56c26454c (patch) | |
tree | 923cc243b86b2f0a2d9192f388efc7ddffe1882f /media/base/pipeline_impl.cc | |
parent | 8f46b2644162a0f97acf71098631469a49ca67bf (diff) | |
download | chromium_src-e63783695ea1efc9789883c132b7cfb56c26454c.zip chromium_src-e63783695ea1efc9789883c132b7cfb56c26454c.tar.gz chromium_src-e63783695ea1efc9789883c132b7cfb56c26454c.tar.bz2 |
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
Diffstat (limited to 'media/base/pipeline_impl.cc')
-rw-r--r-- | media/base/pipeline_impl.cc | 21 |
1 files changed, 13 insertions, 8 deletions
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<double>(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<int64>(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<int64>(max_buffered_time_)); + return max_buffered_time_; } base::TimeDelta PipelineImpl::GetMediaDuration() const { |