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

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

Issue 10919075: Move android mediaplayer from render process to browser process. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressing comments Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/browser/android/media_player_manager_android.h"
6
7 #include "base/bind.h"
8 #include "content/browser/android/cookies_retriever_impl.h"
9 #include "content/common/view_messages.h"
10 #include "content/public/browser/browser_context.h"
11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/render_view_host.h"
14
15 using media::MediaPlayerBridge;
16
17 // Threshold on the number of media players per renderer before we start
18 // attempting to release inactive media players.
19 static const int kMediaPlayerThreshold = 1;
20
21 namespace content {
22
23 MediaPlayerManagerAndroid::MediaPlayerManagerAndroid(
24 RenderViewHost* render_view_host)
25 : RenderViewHostObserver(render_view_host) {
26 }
27
28 MediaPlayerManagerAndroid::~MediaPlayerManagerAndroid() {
29 }
30
31 bool MediaPlayerManagerAndroid::OnMessageReceived(const IPC::Message& msg) {
32 bool handled = true;
33 IPC_BEGIN_MESSAGE_MAP(MediaPlayerManagerAndroid, msg)
34 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerInitialize,
35 OnInitialize)
36 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerStart,
37 OnStart)
38 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerSeek,
39 OnSeek)
40 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerPause,
41 OnPause)
42 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaPlayerRelease,
43 OnReleaseResources)
44 IPC_MESSAGE_HANDLER(ViewHostMsg_DestroyMediaPlayer,
45 OnDestroyPlayer)
46 IPC_MESSAGE_HANDLER(ViewHostMsg_CleanUpAllPlayers,
47 CleanUpAllPlayers)
48 IPC_MESSAGE_UNHANDLED(handled = false)
49 IPC_END_MESSAGE_MAP()
50 return handled;
51 }
52
53 void MediaPlayerManagerAndroid::OnInitialize(int player_id,
54 const std::string& url) {
55 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
56 it != players_.end(); ++it) {
57 if ((*it)->player_id() == player_id) {
58 players_.erase(it);
59 break;
60 }
61 }
62
63 content::BrowserContext* context =
64 render_view_host()->GetProcess()->GetBrowserContext();
65 players_.push_back(new MediaPlayerBridge(player_id, url,
66 new content::CookiesRetrieverImpl(context->GetRequestContext()),
67 context->IsOffTheRecord(), this,
68 base::Bind(&MediaPlayerManagerAndroid::OnError, base::Unretained(this)),
69 base::Bind(&MediaPlayerManagerAndroid::OnVideoSizeChanged,
70 base::Unretained(this)),
71 base::Bind(&MediaPlayerManagerAndroid::OnBufferingUpdate,
72 base::Unretained(this)),
73 base::Bind(&MediaPlayerManagerAndroid::OnPrepared,
74 base::Unretained(this)),
75 base::Bind(&MediaPlayerManagerAndroid::OnPlaybackComplete,
76 base::Unretained(this)),
77 base::Bind(&MediaPlayerManagerAndroid::OnSeekComplete,
78 base::Unretained(this)),
79 base::Bind(&MediaPlayerManagerAndroid::OnTimeUpdate,
80 base::Unretained(this))));
81
82 // Send a MediaPrepared message to webkit so that Load() can finish.
83 Send(new ViewMsg_MediaPrepared(routing_id(), player_id,
84 GetPlayer(player_id)->GetDuration()));
85 }
86
87 void MediaPlayerManagerAndroid::OnStart(int player_id) {
88 MediaPlayerBridge* player = GetPlayer(player_id);
89 if (player)
90 player->Start();
91 }
92
93 void MediaPlayerManagerAndroid::OnSeek(int player_id, base::TimeDelta time) {
94 MediaPlayerBridge* player = GetPlayer(player_id);
95 if (player)
96 player->SeekTo(time);
97 }
98
99 void MediaPlayerManagerAndroid::OnPause(int player_id) {
100 MediaPlayerBridge* player = GetPlayer(player_id);
101 if (player)
102 player->Pause();
103 }
104
105 void MediaPlayerManagerAndroid::OnReleaseResources(int player_id) {
106 MediaPlayerBridge* player = GetPlayer(player_id);
107 if (player)
108 player->Release();
109 }
110
111 void MediaPlayerManagerAndroid::OnDestroyPlayer(int player_id) {
112 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
113 it != players_.end(); ++it) {
114 if ((*it)->player_id() == player_id) {
115 players_.erase(it);
116 break;
117 }
118 }
119 }
120
121 void MediaPlayerManagerAndroid::CleanUpAllPlayers() {
122 players_.clear();
123 }
124
125 MediaPlayerBridge* MediaPlayerManagerAndroid::GetPlayer(int player_id) {
126 for (ScopedVector<MediaPlayerBridge>::iterator it = players_.begin();
127 it != players_.end(); ++it) {
128 if ((*it)->player_id() == player_id)
129 return *it;
130 }
131 return NULL;
132 }
133
134 void MediaPlayerManagerAndroid::OnPrepared(int player_id,
135 base::TimeDelta duration) {
136 Send(new ViewMsg_MediaPrepared(routing_id(), player_id, duration));
137 }
138
139 void MediaPlayerManagerAndroid::OnPlaybackComplete(int player_id) {
140 Send(new ViewMsg_MediaPlaybackCompleted(routing_id(), player_id));
141 }
142
143 void MediaPlayerManagerAndroid::OnBufferingUpdate(
144 int player_id, int percentage) {
145 Send(new ViewMsg_MediaBufferingUpdate(routing_id(), player_id, percentage));
146 }
147
148 void MediaPlayerManagerAndroid::OnSeekComplete(int player_id,
149 base::TimeDelta current_time) {
150 Send(new ViewMsg_MediaSeekCompleted(routing_id(), player_id, current_time));
151 }
152
153 void MediaPlayerManagerAndroid::OnError(int player_id, int error) {
154 Send(new ViewMsg_MediaError(routing_id(), player_id, error));
155 }
156
157 void MediaPlayerManagerAndroid::OnVideoSizeChanged(int player_id,
scherkus (not reviewing) 2012/09/07 13:17:35 indent is wrong: drop player_id to next line
qinmin 2012/09/07 22:48:27 Done.
158 int width, int height) {
159 Send(new ViewMsg_MediaVideoSizeChanged(routing_id(), player_id,
160 width, height));
161 }
162
163 void MediaPlayerManagerAndroid::OnTimeUpdate(int player_id,
164 base::TimeDelta current_time) {
165 Send(new ViewMsg_MediaTimeUpdate(routing_id(), player_id, current_time));
166 }
167
168 void MediaPlayerManagerAndroid::RequestMediaResources(
169 MediaPlayerBridge* player) {
170 if (player == NULL)
171 return;
172
173 int num_active_player = 0;
174 ScopedVector<MediaPlayerBridge>::iterator it;
175 for (it = players_.begin(); it != players_.end(); ++it) {
176 if (!(*it)->prepared())
177 continue;
178
179 // The player is already active, ignore it.
180 if ((*it) == player)
181 return;
182 else
183 num_active_player++;
184 }
185
186 // Number of active players are less than the threshold, do nothing.
187 if (num_active_player < kMediaPlayerThreshold)
188 return;
189
190 for (it = players_.begin(); it != players_.end(); ++it) {
191 if ((*it)->prepared() && !(*it)->IsPlaying())
192 (*it)->Release();
193 }
194 }
195
196 void MediaPlayerManagerAndroid::ReleaseMediaResources(
197 MediaPlayerBridge* player) {
198 // Nothing needs to be done.
199 }
200
201 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698