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

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

Issue 206103004: Remove HasAudio(), HasVideo(), GetInitialNaturalSize() from media::Pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Split BufferingStateCB. Created 6 years, 9 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
Index: content/renderer/media/webmediaplayer_impl.cc
diff --git a/content/renderer/media/webmediaplayer_impl.cc b/content/renderer/media/webmediaplayer_impl.cc
index 9399476dd837e07a3435c0bdfebf7ced6fb91742..41bd44db659ea6bdb6cf83ac25f658b01ae44ade 100644
--- a/content/renderer/media/webmediaplayer_impl.cc
+++ b/content/renderer/media/webmediaplayer_impl.cc
@@ -150,6 +150,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy()),
media_log_(new RenderMediaLog()),
pipeline_(media_loop_, media_log_.get()),
+ pipeline_metadata_(),
scherkus (not reviewing) 2014/03/21 22:26:10 nit: no need -- C++ initializer lists will call th
sandersd (OOO until July 31) 2014/03/21 23:30:35 Done.
paused_(true),
seeking_(false),
playback_rate_(0.0f),
@@ -436,19 +437,19 @@ void WebMediaPlayerImpl::setPreload(WebMediaPlayer::Preload preload) {
bool WebMediaPlayerImpl::hasVideo() const {
DCHECK(main_loop_->BelongsToCurrentThread());
- return pipeline_.HasVideo();
+ return pipeline_metadata_.has_video_;
}
bool WebMediaPlayerImpl::hasAudio() const {
DCHECK(main_loop_->BelongsToCurrentThread());
- return pipeline_.HasAudio();
+ return pipeline_metadata_.has_audio_;
}
blink::WebSize WebMediaPlayerImpl::naturalSize() const {
DCHECK(main_loop_->BelongsToCurrentThread());
- return blink::WebSize(natural_size_);
+ return blink::WebSize(pipeline_metadata_.natural_size_);
}
bool WebMediaPlayerImpl::paused() const {
@@ -968,33 +969,19 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) {
InvalidateOnMainThread();
}
-void WebMediaPlayerImpl::OnPipelineBufferingState(
- media::Pipeline::BufferingState buffering_state) {
- DVLOG(1) << "OnPipelineBufferingState(" << buffering_state << ")";
-
- switch (buffering_state) {
- case media::Pipeline::kHaveMetadata:
- // TODO(scherkus): Would be better to have a metadata changed callback
- // that contained the size information as well whether audio/video is
- // present. Doing so would let us remove more methods off Pipeline.
- natural_size_ = pipeline_.GetInitialNaturalSize();
-
- SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
-
- if (hasVideo() && client_->needsWebLayerForVideo()) {
- DCHECK(!video_weblayer_);
- video_weblayer_.reset(
- new webkit::WebLayerImpl(cc::VideoLayer::Create(this)));
- client_->setWebLayer(video_weblayer_.get());
- }
- break;
- case media::Pipeline::kPrerollCompleted:
- // Only transition to ReadyStateHaveEnoughData if we don't have
- // any pending seeks because the transition can cause Blink to
- // report that the most recent seek has completed.
- if (!pending_seek_)
- SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
- break;
+void WebMediaPlayerImpl::OnPipelineHaveMetadata(
+ media::PipelineMetadata metadata) {
+ DVLOG(1) << "OnPipelineHaveMetadata";
+
+ pipeline_metadata_ = metadata;
+
+ SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
+
+ if (hasVideo() && client_->needsWebLayerForVideo()) {
+ DCHECK(!video_weblayer_);
+ video_weblayer_.reset(
+ new webkit::WebLayerImpl(cc::VideoLayer::Create(this)));
+ client_->setWebLayer(video_weblayer_.get());
}
// TODO(scherkus): This should be handled by HTMLMediaElement and controls
@@ -1002,6 +989,21 @@ void WebMediaPlayerImpl::OnPipelineBufferingState(
InvalidateOnMainThread();
}
+void WebMediaPlayerImpl::OnPipelinePrerollCompleted() {
+ DVLOG(1) << "OnPipelinePrerollCompleted";
+
+ // Only transition to ReadyStateHaveEnoughData if we don't have
+ // any pending seeks because the transition can cause Blink to
+ // report that the most recent seek has completed.
+ if (!pending_seek_) {
+ SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
+
+ // TODO(scherkus): This should be handled by HTMLMediaElement and controls
+ // should know when to invalidate themselves http://crbug.com/337015
+ InvalidateOnMainThread();
+ }
+}
+
void WebMediaPlayerImpl::OnDemuxerOpened() {
DCHECK(main_loop_->BelongsToCurrentThread());
client_->mediaSourceOpened(new WebMediaSourceImpl(
@@ -1220,7 +1222,8 @@ void WebMediaPlayerImpl::StartPipeline() {
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded),
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError),
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek),
- BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineBufferingState),
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineHaveMetadata),
+ BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelinePrerollCompleted),
BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChange));
}
@@ -1282,7 +1285,7 @@ void WebMediaPlayerImpl::OnNaturalSizeChange(gfx::Size size) {
media_log_->AddEvent(
media_log_->CreateVideoSizeSetEvent(size.width(), size.height()));
- natural_size_ = size;
+ pipeline_metadata_.natural_size_ = size;
client_->sizeChanged();
}

Powered by Google App Engine
This is Rietveld 408576698