OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |