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

Side by Side Diff: content/browser/android/media_player_manager_android.cc

Issue 12443003: Implement out-of-band video compositing on Android: Step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/media_player_manager_android.h" 5 #include "content/browser/android/media_player_manager_android.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "content/browser/android/cookie_getter_impl.h" 8 #include "content/browser/android/cookie_getter_impl.h"
9 #include "content/common/media/media_player_messages.h" 9 #include "content/common/media/media_player_messages.h"
10 #include "content/public/browser/browser_context.h" 10 #include "content/public/browser/browser_context.h"
11 #include "content/public/browser/render_process_host.h" 11 #include "content/public/browser/render_process_host.h"
12 #include "content/public/browser/render_view_host.h" 12 #include "content/public/browser/render_view_host.h"
13 13
14 using media::MediaPlayerBridge; 14 using media::MediaPlayerBridge;
15 15
16 // Threshold on the number of media players per renderer before we start 16 // Threshold on the number of media players per renderer before we start
17 // attempting to release inactive media players. 17 // attempting to release inactive media players.
18 static const int kMediaPlayerThreshold = 1; 18 static const int kMediaPlayerThreshold = 1;
19 19
20 namespace content { 20 namespace content {
21 21
22 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid( 22 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid(
23 RenderViewHost* render_view_host) 23 RenderViewHost* render_view_host)
24 : RenderViewHostObserver(render_view_host), 24 : RenderViewHostObserver(render_view_host),
25 ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)), 25 ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)),
26 fullscreen_player_id_(-1) { 26 fullscreen_player_id_(-1),
27 external_video_surface_user_id_(-1) {
27 } 28 }
28 29
29 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} 30 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {}
30 31
31 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) { 32 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) {
32 bool handled = true; 33 bool handled = true;
33 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg) 34 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg)
34 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) 35 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen)
35 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen) 36 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen)
36 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerInitialize, OnInitialize) 37 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerInitialize, OnInitialize)
37 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerStart, OnStart) 38 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerStart, OnStart)
38 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerSeek, OnSeek) 39 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerSeek, OnSeek)
39 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerPause, OnPause) 40 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerPause, OnPause)
40 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerRelease, 41 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerRelease,
41 OnReleaseResources) 42 OnReleaseResources)
42 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) 43 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer)
43 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, 44 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers,
44 DestroyAllMediaPlayers) 45 DestroyAllMediaPlayers)
46 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_RequestExternalSurface,
47 OnRequestExternalSurface)
45 IPC_MESSAGE_UNHANDLED(handled = false) 48 IPC_MESSAGE_UNHANDLED(handled = false)
46 IPC_END_MESSAGE_MAP() 49 IPC_END_MESSAGE_MAP()
47 return handled; 50 return handled;
48 } 51 }
49 52
50 void MediaPlayerManagerAndroid::FullscreenPlayerPlay() { 53 void MediaPlayerManagerAndroid::FullscreenPlayerPlay() {
51 MediaPlayerBridge* player = GetFullscreenPlayer(); 54 MediaPlayerBridge* player = GetFullscreenPlayer();
52 if (player) { 55 if (player) {
53 player->Start(); 56 player->Start();
54 Send(new MediaPlayerMsg_DidMediaPlayerPlay( 57 Send(new MediaPlayerMsg_DidMediaPlayerPlay(
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) { 181 void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) {
179 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin(); 182 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
180 it != players_.end(); ++it) { 183 it != players_.end(); ++it) {
181 if ((*it)->player_id() == player_id) { 184 if ((*it)->player_id() == player_id) {
182 players_.erase(it); 185 players_.erase(it);
183 break; 186 break;
184 } 187 }
185 } 188 }
186 if (fullscreen_player_id_ == player_id) 189 if (fullscreen_player_id_ == player_id)
187 fullscreen_player_id_ = -1; 190 fullscreen_player_id_ = -1;
191 if (external_video_surface_user_id_ == player_id)
192 external_video_surface_user_id_ = -1;
188 } 193 }
189 194
190 void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() { 195 void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() {
191 players_.clear(); 196 players_.clear();
192 if (fullscreen_player_id_ != -1) { 197 if (fullscreen_player_id_ != -1) {
193 video_view_.DestroyContentVideoView(); 198 video_view_.DestroyContentVideoView();
194 fullscreen_player_id_ = -1; 199 fullscreen_player_id_ = -1;
195 } 200 }
201 if (external_video_surface_user_id_ != -1)
no sievers 2013/03/05 19:54:16 nit: remove 'if()'
wonsik 2013/03/06 02:48:20 Done.
202 external_video_surface_user_id_ = -1;
203 }
204
205 void MediaPlayerManagerAndroid::OnRequestExternalSurface(int player_id) {
206 external_video_surface_user_id_ = player_id;
196 } 207 }
197 208
198 MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) { 209 MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) {
199 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin(); 210 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
200 it != players_.end(); ++it) { 211 it != players_.end(); ++it) {
201 if ((*it)->player_id() == player_id) 212 if ((*it)->player_id() == player_id)
202 return *it; 213 return *it;
203 } 214 }
204 return NULL; 215 return NULL;
205 } 216 }
206 217
207 MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() { 218 MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() {
208 return GetPlayer(fullscreen_player_id_); 219 return GetPlayer(fullscreen_player_id_);
209 } 220 }
210 221
222 void MediaPlayerManagerAndroid::SetExternalVideoSurface(jobject surface) {
223 MediaPlayerBridge* player = GetPlayer(external_video_surface_user_id_);
224 if (player)
225 player->SetVideoSurface(surface);
226 }
227
211 void MediaPlayerManagerAndroid::OnPrepared(int player_id, 228 void MediaPlayerManagerAndroid::OnPrepared(int player_id,
212 base::TimeDelta duration) { 229 base::TimeDelta duration) {
213 Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, duration)); 230 Send(new MediaPlayerMsg_MediaPrepared(routing_id(), player_id, duration));
214 if (fullscreen_player_id_ != -1) 231 if (fullscreen_player_id_ != -1)
215 video_view_.UpdateMediaMetadata(); 232 video_view_.UpdateMediaMetadata();
216 } 233 }
217 234
218 void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) { 235 void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) {
219 Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id)); 236 Send(new MediaPlayerMsg_MediaPlaybackCompleted(routing_id(), player_id));
220 if (fullscreen_player_id_ != -1) 237 if (fullscreen_player_id_ != -1)
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 309 }
293 } 310 }
294 } 311 }
295 312
296 void MediaPlayerManagerAndroid::ReleaseMediaResources( 313 void MediaPlayerManagerAndroid::ReleaseMediaResources(
297 MediaPlayerBridge* player) { 314 MediaPlayerBridge* player) {
298 // Nothing needs to be done. 315 // Nothing needs to be done.
299 } 316 }
300 317
301 } // namespace content 318 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698