Chromium Code Reviews| Index: media/blink/webmediaplayer_impl.cc |
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc |
| index e56b4bb17a0bc88f2c75e690abca676b8fcddeb9..02ba50503cb9c1d25f644cdb1895050872509ce0 100644 |
| --- a/media/blink/webmediaplayer_impl.cc |
| +++ b/media/blink/webmediaplayer_impl.cc |
| @@ -154,9 +154,12 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| suspending_(false), |
| suspended_(false), |
| resuming_(false), |
| + pending_suspend_resume_cycle_(false), |
| ended_(false), |
| pending_seek_(false), |
| should_notify_time_changed_(false), |
| + fullscreen_(false), |
| + decoder_requires_restart_for_fullscreen_(false), |
| client_(client), |
| encrypted_client_(encrypted_client), |
| delegate_(delegate), |
| @@ -186,7 +189,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( |
| #if defined(OS_ANDROID) // WMPI_CAST |
| cast_impl_(this, client_, params.context_3d_cb(), delegate), |
| #endif |
| - renderer_factory_(std::move(renderer_factory)) { |
| + renderer_factory_(std::move(renderer_factory)), |
| + surface_manager_(params.surface_manager()) { |
| DCHECK(!adjust_allocated_memory_cb_.is_null()); |
| DCHECK(renderer_factory_); |
| @@ -260,6 +264,18 @@ void WebMediaPlayerImpl::load(LoadType load_type, const blink::WebURL& url, |
| DoLoad(load_type, url, cors_mode); |
| } |
| +void WebMediaPlayerImpl::enterFullscreen() { |
| + fullscreen_ = true; |
| + if (decoder_requires_restart_for_fullscreen_) |
| + ScheduleRestart(); |
| +} |
| + |
| +void WebMediaPlayerImpl::exitedFullscreen() { |
| + fullscreen_ = false; |
| + if (decoder_requires_restart_for_fullscreen_) |
| + ScheduleRestart(); |
| +} |
| + |
| void WebMediaPlayerImpl::DoLoad(LoadType load_type, |
| const blink::WebURL& url, |
| CORSMode cors_mode) { |
| @@ -969,8 +985,9 @@ void WebMediaPlayerImpl::OnPipelineSuspended(PipelineStatus status) { |
| } |
| #endif |
| - if (pending_resume_) { |
| + if (pending_resume_ || pending_suspend_resume_cycle_) { |
| pending_resume_ = false; |
| + pending_suspend_resume_cycle_ = false; |
| Resume(); |
| return; |
| } |
| @@ -1221,6 +1238,11 @@ void WebMediaPlayerImpl::Resume() { |
| time_changed)); |
| } |
| +void WebMediaPlayerImpl::ScheduleRestart() { |
| + pending_suspend_resume_cycle_ = true; |
|
DaleCurtis
2016/02/02 01:01:33
Why not just use |pending_resume| ?
watk
2016/02/02 20:38:14
I wish I wrote a comment because I've already forg
watk
2016/02/05 03:42:30
Added some comments for this.
|
| + ScheduleSuspend(); |
| +} |
| + |
| #if defined(OS_ANDROID) // WMPI_CAST |
| bool WebMediaPlayerImpl::isRemote() const { |
| @@ -1309,10 +1331,29 @@ void WebMediaPlayerImpl::NotifyDownloading(bool is_downloading) { |
| "is_downloading_data", is_downloading)); |
| } |
| +void WebMediaPlayerImpl::OnSurfaceRequested( |
| + const SurfaceCreatedCB& surface_created_cb) { |
| + DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| + DCHECK(surface_manager_); |
| + |
| + // A null callback indicates that the decoder is going away. |
| + if (surface_created_cb.is_null()) { |
| + decoder_requires_restart_for_fullscreen_ = false; |
| + return; |
| + } |
| + |
| + decoder_requires_restart_for_fullscreen_ = true; |
|
liberato (no reviews please)
2016/02/02 22:46:57
is this being set unconditionally so that EnterFul
watk
2016/02/05 03:42:30
Yep, your assessment was correct. I tried to comme
|
| + if (fullscreen_) |
| + surface_manager_->CreateFullscreenSurface(surface_created_cb); |
| + else |
| + surface_created_cb.Run(SurfaceManager::kNoSurfaceID); |
| +} |
| + |
| scoped_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() { |
| return renderer_factory_->CreateRenderer( |
| media_task_runner_, worker_task_runner_, audio_source_provider_.get(), |
| - compositor_); |
| + compositor_, |
| + BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnSurfaceRequested)); |
|
liberato (no reviews please)
2016/02/02 22:46:57
should this be #if android? otherwise, it looks l
watk
2016/02/05 03:42:30
Done.
|
| } |
| void WebMediaPlayerImpl::StartPipeline() { |