| Index: content/browser/android/media_player_manager_android.cc
|
| diff --git a/content/browser/android/media_player_manager_android.cc b/content/browser/android/media_player_manager_android.cc
|
| index 6277ecdc586b36a7650b08963be00bae7dd99201..665a9db74d3d73bbaf59d9569dfff8a9295619ec 100644
|
| --- a/content/browser/android/media_player_manager_android.cc
|
| +++ b/content/browser/android/media_player_manager_android.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "content/browser/android/cookie_getter_impl.h"
|
| +#include "content/browser/android/external_video_surface_view_holder.h"
|
| #include "content/common/media/media_player_messages.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/render_process_host.h"
|
| @@ -23,7 +24,9 @@ MediaPlayerManagerAndroid::MediaPlayerManagerAndroid(
|
| RenderViewHost* render_view_host)
|
| : RenderViewHostObserver(render_view_host),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)),
|
| - fullscreen_player_id_(-1) {
|
| + fullscreen_player_id_(-1),
|
| + external_video_surface_user_id_(-1),
|
| + external_video_surface_view_holder_(NULL) {
|
| }
|
|
|
| MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {}
|
| @@ -42,6 +45,8 @@ bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) {
|
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer)
|
| IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers,
|
| DestroyAllMediaPlayers)
|
| + IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_RequestExternalSurface,
|
| + OnRequestExternalSurface)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| @@ -171,11 +176,23 @@ void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) {
|
| // Don't release the fullscreen player when tab visibility changes,
|
| // it will be released when user hit the back/home button or when
|
| // OnDestroyPlayer is called.
|
| + if (player && external_video_surface_user_id_ == player_id) {
|
| + if (external_video_surface_view_holder_)
|
| + external_video_surface_view_holder_->unregisterPlayer(player);
|
| + external_video_surface_user_id_ = -1;
|
| + }
|
| if (player && player_id != fullscreen_player_id_)
|
| player->Release();
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) {
|
| + if (external_video_surface_user_id_ == player_id) {
|
| + external_video_surface_user_id_ = -1;
|
| +
|
| + MediaPlayerBridge* player = GetPlayer(player_id);
|
| + if (external_video_surface_view_holder_ && player)
|
| + external_video_surface_view_holder_->unregisterPlayer(player);
|
| + }
|
| for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
|
| it != players_.end(); ++it) {
|
| if ((*it)->player_id() == player_id) {
|
| @@ -188,11 +205,30 @@ void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) {
|
| }
|
|
|
| void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() {
|
| + MediaPlayerBridge* external_surface_user =
|
| + GetPlayer(external_video_surface_user_id_);
|
| + if (external_video_surface_view_holder_ && external_surface_user) {
|
| + external_video_surface_view_holder_->unregisterPlayer(
|
| + external_surface_user);
|
| + }
|
| players_.clear();
|
| if (fullscreen_player_id_ != -1) {
|
| video_view_.DestroyContentVideoView();
|
| fullscreen_player_id_ = -1;
|
| }
|
| + external_video_surface_user_id_ = -1;
|
| +}
|
| +
|
| +void MediaPlayerManagerAndroid::OnRequestExternalSurface(int player_id) {
|
| + if (external_video_surface_user_id_ != -1) {
|
| + MediaPlayerBridge* player = GetPlayer(external_video_surface_user_id_);
|
| + if (external_video_surface_view_holder_)
|
| + external_video_surface_view_holder_->unregisterPlayer(player);
|
| + }
|
| + external_video_surface_user_id_ = player_id;
|
| + MediaPlayerBridge* player = GetPlayer(player_id);
|
| + if (external_video_surface_view_holder_)
|
| + external_video_surface_view_holder_->registerPlayer(player);
|
| }
|
|
|
| MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) {
|
| @@ -208,6 +244,15 @@ MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() {
|
| return GetPlayer(fullscreen_player_id_);
|
| }
|
|
|
| +void MediaPlayerManagerAndroid::SetExternalVideoSurfaceViewHolder(
|
| + ExternalVideoSurfaceViewHolder* holder) {
|
| + external_video_surface_view_holder_ = holder;
|
| +
|
| + MediaPlayerBridge* player = GetPlayer(external_video_surface_user_id_);
|
| + if (external_video_surface_view_holder_ && player)
|
| + external_video_surface_view_holder_->registerPlayer(player);
|
| +}
|
| +
|
| void MediaPlayerManagerAndroid::OnPrepared(int player_id,
|
| base::TimeDelta duration) {
|
| Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, duration));
|
|
|