Index: media/blink/webmediaplayer_impl.cc |
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
index 7eb3e70716f3e7c643380e70a44f5200f8df484d..a2b9bee167e359411c16c3fa46685557b1fd55c8 100644 |
--- a/media/blink/webmediaplayer_impl.cc |
+++ b/media/blink/webmediaplayer_impl.cc |
@@ -179,8 +179,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
pending_suspend_resume_cycle_(false), |
ended_(false), |
should_notify_time_changed_(false), |
- fullscreen_(false), |
- decoder_requires_restart_for_fullscreen_(false), |
+ overlay_enabled_(false), |
+ decoder_requires_restart_for_overlay_(false), |
client_(client), |
encrypted_client_(encrypted_client), |
delegate_(delegate), |
@@ -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_); |
+ force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kForceVideoOverlays); |
+ |
if (delegate_) |
delegate_id_ = delegate_->AddObserver(this); |
@@ -283,26 +286,38 @@ 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()); |
} |
- if (decoder_requires_restart_for_fullscreen_) |
+ |
+ if (decoder_requires_restart_for_overlay_) |
ScheduleRestart(); |
} |
-void WebMediaPlayerImpl::exitedFullscreen() { |
- fullscreen_ = false; |
+void WebMediaPlayerImpl::DisableOverlay() { |
+ overlay_enabled_ = false; |
surface_created_cb_.Cancel(); |
- fullscreen_surface_id_ = SurfaceManager::kNoSurfaceID; |
- if (decoder_requires_restart_for_fullscreen_) |
+ overlay_surface_id_ = SurfaceManager::kNoSurfaceID; |
+ |
+ if (decoder_requires_restart_for_overlay_) |
ScheduleRestart(); |
} |
+void WebMediaPlayerImpl::enteredFullscreen() { |
+ if (!force_video_overlays_) |
+ EnableOverlay(); |
+} |
+ |
+void WebMediaPlayerImpl::exitedFullscreen() { |
+ if (!force_video_overlays_) |
+ DisableOverlay(); |
+} |
+ |
void WebMediaPlayerImpl::DoLoad(LoadType load_type, |
const blink::WebURL& url, |
CORSMode cors_mode) { |
@@ -1012,7 +1027,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_); |
@@ -1118,7 +1133,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; |
@@ -1299,7 +1314,10 @@ void WebMediaPlayerImpl::NotifyDownloading(bool is_downloading) { |
} |
void WebMediaPlayerImpl::OnSurfaceCreated(int surface_id) { |
- fullscreen_surface_id_ = surface_id; |
+ if (force_video_overlays_ && surface_id == SurfaceManager::kNoSurfaceID) |
+ LOG(ERROR) << "Create surface failed."; |
+ |
+ overlay_surface_id_ = surface_id; |
if (!pending_surface_request_cb_.is_null()) |
base::ResetAndReturn(&pending_surface_request_cb_).Run(surface_id); |
} |
@@ -1312,7 +1330,7 @@ void WebMediaPlayerImpl::OnSurfaceRequested( |
// A null callback indicates that the decoder is going away. |
if (surface_created_cb.is_null()) { |
- decoder_requires_restart_for_fullscreen_ = false; |
+ decoder_requires_restart_for_overlay_ = false; |
pending_surface_request_cb_.Reset(); |
return; |
} |
@@ -1324,10 +1342,10 @@ void WebMediaPlayerImpl::OnSurfaceRequested( |
// of surface for the fullscreen state. |
// 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_); |
+ decoder_requires_restart_for_overlay_ = true; |
+ 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 { |
@@ -1337,6 +1355,9 @@ void WebMediaPlayerImpl::OnSurfaceRequested( |
} |
std::unique_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() { |
+ if (force_video_overlays_) |
+ EnableOverlay(); |
+ |
RequestSurfaceCB request_surface_cb; |
#if defined(OS_ANDROID) |
request_surface_cb = |
@@ -1627,7 +1648,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; |