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

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

Issue 562803002: Revert of Clean up WebMediaPlayerAndroid needs_establish_peer_ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 5c7e86b6dfe437ac96fd3107b3f7bd787c311493..67aa9b097a3ed7e1755f7f42697bd01a9ab5a5a3 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -135,7 +135,6 @@
stream_id_(0),
is_playing_(false),
needs_establish_peer_(true),
- in_fullscreen_(false),
stream_texture_proxy_initialized_(false),
has_size_info_(false),
stream_texture_factory_(factory),
@@ -163,7 +162,7 @@
if (force_use_overlay_embedded_video_ ||
player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) {
// Defer stream texture creation until we are sure it's necessary.
- needs_external_surface_ = true;
+ needs_establish_peer_ = false;
current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1));
}
#endif // defined(VIDEO_HOLE)
@@ -304,11 +303,18 @@
#if defined(VIDEO_HOLE)
if ((hasVideo() || IsHLSStream()) && needs_external_surface_ &&
!player_manager_->IsInFullscreen(frame_)) {
+ DCHECK(!needs_establish_peer_);
player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
}
#endif // defined(VIDEO_HOLE)
TryCreateStreamTextureProxyIfNeeded();
+ // There is no need to establish the surface texture peer for fullscreen
+ // video.
+ if ((hasVideo() || IsHLSStream()) && needs_establish_peer_ &&
+ !player_manager_->IsInFullscreen(frame_)) {
+ EstablishSurfaceTexturePeer();
+ }
if (paused())
player_manager_->Start(player_id_);
@@ -748,6 +754,7 @@
// process are sequential, the OnSeekComplete() will only occur
// once OnPlaybackComplete() is done. As the playback can only be executed
// upon completion of OnSeekComplete(), the request needs to be saved.
+ is_playing_ = false;
if (seeking_ && seek_time_ == base::TimeDelta())
pending_playback_ = true;
}
@@ -813,18 +820,25 @@
if (force_use_overlay_embedded_video_ ||
(media_source_delegate_ && media_source_delegate_->IsVideoEncrypted() &&
player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) {
+ needs_external_surface_ = true;
if (!paused() && !player_manager_->IsInFullscreen(frame_))
player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
- } else {
- needs_external_surface_ = false;
+ } else if (stream_texture_proxy_ && !stream_id_) {
+ // Do deferred stream texture creation finally.
+ DoCreateStreamTexture();
+ SetNeedsEstablishPeer(true);
}
#endif // defined(VIDEO_HOLE)
natural_size_.width = width;
natural_size_.height = height;
- // hasVideo() might have changed since play was called, so need to possibly
- // estlibash peer here.
- EstablishSurfaceTexturePeerIfNeeded();
+ // When play() gets called, |natural_size_| may still be empty and
+ // EstablishSurfaceTexturePeer() will not get called. As a result, the video
+ // may play without a surface texture. When we finally get the valid video
+ // size here, we should call EstablishSurfaceTexturePeer() if it has not been
+ // previously called.
+ if (!paused() && needs_establish_peer_)
+ EstablishSurfaceTexturePeer();
ReallocateVideoFrame();
@@ -862,15 +876,16 @@
DCHECK(!media_source_delegate_);
DrawRemotePlaybackText(remote_playback_message);
is_remote_ = true;
- needs_establish_peer_ = true;
- EstablishSurfaceTexturePeerIfNeeded();
+ SetNeedsEstablishPeer(false);
}
void WebMediaPlayerAndroid::OnDisconnectedFromRemoteDevice() {
DCHECK(main_thread_checker_.CalledOnValidThread());
DCHECK(!media_source_delegate_);
+ SetNeedsEstablishPeer(true);
+ if (!paused())
+ EstablishSurfaceTexturePeer();
is_remote_ = false;
- EstablishSurfaceTexturePeerIfNeeded();
ReallocateVideoFrame();
}
@@ -880,8 +895,13 @@
}
void WebMediaPlayerAndroid::OnDidExitFullscreen() {
- in_fullscreen_ = false;
- EstablishSurfaceTexturePeerIfNeeded();
+ // |needs_external_surface_| is always false on non-TV devices.
+ if (!needs_external_surface_)
+ SetNeedsEstablishPeer(true);
+ // We had the fullscreen surface connected to Android MediaPlayer,
+ // so reconnect our surface texture for embedded playback.
+ if (!paused() && needs_establish_peer_)
+ EstablishSurfaceTexturePeer();
#if defined(VIDEO_HOLE)
if (!paused() && needs_external_surface_)
@@ -943,7 +963,9 @@
}
void WebMediaPlayerAndroid::OnPlayerReleased() {
- needs_establish_peer_ = true; // Established when this plays.
+ // |needs_external_surface_| is always false on non-TV devices.
+ if (!needs_external_surface_)
+ needs_establish_peer_ = true;
if (is_playing_)
OnMediaPlayerPause();
@@ -973,7 +995,8 @@
break;
}
player_manager_->ReleaseResources(player_id_);
- needs_establish_peer_ = true; // Established when this plays.
+ if (!needs_external_surface_)
+ SetNeedsEstablishPeer(true);
}
void WebMediaPlayerAndroid::OnDestruct() {
@@ -1216,17 +1239,32 @@
if (!stream_texture_factory_)
return;
- if (needs_external_surface_)
- return;
-
stream_texture_proxy_.reset(stream_texture_factory_->CreateProxy());
- if (stream_texture_proxy_) {
+ if (needs_establish_peer_ && stream_texture_proxy_) {
DoCreateStreamTexture();
ReallocateVideoFrame();
-
- if (video_frame_provider_client_)
- stream_texture_proxy_->SetClient(video_frame_provider_client_);
- }
+ }
+
+ if (stream_texture_proxy_ && video_frame_provider_client_)
+ stream_texture_proxy_->SetClient(video_frame_provider_client_);
+}
+
+void WebMediaPlayerAndroid::EstablishSurfaceTexturePeer() {
+ DCHECK(main_thread_checker_.CalledOnValidThread());
+ if (!stream_texture_proxy_)
+ return;
+
+ if (stream_texture_factory_.get() && stream_id_)
+ stream_texture_factory_->EstablishPeer(stream_id_, player_id_);
+
+ // Set the deferred size because the size was changed in remote mode.
+ if (!is_remote_ && cached_stream_texture_size_ != natural_size_) {
+ stream_texture_factory_->SetStreamTextureSize(
+ stream_id_, gfx::Size(natural_size_.width, natural_size_.height));
+ cached_stream_texture_size_ = natural_size_;
+ }
+
+ needs_establish_peer_ = false;
}
void WebMediaPlayerAndroid::DoCreateStreamTexture() {
@@ -1237,21 +1275,8 @@
kGLTextureExternalOES, &texture_id_, &texture_mailbox_);
}
-void WebMediaPlayerAndroid::EstablishSurfaceTexturePeerIfNeeded() {
- DCHECK(main_thread_checker_.CalledOnValidThread());
- if (!needs_establish_peer_ || in_fullscreen_ || needs_external_surface_ ||
- is_remote_ || !is_playing_ || !stream_texture_proxy_ ||
- (!hasVideo() && !IsHLSStream())) {
- return;
- }
-
- stream_texture_factory_->EstablishPeer(stream_id_, player_id_);
- if (cached_stream_texture_size_ != natural_size_) {
- stream_texture_factory_->SetStreamTextureSize(
- stream_id_, gfx::Size(natural_size_.width, natural_size_.height));
- cached_stream_texture_size_ = natural_size_;
- }
- needs_establish_peer_ = false;
+void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) {
+ needs_establish_peer_ = needs_establish_peer;
}
void WebMediaPlayerAndroid::setPoster(const blink::WebURL& poster) {
@@ -1260,7 +1285,6 @@
void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) {
is_playing_ = is_playing;
- EstablishSurfaceTexturePeerIfNeeded();
if (!delegate_)
return;
if (is_playing)
@@ -1730,10 +1754,8 @@
void WebMediaPlayerAndroid::enterFullscreen() {
if (player_manager_->CanEnterFullscreen(frame_)) {
player_manager_->EnterFullscreen(player_id_, frame_);
- }
- in_fullscreen_ = true;
- needs_establish_peer_ = true;
- EstablishSurfaceTexturePeerIfNeeded();
+ SetNeedsEstablishPeer(false);
+ }
}
bool WebMediaPlayerAndroid::canEnterFullscreen() const {
« 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