Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(128)

Unified Diff: media/blink/webmediaplayer_impl.cc

Issue 1655083002: Enable SurfaceView fullscreen video on Android with WebMediaPlayerImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@avda-sv
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698