diff options
author | gunsch@chromium.org <gunsch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-22 00:09:00 +0000 |
---|---|---|
committer | gunsch@chromium.org <gunsch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-22 00:09:00 +0000 |
commit | 7b691d3fee8d10f130007016caefa0c6c6cd0681 (patch) | |
tree | 98aa70959d02196391dd7f60eb0da21d45163cde /content/renderer/media | |
parent | acc6cb74694a154e7e147605c75ece154d0c7649 (diff) | |
download | chromium_src-7b691d3fee8d10f130007016caefa0c6c6cd0681.zip chromium_src-7b691d3fee8d10f130007016caefa0c6c6cd0681.tar.gz chromium_src-7b691d3fee8d10f130007016caefa0c6c6cd0681.tar.bz2 |
Fixes WebMediaPlayerAndroid to respect infinite-duration media streams.
Tested primarily on Android from the following stream:
https://www.youtube.com/tv#/watch?v=xrM34fdmloc
R=damienv@chromium.org,qinmin@chromium.org
BUG=b/13981784
Review URL: https://codereview.chromium.org/239743005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265119 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/media')
3 files changed, 10 insertions, 15 deletions
diff --git a/content/renderer/media/android/media_source_delegate.cc b/content/renderer/media/android/media_source_delegate.cc index 58514be..324ee80 100644 --- a/content/renderer/media/android/media_source_delegate.cc +++ b/content/renderer/media/android/media_source_delegate.cc @@ -677,7 +677,7 @@ void MediaSourceDelegate::NotifyDemuxerReady() { configs->video_extra_data = std::vector<uint8>( config.extra_data(), config.extra_data() + config.extra_data_size()); } - configs->duration_ms = GetDurationMs(); + configs->duration = GetDuration(); if (demuxer_client_) demuxer_client_->DemuxerReady(demuxer_client_id_, *configs); @@ -686,18 +686,16 @@ void MediaSourceDelegate::NotifyDemuxerReady() { is_video_encrypted_ = configs->is_video_encrypted; } -int MediaSourceDelegate::GetDurationMs() { +base::TimeDelta MediaSourceDelegate::GetDuration() const { DCHECK(media_loop_->BelongsToCurrentThread()); if (!chunk_demuxer_) - return -1; + return media::kNoTimestamp(); - double duration_ms = chunk_demuxer_->GetDuration() * 1000; - if (duration_ms > std::numeric_limits<int32>::max()) { - LOG(WARNING) << "Duration from ChunkDemuxer is too large; probably " - "something has gone wrong."; - return std::numeric_limits<int32>::max(); - } - return duration_ms; + double duration = chunk_demuxer_->GetDuration(); + if (duration == std::numeric_limits<double>::infinity()) + return media::kInfiniteDuration(); + + return ConvertSecondsToTimestamp(duration); } void MediaSourceDelegate::OnDemuxerOpened() { diff --git a/content/renderer/media/android/media_source_delegate.h b/content/renderer/media/android/media_source_delegate.h index a572b1e..d7e6ddc 100644 --- a/content/renderer/media/android/media_source_delegate.h +++ b/content/renderer/media/android/media_source_delegate.h @@ -168,7 +168,7 @@ class MediaSourceDelegate : public media::DemuxerHost { const scoped_refptr<media::DecoderBuffer>& buffer); // Helper function for calculating duration. - int GetDurationMs(); + base::TimeDelta GetDuration() const; bool IsSeeking() const; diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc index 5e0d668..34f47ed 100644 --- a/content/renderer/media/android/webmediaplayer_android.cc +++ b/content/renderer/media/android/webmediaplayer_android.cc @@ -422,10 +422,7 @@ double WebMediaPlayerAndroid::maxTimeSeekable() const { if (ready_state_ < WebMediaPlayer::ReadyStateHaveMetadata) return 0.0; - if (duration() == std::numeric_limits<double>::infinity()) - return 0.0; - - return std::min(std::numeric_limits<int32>::max() / 1000.0, duration()); + return duration(); } bool WebMediaPlayerAndroid::didLoadingProgress() const { |