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; |