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