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

Unified Diff: content/browser/android/media_player_manager_android.cc

Issue 11442056: Add external surface rendering mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Separated GLRenderer change out; refined messaging scheme. Created 7 years, 10 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
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()));
« no previous file with comments | « content/browser/android/media_player_manager_android.h ('k') | content/common/media/media_player_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698