Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index 0b76251098e5f95c5021d7f3586a3a9f60e17ea1..2dba1773b8594bc6466e91ca45b0e80c88c848b3 100644 |
| --- a/media/blink/webmediaplayer_impl.cc |
| +++ b/media/blink/webmediaplayer_impl.cc |
| @@ -207,7 +207,11 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| surface_manager_(params.surface_manager()), |
| overlay_surface_id_(SurfaceManager::kNoSurfaceID), |
| suppress_destruction_errors_(false), |
| - can_suspend_state_(CanSuspendState::UNKNOWN) { |
| + can_suspend_state_(CanSuspendState::UNKNOWN), |
| + is_media_remoting_(false), |
| + is_remote_sink_available_(false), |
| + is_encrypted_content_(false), |
| + is_remote_cdm_cb_(params.is_remote_cdm_cb()) { |
| DCHECK(!adjust_allocated_memory_cb_.is_null()); |
| DCHECK(renderer_factory_); |
| DCHECK(client_); |
| @@ -311,11 +315,13 @@ void WebMediaPlayerImpl::DisableOverlay() { |
| void WebMediaPlayerImpl::enteredFullscreen() { |
| if (!force_video_overlays_) |
| EnableOverlay(); |
| + videoEnteredFullscreen(); |
| } |
| void WebMediaPlayerImpl::exitedFullscreen() { |
| if (!force_video_overlays_) |
| DisableOverlay(); |
| + videoExitedFullscreen(); |
| } |
| void WebMediaPlayerImpl::DoLoad(LoadType load_type, |
| @@ -864,6 +870,16 @@ void WebMediaPlayerImpl::OnEncryptedMediaInitData( |
| // TODO(xhwang): Update this UMA name. https://crbug.com/589251 |
| UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); |
| + is_encrypted_content_ = true; |
| + // Check whether we can switch to remoting for encrypted video. Once switching |
| + // happens, it is not able to switch back to local media renderer without |
| + // refreshing the page. |
| + if (is_remote_sink_available_ && !is_media_remoting_ && |
| + !is_remote_cdm_cb_.is_null() && is_remote_cdm_cb_.Run()) { |
| + is_media_remoting_ = true; |
| + SwitchMediaRenderer(); |
| + } |
| + |
| encrypted_client_->encrypted( |
| ConvertToWebInitDataType(init_data_type), init_data.data(), |
| base::saturated_cast<unsigned int>(init_data.size())); |
| @@ -1725,4 +1741,45 @@ void WebMediaPlayerImpl::ScheduleIdlePauseTimer() { |
| this, &WebMediaPlayerImpl::OnPause); |
| } |
| +void WebMediaPlayerImpl::videoEnteredFullscreen() { |
| + if (is_encrypted_content_ || is_media_remoting_ || !is_remote_sink_available_) |
| + return; |
| + |
| + is_media_remoting_ = true; |
| + SwitchMediaRenderer(); |
| +} |
| + |
| +void WebMediaPlayerImpl::videoExitedFullscreen() { |
| + if (is_encrypted_content_ || !is_media_remoting_) |
| + return; |
| + |
| + is_media_remoting_ = false; |
| + SwitchMediaRenderer(); |
| +} |
| + |
| +void WebMediaPlayerImpl::OnSinkAvailable() { |
|
liberato (no reviews please)
2016/08/29 16:49:12
would it be clearer if these things were pulled ou
xjz
2016/09/09 23:13:06
Yes. Done.
|
| + is_remote_sink_available_ = true; |
| +} |
| + |
| +void WebMediaPlayerImpl::OnSinkGone() { |
| + is_remote_sink_available_ = false; |
| + if (is_media_remoting_) { |
| + is_media_remoting_ = false; |
| + if (!is_encrypted_content_) { |
| + SwitchMediaRenderer(); |
| + } else { |
| + // TODO(xjz): Need to tell the user to refresh the page. |
| + } |
| + } |
| +} |
| + |
| +// Switch media renderer between local playing back and remoting media renderer |
|
liberato (no reviews please)
2016/08/29 16:49:12
please move this to the .h (good comment, by the w
xjz
2016/09/09 23:13:06
Done.
|
| +// according to |is_media_remoting_|. |
| +// Note: Always set |is_media_remoting_| accordingly before calling this method. |
| +void WebMediaPlayerImpl::SwitchMediaRenderer() { |
|
liberato (no reviews please)
2016/08/29 16:49:12
maybe take the new value of is_media_remoting_ as
xjz
2016/09/09 23:13:06
Done.
|
| + VLOG(2) << "Switch to: " << (is_media_remoting_ ? "Remoting" : "Local"); |
| + pipeline_controller_.Suspend(); |
| + pipeline_controller_.Resume(); |
|
liberato (no reviews please)
2016/08/29 16:49:12
how does this switch to remote playback?
is there
xjz
2016/09/09 23:13:06
Yes. The implementation will be in the upcoming CL
|
| +} |
| + |
| } // namespace media |