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(); |
} |