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/media_resource_getter_impl.h" | 8 #include "content/browser/android/media_resource_getter_impl.h" |
| 9 #include "content/browser/web_contents/web_contents_view_android.h" |
9 #include "content/common/media/media_player_messages.h" | 10 #include "content/common/media/media_player_messages.h" |
10 #include "content/public/browser/browser_context.h" | 11 #include "content/public/browser/browser_context.h" |
11 #include "content/public/browser/render_process_host.h" | 12 #include "content/public/browser/render_process_host.h" |
12 #include "content/public/browser/render_view_host.h" | 13 #include "content/public/browser/render_view_host.h" |
13 #include "content/public/browser/storage_partition.h" | 14 #include "content/public/browser/storage_partition.h" |
14 | 15 |
15 using media::MediaPlayerBridge; | 16 using media::MediaPlayerBridge; |
16 | 17 |
17 // Threshold on the number of media players per renderer before we start | 18 // Threshold on the number of media players per renderer before we start |
18 // attempting to release inactive media players. | 19 // attempting to release inactive media players. |
19 static const int kMediaPlayerThreshold = 1; | 20 static const int kMediaPlayerThreshold = 1; |
20 | 21 |
21 namespace content { | 22 namespace content { |
22 | 23 |
23 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid( | 24 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid( |
24 RenderViewHost* render_view_host) | 25 RenderViewHost* render_view_host) |
25 : RenderViewHostObserver(render_view_host), | 26 : RenderViewHostObserver(render_view_host), |
26 ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)), | 27 ALLOW_THIS_IN_INITIALIZER_LIST(video_view_(this)), |
27 fullscreen_player_id_(-1) { | 28 fullscreen_player_id_(-1), |
| 29 web_contents_(WebContents::FromRenderViewHost(render_view_host)) { |
28 } | 30 } |
29 | 31 |
30 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} | 32 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {} |
31 | 33 |
32 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) { | 34 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) { |
33 bool handled = true; | 35 bool handled = true; |
34 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg) | 36 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg) |
35 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) | 37 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) |
36 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen) | 38 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen) |
37 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerInitialize, OnInitialize) | 39 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerInitialize, OnInitialize) |
38 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerStart, OnStart) | 40 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerStart, OnStart) |
39 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerSeek, OnSeek) | 41 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerSeek, OnSeek) |
40 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerPause, OnPause) | 42 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerPause, OnPause) |
41 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerRelease, | 43 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaPlayerRelease, |
42 OnReleaseResources) | 44 OnReleaseResources) |
43 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) | 45 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) |
44 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, | 46 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, |
45 DestroyAllMediaPlayers) | 47 DestroyAllMediaPlayers) |
| 48 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_RequestExternalSurface, |
| 49 OnRequestExternalSurface) |
46 IPC_MESSAGE_UNHANDLED(handled = false) | 50 IPC_MESSAGE_UNHANDLED(handled = false) |
47 IPC_END_MESSAGE_MAP() | 51 IPC_END_MESSAGE_MAP() |
48 return handled; | 52 return handled; |
49 } | 53 } |
50 | 54 |
51 void MediaPlayerManagerAndroid::FullscreenPlayerPlay() { | 55 void MediaPlayerManagerAndroid::FullscreenPlayerPlay() { |
52 MediaPlayerBridge* player = GetFullscreenPlayer(); | 56 MediaPlayerBridge* player = GetFullscreenPlayer(); |
53 if (player) { | 57 if (player) { |
54 player->Start(); | 58 player->Start(); |
55 Send(new MediaPlayerMsg_DidMediaPlayerPlay( | 59 Send(new MediaPlayerMsg_DidMediaPlayerPlay( |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 } | 196 } |
193 | 197 |
194 void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() { | 198 void MediaPlayerManagerAndroid::DestroyAllMediaPlayers() { |
195 players_.clear(); | 199 players_.clear(); |
196 if (fullscreen_player_id_ != -1) { | 200 if (fullscreen_player_id_ != -1) { |
197 video_view_.DestroyContentVideoView(); | 201 video_view_.DestroyContentVideoView(); |
198 fullscreen_player_id_ = -1; | 202 fullscreen_player_id_ = -1; |
199 } | 203 } |
200 } | 204 } |
201 | 205 |
| 206 void MediaPlayerManagerAndroid::AttachExternalVideoSurface(int player_id, |
| 207 jobject surface) { |
| 208 MediaPlayerBridge* player = GetPlayer(player_id); |
| 209 if (player) |
| 210 player->SetVideoSurface(surface); |
| 211 } |
| 212 |
| 213 void MediaPlayerManagerAndroid::DetachExternalVideoSurface(int player_id) { |
| 214 MediaPlayerBridge* player = GetPlayer(player_id); |
| 215 if (player) |
| 216 player->SetVideoSurface(NULL); |
| 217 } |
| 218 |
| 219 void MediaPlayerManagerAndroid::OnRequestExternalSurface(int player_id) { |
| 220 if (web_contents_) { |
| 221 WebContentsViewAndroid* view = |
| 222 static_cast<WebContentsViewAndroid*>(web_contents_->GetView()); |
| 223 if (view) |
| 224 view->RequestExternalVideoSurface(player_id); |
| 225 } |
| 226 } |
| 227 |
202 MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) { | 228 MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) { |
203 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin(); | 229 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin(); |
204 it != players_.end(); ++it) { | 230 it != players_.end(); ++it) { |
205 if ((*it)->player_id() == player_id) | 231 if ((*it)->player_id() == player_id) |
206 return *it; | 232 return *it; |
207 } | 233 } |
208 return NULL; | 234 return NULL; |
209 } | 235 } |
210 | 236 |
211 MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() { | 237 MediaPlayerBridge* MediaPlayerManagerAndroid::GetFullscreenPlayer() { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 } | 322 } |
297 } | 323 } |
298 } | 324 } |
299 | 325 |
300 void MediaPlayerManagerAndroid::ReleaseMediaResources( | 326 void MediaPlayerManagerAndroid::ReleaseMediaResources( |
301 MediaPlayerBridge* player) { | 327 MediaPlayerBridge* player) { |
302 // Nothing needs to be done. | 328 // Nothing needs to be done. |
303 } | 329 } |
304 | 330 |
305 } // namespace content | 331 } // namespace content |
OLD | NEW |