Index: content/renderer/media/android/webmediaplayer_android.cc |
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc |
index ca276ca2674f18a24f7c965e447db0cbbe570f6e..dce66c4f08a41198ee5794149c095152641267a5 100644 |
--- a/content/renderer/media/android/webmediaplayer_android.cc |
+++ b/content/renderer/media/android/webmediaplayer_android.cc |
@@ -952,8 +952,10 @@ void WebMediaPlayerAndroid::OnDidExitFullscreen() { |
SetNeedsEstablishPeer(true); |
// We had the fullscreen surface connected to Android MediaPlayer, |
// so reconnect our surface texture for embedded playback. |
- if (!paused() && needs_establish_peer_) |
+ if (!paused() && needs_establish_peer_) { |
+ TryCreateStreamTextureProxyIfNeeded(); |
EstablishSurfaceTexturePeer(); |
+ } |
#if defined(VIDEO_HOLE) |
if (!paused() && needs_external_surface_) |
@@ -1212,7 +1214,7 @@ void WebMediaPlayerAndroid::ReallocateVideoFrame() { |
if (!natural_size_.isEmpty()) { |
// Now we finally know that "stream texture" and "video frame" won't |
// be needed. EME uses "external surface" and "video hole" instead. |
- ResetStreamTextureProxy(); |
+ RemoveSurfaceTextureAndProxy(); |
scoped_refptr<VideoFrame> new_frame = |
VideoFrame::CreateHoleFrame(natural_size_); |
SetCurrentFrameInternal(new_frame); |
@@ -1291,6 +1293,16 @@ void WebMediaPlayerAndroid::PutCurrentFrame() { |
void WebMediaPlayerAndroid::ResetStreamTextureProxy() { |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ RemoveSurfaceTextureAndProxy(); |
+ |
+ TryCreateStreamTextureProxyIfNeeded(); |
+ if (needs_establish_peer_ && is_playing_) |
+ EstablishSurfaceTexturePeer(); |
+} |
+ |
+void WebMediaPlayerAndroid::RemoveSurfaceTextureAndProxy() { |
+ DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ |
if (stream_id_) { |
GLES2Interface* gl = stream_texture_factory_->ContextGL(); |
gl->DeleteTextures(1, &texture_id_); |
@@ -1304,10 +1316,6 @@ void WebMediaPlayerAndroid::ResetStreamTextureProxy() { |
needs_establish_peer_ = !needs_external_surface_ && !is_remote_ && |
!is_fullscreen_ && |
(hasVideo() || IsHLSStream()); |
- |
- TryCreateStreamTextureProxyIfNeeded(); |
- if (needs_establish_peer_ && is_playing_) |
- EstablishSurfaceTexturePeer(); |
} |
void WebMediaPlayerAndroid::TryCreateStreamTextureProxyIfNeeded() { |