Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index c0cdfcc5c25245dd8da65c0ec0c301947fcd5b88..2afb497e07013b0ce1cf9bfa9fb801e569bdd645 100644 |
| --- a/media/blink/webmediaplayer_impl.cc |
| +++ b/media/blink/webmediaplayer_impl.cc |
| @@ -179,7 +179,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| pending_suspend_resume_cycle_(false), |
| ended_(false), |
| should_notify_time_changed_(false), |
| - fullscreen_(false), |
| + overlay_enabled_(false), |
| decoder_requires_restart_for_fullscreen_(false), |
| client_(client), |
| encrypted_client_(encrypted_client), |
| @@ -205,13 +205,16 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| volume_multiplier_(1.0), |
| renderer_factory_(std::move(renderer_factory)), |
| surface_manager_(params.surface_manager()), |
| - fullscreen_surface_id_(SurfaceManager::kNoSurfaceID), |
| + overlay_surface_id_(SurfaceManager::kNoSurfaceID), |
| suppress_destruction_errors_(false), |
| can_suspend_state_(CanSuspendState::UNKNOWN) { |
| DCHECK(!adjust_allocated_memory_cb_.is_null()); |
| DCHECK(renderer_factory_); |
| DCHECK(client_); |
| + use_overlay_only_ = base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kForceMediaPlayerUsingOverlay); |
| + |
| if (delegate_) |
| delegate_id_ = delegate_->AddObserver(this); |
| @@ -283,22 +286,36 @@ bool WebMediaPlayerImpl::supportsOverlayFullscreenVideo() { |
| #endif |
| } |
| -void WebMediaPlayerImpl::enteredFullscreen() { |
| - fullscreen_ = true; |
| +void WebMediaPlayerImpl::EnableOverlay() { |
| + overlay_enabled_ = true; |
| if (surface_manager_) { |
| surface_created_cb_.Reset( |
| base::Bind(&WebMediaPlayerImpl::OnSurfaceCreated, AsWeakPtr())); |
| surface_manager_->CreateFullscreenSurface(pipeline_metadata_.natural_size, |
| surface_created_cb_.callback()); |
| } |
| +} |
| + |
| +void WebMediaPlayerImpl::DisableOverlay() { |
|
liberato (no reviews please)
2016/07/18 20:19:58
DCHECK(overlay_enabled_)
AndyWu
2016/07/18 22:21:49
Done, thanks.
|
| + overlay_enabled_ = false; |
| + surface_created_cb_.Cancel(); |
| + overlay_surface_id_ = SurfaceManager::kNoSurfaceID; |
| +} |
| + |
| +void WebMediaPlayerImpl::enteredFullscreen() { |
| + if (use_overlay_only_) |
| + return; |
| + |
| + EnableOverlay(); |
| if (decoder_requires_restart_for_fullscreen_) |
| ScheduleRestart(); |
| } |
| void WebMediaPlayerImpl::exitedFullscreen() { |
| - fullscreen_ = false; |
| - surface_created_cb_.Cancel(); |
| - fullscreen_surface_id_ = SurfaceManager::kNoSurfaceID; |
| + if (use_overlay_only_) |
| + return; |
| + |
| + DisableOverlay(); |
| if (decoder_requires_restart_for_fullscreen_) |
| ScheduleRestart(); |
| } |
| @@ -1012,7 +1029,7 @@ void WebMediaPlayerImpl::OnMetadata(PipelineMetadata metadata) { |
| pipeline_metadata_.natural_size = gfx::Size(size.height(), size.width()); |
| } |
| - if (fullscreen_ && surface_manager_) |
| + if (overlay_enabled_ && surface_manager_) |
| surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); |
| DCHECK(!video_weblayer_); |
| @@ -1110,7 +1127,7 @@ void WebMediaPlayerImpl::OnVideoNaturalSizeChange(const gfx::Size& size) { |
| media_log_->AddEvent( |
| media_log_->CreateVideoSizeSetEvent(size.width(), size.height())); |
| - if (fullscreen_ && surface_manager_) |
| + if (overlay_enabled_ && surface_manager_) |
| surface_manager_->NaturalSizeChanged(size); |
| pipeline_metadata_.natural_size = size; |
| @@ -1291,7 +1308,7 @@ void WebMediaPlayerImpl::NotifyDownloading(bool is_downloading) { |
| } |
| void WebMediaPlayerImpl::OnSurfaceCreated(int surface_id) { |
|
liberato (no reviews please)
2016/07/18 20:19:58
you might want to handle error cases here. what i
AndyWu
2016/07/18 22:21:49
If the content is DRM protected, it will failed wh
|
| - fullscreen_surface_id_ = surface_id; |
| + overlay_surface_id_ = surface_id; |
| if (!pending_surface_request_cb_.is_null()) |
| base::ResetAndReturn(&pending_surface_request_cb_).Run(surface_id); |
| } |
| @@ -1317,9 +1334,9 @@ void WebMediaPlayerImpl::OnSurfaceRequested( |
| // TODO(watk): Don't require a pipeline restart to switch surfaces for |
| // cases where it isn't necessary. |
| decoder_requires_restart_for_fullscreen_ = true; |
| - if (fullscreen_) { |
| - if (fullscreen_surface_id_ != SurfaceManager::kNoSurfaceID) |
| - surface_created_cb.Run(fullscreen_surface_id_); |
| + if (overlay_enabled_) { |
| + if (overlay_surface_id_ != SurfaceManager::kNoSurfaceID) |
| + surface_created_cb.Run(overlay_surface_id_); |
| else |
| pending_surface_request_cb_ = surface_created_cb; |
| } else { |
| @@ -1329,6 +1346,9 @@ void WebMediaPlayerImpl::OnSurfaceRequested( |
| } |
| std::unique_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() { |
| + if (use_overlay_only_) |
| + EnableOverlay(); |
|
watk
2016/07/18 20:03:02
Is it possible for there to be more than one media
AndyWu
2016/07/18 22:21:49
In Cast for ATV, there is only one media player.
W
|
| + |
| RequestSurfaceCB request_surface_cb; |
| #if defined(OS_ANDROID) |
| request_surface_cb = |
| @@ -1619,7 +1639,7 @@ WebMediaPlayerImpl::UpdatePlayState_ComputePlayState(bool is_remote, |
| if (!has_session) { |
| result.delegate_state = DelegateState::GONE; |
| } else if (paused_) { |
| - if (seeking() || fullscreen_) { |
| + if (seeking() || overlay_enabled_) { |
| result.delegate_state = DelegateState::PAUSED_BUT_NOT_IDLE; |
| } else if (ended_) { |
| result.delegate_state = DelegateState::ENDED; |