| 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..0dc0dea1ffbe07dcfd62508623fe194beaefb2f5 100644
|
| --- a/content/browser/android/media_player_manager_android.cc
|
| +++ b/content/browser/android/media_player_manager_android.cc
|
| @@ -5,11 +5,13 @@
|
| #include "content/browser/android/media_player_manager_android.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/command_line.h"
|
| #include "content/browser/android/cookie_getter_impl.h"
|
| #include "content/common/media/media_player_messages.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| +#include "content/public/common/content_switches.h"
|
|
|
| using media::MediaPlayerBridge;
|
|
|
| @@ -23,7 +25,7 @@ MediaPlayerManagerAndroid::MediaPlayerManagerAndroid(
|
| RenderViewHost* render_view_host)
|
| : RenderViewHostObserver(render_view_host),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)),
|
| - fullscreen_player_id_(-1) {
|
| + video_view_player_id_(-1) {
|
| }
|
|
|
| MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {}
|
| @@ -52,7 +54,7 @@ void MediaPlayerManagerAndroid::FullscreenPlayerPlay() {
|
| if (player) {
|
| player->Start();
|
| Send(new MediaPlayerMsg_DidMediaPlayerPlay(
|
| - routing_id(), fullscreen_player_id_));
|
| + routing_id(), video_view_player_id_));
|
| }
|
| }
|
|
|
| @@ -61,7 +63,7 @@ void MediaPlayerManagerAndroid::FullscreenPlayerPause() {
|
| if (player) {
|
| player->Pause();
|
| Send(new MediaPlayerMsg_DidMediaPlayerPause(
|
| - routing_id(), fullscreen_player_id_));
|
| + routing_id(), video_view_player_id_));
|
| }
|
| }
|
|
|
| @@ -72,10 +74,11 @@ void MediaPlayerManagerAndroid::FullscreenPlayerSeek(int msec) {
|
| }
|
|
|
| void MediaPlayerManagerAndroid::ExitFullscreen(bool release_media_player) {
|
| - Send(new MediaPlayerMsg_DidExitFullscreen(
|
| - routing_id(), fullscreen_player_id_));
|
| + Send(new MediaPlayerMsg_DidExitVideoView(
|
| + routing_id(), video_view_player_id_,
|
| + ContentVideoView::PERSONALITY_FULL_SCREEN));
|
| MediaPlayerBridge* player = GetFullscreenPlayer();
|
| - fullscreen_player_id_ = -1;
|
| + video_view_player_id_ = -1;
|
| if (!player)
|
| return;
|
| if (release_media_player)
|
| @@ -85,11 +88,11 @@ void MediaPlayerManagerAndroid::ExitFullscreen(bool release_media_player) {
|
| }
|
|
|
| void MediaPlayerManagerAndroid::SetVideoSurface(jobject surface) {
|
| - MediaPlayerBridge* player = GetFullscreenPlayer();
|
| + MediaPlayerBridge* player = GetPlayer(video_view_player_id_);
|
| if (player) {
|
| player->SetVideoSurface(surface);
|
| - Send(new MediaPlayerMsg_DidEnterFullscreen(
|
| - routing_id(), player->player_id()));
|
| + Send(new MediaPlayerMsg_DidEnterVideoView(
|
| + routing_id(), player->player_id(), video_view_.getPersonality()));
|
| }
|
| }
|
|
|
| @@ -133,8 +136,19 @@ void MediaPlayerManagerAndroid::OnInitialize(
|
|
|
| void MediaPlayerManagerAndroid::OnStart(int player_id) {
|
| MediaPlayerBridge* player = GetPlayer(player_id);
|
| - if (player)
|
| + if (player) {
|
| + if (CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kRenderVideoOnExternalSurface)) {
|
| + // TODO(wonsik): Find a way to enable this feature only when it is
|
| + // absolutely necessary (e.g. protected content).
|
| + if (video_view_player_id_ != -1)
|
| + ExitFromVideoView(video_view_player_id_, true /* pause */);
|
| + video_view_player_id_ = player_id;
|
| + video_view_.CreateContentVideoView(
|
| + ContentVideoView::PERSONALITY_EMBEDDED);
|
| + }
|
| player->Start();
|
| + }
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnSeek(int player_id, base::TimeDelta time) {
|
| @@ -150,20 +164,36 @@ void MediaPlayerManagerAndroid::OnPause(int player_id) {
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnEnterFullscreen(int player_id) {
|
| - DCHECK_EQ(fullscreen_player_id_, -1);
|
| + if (video_view_player_id_ != -1)
|
| + ExitFromVideoView(
|
| + video_view_player_id_,
|
| + (video_view_player_id_ != player_id) /* pause */);
|
|
|
| - fullscreen_player_id_ = player_id;
|
| - video_view_.CreateContentVideoView();
|
| + video_view_player_id_ = player_id;
|
| + video_view_.CreateContentVideoView(ContentVideoView::PERSONALITY_FULL_SCREEN);
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnExitFullscreen(int player_id) {
|
| - if (fullscreen_player_id_ == player_id) {
|
| - MediaPlayerBridge* player = GetPlayer(player_id);
|
| - if (player)
|
| - player->SetVideoSurface(NULL);
|
| - video_view_.DestroyContentVideoView();
|
| - fullscreen_player_id_ = -1;
|
| + ExitFromVideoView(player_id, false /* pause */);
|
| +}
|
| +
|
| +void MediaPlayerManagerAndroid::ExitFromVideoView(int player_id, bool pause) {
|
| + if (video_view_player_id_ != player_id)
|
| + return;
|
| +
|
| + if (video_view_.getPersonality() == ContentVideoView::PERSONALITY_EMBEDDED) {
|
| + Send(new MediaPlayerMsg_DidExitVideoView(
|
| + routing_id(), video_view_player_id_,
|
| + ContentVideoView::PERSONALITY_EMBEDDED));
|
| }
|
| + MediaPlayerBridge* player = GetPlayer(player_id);
|
| + if (player) {
|
| + player->SetVideoSurface(NULL);
|
| + if (pause)
|
| + player->Pause();
|
| + }
|
| + video_view_.DestroyContentVideoView();
|
| + video_view_player_id_ = -1;
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) {
|
| @@ -171,7 +201,7 @@ 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 && player_id != fullscreen_player_id_)
|
| + if (player && player_id != video_view_player_id_)
|
| player->Release();
|
| }
|
|
|
| @@ -183,15 +213,15 @@ void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) {
|
| break;
|
| }
|
| }
|
| - if (fullscreen_player_id_ == player_id)
|
| - fullscreen_player_id_ = -1;
|
| + if (video_view_player_id_ == player_id)
|
| + video_view_player_id_ = -1;
|
| }
|
|
|
| void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() {
|
| players_.clear();
|
| - if (fullscreen_player_id_ != -1) {
|
| + if (video_view_player_id_ != -1) {
|
| video_view_.DestroyContentVideoView();
|
| - fullscreen_player_id_ = -1;
|
| + video_view_player_id_ = -1;
|
| }
|
| }
|
|
|
| @@ -205,19 +235,23 @@ MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) {
|
| }
|
|
|
| MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() {
|
| - return GetPlayer(fullscreen_player_id_);
|
| + if (video_view_.getPersonality() !=
|
| + ContentVideoView::PERSONALITY_FULL_SCREEN) {
|
| + return NULL;
|
| + }
|
| + return GetPlayer(video_view_player_id_);
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnPrepared(int player_id,
|
| base::TimeDelta duration) {
|
| Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, duration));
|
| - if (fullscreen_player_id_ != -1)
|
| + if (video_view_player_id_ != -1)
|
| video_view_.UpdateMediaMetadata();
|
| }
|
|
|
| void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) {
|
| Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id));
|
| - if (fullscreen_player_id_ != -1)
|
| + if (video_view_player_id_ != -1)
|
| video_view_.OnPlaybackComplete();
|
| }
|
|
|
| @@ -231,7 +265,7 @@ void MediaPlayerManagerAndroid::OnBufferingUpdate(
|
| int player_id, int percentage) {
|
| Send(new MediaPlayerMsg_MediaBufferingUpdate(
|
| routing_id(), player_id, percentage));
|
| - if (fullscreen_player_id_ != -1)
|
| + if (video_view_player_id_ != -1)
|
| video_view_.OnBufferingUpdate(percentage);
|
| }
|
|
|
| @@ -243,7 +277,7 @@ void MediaPlayerManagerAndroid::OnSeekComplete(int player_id,
|
|
|
| void MediaPlayerManagerAndroid::OnError(int player_id, int error) {
|
| Send(new MediaPlayerMsg_MediaError(routing_id(), player_id, error));
|
| - if (fullscreen_player_id_ != -1)
|
| + if (video_view_player_id_ != -1)
|
| video_view_.OnMediaPlayerError(error);
|
| }
|
|
|
| @@ -251,7 +285,7 @@ void MediaPlayerManagerAndroid::OnVideoSizeChanged(
|
| int player_id, int width, int height) {
|
| Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id,
|
| width, height));
|
| - if (fullscreen_player_id_ != -1)
|
| + if (video_view_player_id_ != -1)
|
| video_view_.OnVideoSizeChanged(width, height);
|
| }
|
|
|
| @@ -285,7 +319,7 @@ void MediaPlayerManagerAndroid::RequestMediaResources(
|
|
|
| for (it = players_.begin(); it != players_.end(); ++it) {
|
| if ((*it)->prepared() && !(*it)->IsPlaying() &&
|
| - fullscreen_player_id_ != (*it)->player_id()) {
|
| + video_view_player_id_ != (*it)->player_id()) {
|
| (*it)->Release();
|
| Send(new MediaPlayerMsg_MediaPlayerReleased(
|
| routing_id(), (*it)->player_id()));
|
|
|