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

Unified Diff: content/renderer/media/android/webmediaplayer_android.cc

Issue 1212823003: Recover from timing problem at exit of video-fullscreen (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased and removed trailing blank line Created 5 years, 5 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
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698