Index: content/browser/media/android/browser_media_player_manager.cc |
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc |
index 752c2f19b550ce99d57ab1078df78aeeca515c68..61d9ab6a1fd46083f01340b6d4fe0f2bf01971bf 100644 |
--- a/content/browser/media/android/browser_media_player_manager.cc |
+++ b/content/browser/media/android/browser_media_player_manager.cc |
@@ -348,8 +348,15 @@ void BrowserMediaPlayerManager::AttachExternalVideoSurface(int player_id, |
void BrowserMediaPlayerManager::DetachExternalVideoSurface(int player_id) { |
MediaPlayerAndroid* player = GetPlayer(player_id); |
- if (player) |
+ if (player) { |
+ // If a player looses its external surface because |
+ // it enters fullscreen, the video should not be paused. |
+ if (player_id != fullscreen_player_id_) { |
+ player->Release(); |
+ Send(new MediaPlayerMsg_DidMediaPlayerPause(RoutingID(), player_id)); |
+ } |
player->SetVideoSurface(gfx::ScopedJavaSurface()); |
+ } |
} |
void BrowserMediaPlayerManager::OnFrameInfoUpdated() { |
@@ -394,8 +401,13 @@ void BrowserMediaPlayerManager::OnRequestExternalSurface( |
void BrowserMediaPlayerManager::OnEnterFullscreen(int player_id) { |
DCHECK_EQ(fullscreen_player_id_, -1); |
#if defined(VIDEO_HOLE) |
+ fullscreen_player_id_ = player_id; |
qinmin
2014/11/21 00:23:50
As I mentioned earlier, using fullscreen_player_id
|
+ // Avoid Z-fight: when any player goes |
+ // fullscreen release any external surface. |
if (external_video_surface_container_) |
- external_video_surface_container_->ReleaseExternalVideoSurface(player_id); |
+ external_video_surface_container_->ReleaseExternalVideoSurface( |
+ ExternalVideoSurfaceContainer::kAnyPlayer); |
+ fullscreen_player_id_ = -1; |
#endif // defined(VIDEO_HOLE) |
if (video_view_.get()) { |
fullscreen_player_id_ = player_id; |