summaryrefslogtreecommitdiffstats
path: root/content/renderer/media
diff options
context:
space:
mode:
authorgunsch@chromium.org <gunsch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-22 00:09:00 +0000
committergunsch@chromium.org <gunsch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-22 00:09:00 +0000
commit7b691d3fee8d10f130007016caefa0c6c6cd0681 (patch)
tree98aa70959d02196391dd7f60eb0da21d45163cde /content/renderer/media
parentacc6cb74694a154e7e147605c75ece154d0c7649 (diff)
downloadchromium_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')
-rw-r--r--content/renderer/media/android/media_source_delegate.cc18
-rw-r--r--content/renderer/media/android/media_source_delegate.h2
-rw-r--r--content/renderer/media/android/webmediaplayer_android.cc5
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 {