Index: content/browser/media/android/media_player_renderer.cc |
diff --git a/content/browser/media/android/media_player_renderer.cc b/content/browser/media/android/media_player_renderer.cc |
index 303f532605efa2ac8237ff930f46ed1b8d03078d..c673e427092c9ed56baf94357d25fd1039709112 100644 |
--- a/content/browser/media/android/media_player_renderer.cc |
+++ b/content/browser/media/android/media_player_renderer.cc |
@@ -6,6 +6,7 @@ |
#include <memory> |
+#include "content/browser/android/scoped_surface_request_manager.h" |
#include "content/browser/media/android/media_resource_getter_impl.h" |
#include "content/public/browser/browser_context.h" |
#include "content/public/browser/browser_thread.h" |
@@ -23,9 +24,12 @@ namespace content { |
MediaPlayerRenderer::MediaPlayerRenderer(RenderFrameHost* render_frame_host) |
: render_frame_host_(render_frame_host), |
has_error_(false), |
+ is_waiting_for_surface_(false), |
weak_factory_(this) {} |
-MediaPlayerRenderer::~MediaPlayerRenderer() {} |
+MediaPlayerRenderer::~MediaPlayerRenderer() { |
+ CancelScopedSurfaceRequest(); |
+} |
void MediaPlayerRenderer::Initialize( |
media::DemuxerStreamProvider* demuxer_stream_provider, |
@@ -56,9 +60,6 @@ void MediaPlayerRenderer::Initialize( |
GURL(), // frame_url |
false)); // allow_crendentials |
- // TODO(tguilbert): Register and Send the proper surface ID. See |
- // crbug.com/627658 |
- |
media_player_->Initialize(); |
init_cb.Run(media::PIPELINE_OK); |
} |
@@ -99,6 +100,28 @@ void MediaPlayerRenderer::SetPlaybackRate(double playback_rate) { |
} |
} |
+void MediaPlayerRenderer::OnScopedSurfaceRequestCompleted( |
+ gl::ScopedJavaSurface surface) { |
+ DCHECK(is_waiting_for_surface_); |
+ is_waiting_for_surface_ = false; |
+ surface_request_token_ = base::UnguessableToken(); |
+ media_player_->SetVideoSurface(std::move(surface)); |
+} |
+ |
+base::UnguessableToken MediaPlayerRenderer::InitiateScopedSurfaceRequest() { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ |
+ CancelScopedSurfaceRequest(); |
+ |
+ is_waiting_for_surface_ = true; |
+ surface_request_token_ = |
+ ScopedSurfaceRequestManager::GetInstance()->RegisterScopedSurfaceRequest( |
+ base::Bind(&MediaPlayerRenderer::OnScopedSurfaceRequestCompleted, |
+ weak_factory_.GetWeakPtr())); |
+ |
+ return surface_request_token_; |
+} |
+ |
void MediaPlayerRenderer::SetVolume(float volume) { |
media_player_->SetVolume(volume); |
} |
@@ -224,4 +247,14 @@ void MediaPlayerRenderer::OnDecoderResourcesReleased(int player_id) { |
// See crbug.com/636615. |
} |
+void MediaPlayerRenderer::CancelScopedSurfaceRequest() { |
+ if (!is_waiting_for_surface_) |
dcheng
2016/10/03 21:11:27
This bit of state looks like it's always going to
tguilbert
2016/10/03 22:26:19
You are right. Done!
|
+ return; |
+ |
+ ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( |
+ surface_request_token_); |
+ surface_request_token_ = base::UnguessableToken(); |
+ is_waiting_for_surface_ = false; |
+} |
+ |
} // namespace content |