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

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

Issue 23494040: Split media::DemuxerAndroid implementation of BrowserMediaPlayerManager to BrowserDemuxerAndroid. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 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
« no previous file with comments | « content/browser/android/browser_media_player_manager.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/browser_media_player_manager.h" 5 #include "content/browser/android/browser_media_player_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "content/browser/android/browser_demuxer_android.h"
8 #include "content/browser/android/content_view_core_impl.h" 9 #include "content/browser/android/content_view_core_impl.h"
9 #include "content/browser/android/media_resource_getter_impl.h" 10 #include "content/browser/android/media_resource_getter_impl.h"
10 #include "content/browser/web_contents/web_contents_view_android.h" 11 #include "content/browser/web_contents/web_contents_view_android.h"
11 #include "content/common/media/media_player_messages_android.h" 12 #include "content/common/media/media_player_messages_android.h"
12 #include "content/public/browser/browser_context.h" 13 #include "content/public/browser/browser_context.h"
13 #include "content/public/browser/render_process_host.h" 14 #include "content/public/browser/render_process_host.h"
14 #include "content/public/browser/render_view_host.h" 15 #include "content/public/browser/render_view_host.h"
15 #include "content/public/browser/storage_partition.h" 16 #include "content/public/browser/storage_partition.h"
16 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
17 #include "media/base/android/media_drm_bridge.h" 18 #include "media/base/android/media_drm_bridge.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 } 73 }
73 74
74 NOTREACHED(); 75 NOTREACHED();
75 return NULL; 76 return NULL;
76 } 77 }
77 #endif 78 #endif
78 79
79 BrowserMediaPlayerManager::BrowserMediaPlayerManager( 80 BrowserMediaPlayerManager::BrowserMediaPlayerManager(
80 RenderViewHost* render_view_host) 81 RenderViewHost* render_view_host)
81 : RenderViewHostObserver(render_view_host), 82 : RenderViewHostObserver(render_view_host),
83 browser_demuxer_(new BrowserDemuxerAndroid(render_view_host)),
82 fullscreen_player_id_(-1), 84 fullscreen_player_id_(-1),
83 web_contents_(WebContents::FromRenderViewHost(render_view_host)) { 85 web_contents_(WebContents::FromRenderViewHost(render_view_host)) {
84 } 86 }
85 87
86 BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {} 88 BrowserMediaPlayerManager::~BrowserMediaPlayerManager() {}
87 89
88 bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) { 90 bool BrowserMediaPlayerManager::OnMessageReceived(const IPC::Message& msg) {
89 bool handled = true; 91 bool handled = true;
90 IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, msg) 92 IPC_BEGIN_MESSAGE_MAP(BrowserMediaPlayerManager, msg)
91 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen) 93 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_EnterFullscreen, OnEnterFullscreen)
92 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen) 94 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ExitFullscreen, OnExitFullscreen)
93 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Initialize, OnInitialize) 95 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Initialize, OnInitialize)
94 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Start, OnStart) 96 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Start, OnStart)
95 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Seek, OnSeek) 97 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Seek, OnSeek)
96 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Pause, OnPause) 98 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Pause, OnPause)
97 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetVolume, OnSetVolume) 99 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetVolume, OnSetVolume)
98 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Release, OnReleaseResources) 100 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Release, OnReleaseResources)
99 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) 101 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer)
100 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, 102 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers,
101 DestroyAllMediaPlayers) 103 DestroyAllMediaPlayers)
102 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DemuxerReady, OnDemuxerReady)
103 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_ReadFromDemuxerAck,
104 OnReadFromDemuxerAck)
105 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DurationChanged,
106 OnDurationChanged)
107 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_MediaSeekRequestAck,
108 OnMediaSeekRequestAck)
109 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_InitializeCDM, 104 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_InitializeCDM,
110 OnInitializeCDM) 105 OnInitializeCDM)
111 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_GenerateKeyRequest, 106 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_GenerateKeyRequest,
112 OnGenerateKeyRequest) 107 OnGenerateKeyRequest)
113 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_AddKey, OnAddKey) 108 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_AddKey, OnAddKey)
114 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_CancelKeyRequest, 109 IPC_MESSAGE_HANDLER(MediaKeysHostMsg_CancelKeyRequest,
115 OnCancelKeyRequest) 110 OnCancelKeyRequest)
116 #if defined(GOOGLE_TV) 111 #if defined(GOOGLE_TV)
117 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface, 112 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface,
118 OnNotifyExternalSurface) 113 OnNotifyExternalSurface)
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 213 }
219 214
220 void BrowserMediaPlayerManager::OnVideoSizeChanged( 215 void BrowserMediaPlayerManager::OnVideoSizeChanged(
221 int player_id, int width, int height) { 216 int player_id, int width, int height) {
222 Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id, 217 Send(new MediaPlayerMsg_MediaVideoSizeChanged(routing_id(), player_id,
223 width, height)); 218 width, height));
224 if (fullscreen_player_id_ != -1) 219 if (fullscreen_player_id_ != -1)
225 video_view_->OnVideoSizeChanged(width, height); 220 video_view_->OnVideoSizeChanged(width, height);
226 } 221 }
227 222
228 void BrowserMediaPlayerManager::AddDemuxerClient(
229 int demuxer_client_id,
230 media::DemuxerAndroidClient* client) {
231 demuxer_clients_.AddWithID(client, demuxer_client_id);
232 }
233
234 void BrowserMediaPlayerManager::RemoveDemuxerClient(int demuxer_client_id) {
235 demuxer_clients_.Remove(demuxer_client_id);
236 }
237
238 void BrowserMediaPlayerManager::RequestDemuxerData(
239 int demuxer_client_id, media::DemuxerStream::Type type) {
240 DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id;
241 Send(new MediaPlayerMsg_ReadFromDemuxer(
242 routing_id(), demuxer_client_id, type));
243 }
244
245 void BrowserMediaPlayerManager::RequestMediaResources(int player_id) { 223 void BrowserMediaPlayerManager::RequestMediaResources(int player_id) {
246 int num_active_player = 0; 224 int num_active_player = 0;
247 ScopedVector<MediaPlayerAndroid>::iterator it; 225 ScopedVector<MediaPlayerAndroid>::iterator it;
248 for (it = players_.begin(); it != players_.end(); ++it) { 226 for (it = players_.begin(); it != players_.end(); ++it) {
249 if (!(*it)->IsPlayerReady()) 227 if (!(*it)->IsPlayerReady())
250 continue; 228 continue;
251 229
252 // The player is already active, ignore it. 230 // The player is already active, ignore it.
253 if ((*it)->player_id() == player_id) 231 if ((*it)->player_id() == player_id)
254 return; 232 return;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 } 289 }
312 290
313 void BrowserMediaPlayerManager::DestroyAllMediaPlayers() { 291 void BrowserMediaPlayerManager::DestroyAllMediaPlayers() {
314 players_.clear(); 292 players_.clear();
315 if (fullscreen_player_id_ != -1) { 293 if (fullscreen_player_id_ != -1) {
316 video_view_.reset(); 294 video_view_.reset();
317 fullscreen_player_id_ = -1; 295 fullscreen_player_id_ = -1;
318 } 296 }
319 } 297 }
320 298
321 void BrowserMediaPlayerManager::RequestDemuxerSeek(int demuxer_client_id,
322 base::TimeDelta time_to_seek,
323 unsigned seek_request_id) {
324 DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id;
325 Send(new MediaPlayerMsg_MediaSeekRequest(
326 routing_id(), demuxer_client_id, time_to_seek, seek_request_id));
327 }
328
329 void BrowserMediaPlayerManager::RequestDemuxerConfigs(int demuxer_client_id) {
330 DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id;
331 Send(new MediaPlayerMsg_MediaConfigRequest(routing_id(), demuxer_client_id));
332 }
333
334 void BrowserMediaPlayerManager::OnProtectedSurfaceRequested(int player_id) { 299 void BrowserMediaPlayerManager::OnProtectedSurfaceRequested(int player_id) {
335 if (fullscreen_player_id_ == player_id) 300 if (fullscreen_player_id_ == player_id)
336 return; 301 return;
337 if (fullscreen_player_id_ != -1) { 302 if (fullscreen_player_id_ != -1) {
338 // TODO(qinmin): Determine the correct error code we should report to WMPA. 303 // TODO(qinmin): Determine the correct error code we should report to WMPA.
339 OnError(player_id, MediaPlayerAndroid::MEDIA_ERROR_DECODE); 304 OnError(player_id, MediaPlayerAndroid::MEDIA_ERROR_DECODE);
340 return; 305 return;
341 } 306 }
342 OnEnterFullscreen(player_id); 307 OnEnterFullscreen(player_id);
343 } 308 }
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 void BrowserMediaPlayerManager::OnInitialize( 389 void BrowserMediaPlayerManager::OnInitialize(
425 int player_id, 390 int player_id,
426 const GURL& url, 391 const GURL& url,
427 MediaPlayerHostMsg_Initialize_Type type, 392 MediaPlayerHostMsg_Initialize_Type type,
428 const GURL& first_party_for_cookies) { 393 const GURL& first_party_for_cookies) {
429 RemovePlayer(player_id); 394 RemovePlayer(player_id);
430 395
431 RenderProcessHost* host = render_view_host()->GetProcess(); 396 RenderProcessHost* host = render_view_host()->GetProcess();
432 AddPlayer(CreateMediaPlayer( 397 AddPlayer(CreateMediaPlayer(
433 player_id, url, type, first_party_for_cookies, 398 player_id, url, type, first_party_for_cookies,
434 host->GetBrowserContext()->IsOffTheRecord(), this, this)); 399 host->GetBrowserContext()->IsOffTheRecord(), this, browser_demuxer_));
435 } 400 }
436 401
437 void BrowserMediaPlayerManager::OnStart(int player_id) { 402 void BrowserMediaPlayerManager::OnStart(int player_id) {
438 MediaPlayerAndroid* player = GetPlayer(player_id); 403 MediaPlayerAndroid* player = GetPlayer(player_id);
439 if (player) 404 if (player)
440 player->Start(); 405 player->Start();
441 } 406 }
442 407
443 void BrowserMediaPlayerManager::OnSeek(int player_id, base::TimeDelta time) { 408 void BrowserMediaPlayerManager::OnSeek(int player_id, base::TimeDelta time) {
444 MediaPlayerAndroid* player = GetPlayer(player_id); 409 MediaPlayerAndroid* player = GetPlayer(player_id);
(...skipping 28 matching lines...) Expand all
473 view->NotifyExternalSurface(player_id, false, gfx::RectF()); 438 view->NotifyExternalSurface(player_id, false, gfx::RectF());
474 #endif 439 #endif
475 } 440 }
476 441
477 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { 442 void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) {
478 RemovePlayer(player_id); 443 RemovePlayer(player_id);
479 if (fullscreen_player_id_ == player_id) 444 if (fullscreen_player_id_ == player_id)
480 fullscreen_player_id_ = -1; 445 fullscreen_player_id_ = -1;
481 } 446 }
482 447
483 void BrowserMediaPlayerManager::OnDemuxerReady(
484 int player_id,
485 const media::DemuxerConfigs& configs) {
486 // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting
487 // demuxer IPC messages into their own group.
488 media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id);
489 if (client)
490 client->OnDemuxerConfigsAvailable(configs);
491 }
492
493 void BrowserMediaPlayerManager::OnReadFromDemuxerAck(
494 int player_id,
495 const media::DemuxerData& data) {
496 // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting
497 // demuxer IPC messages into their own group.
498 media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id);
499 if (client)
500 client->OnDemuxerDataAvailable(data);
501 }
502
503 void BrowserMediaPlayerManager::OnMediaSeekRequestAck(
504 int player_id, unsigned seek_request_id) {
505 // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting
506 // demuxer IPC messages into their own group.
507 media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id);
508 if (client)
509 client->OnDemuxerSeeked(seek_request_id);
510 }
511
512 void BrowserMediaPlayerManager::OnInitializeCDM( 448 void BrowserMediaPlayerManager::OnInitializeCDM(
513 int media_keys_id, 449 int media_keys_id,
514 const std::vector<uint8>& uuid) { 450 const std::vector<uint8>& uuid) {
515 AddDrmBridge(media_keys_id, uuid); 451 AddDrmBridge(media_keys_id, uuid);
516 // In EME v0.1b MediaKeys lives in the media element. So the |media_keys_id| 452 // In EME v0.1b MediaKeys lives in the media element. So the |media_keys_id|
517 // is the same as the |player_id|. 453 // is the same as the |player_id|.
518 OnSetMediaKeys(media_keys_id, media_keys_id); 454 OnSetMediaKeys(media_keys_id, media_keys_id);
519 } 455 }
520 456
521 void BrowserMediaPlayerManager::OnGenerateKeyRequest( 457 void BrowserMediaPlayerManager::OnGenerateKeyRequest(
(...skipping 24 matching lines...) Expand all
546 } 482 }
547 483
548 void BrowserMediaPlayerManager::OnCancelKeyRequest( 484 void BrowserMediaPlayerManager::OnCancelKeyRequest(
549 int media_keys_id, 485 int media_keys_id,
550 const std::string& session_id) { 486 const std::string& session_id) {
551 MediaDrmBridge* drm_bridge = GetDrmBridge(media_keys_id); 487 MediaDrmBridge* drm_bridge = GetDrmBridge(media_keys_id);
552 if (drm_bridge) 488 if (drm_bridge)
553 drm_bridge->CancelKeyRequest(session_id); 489 drm_bridge->CancelKeyRequest(session_id);
554 } 490 }
555 491
556 void BrowserMediaPlayerManager::OnDurationChanged(
557 int player_id, const base::TimeDelta& duration) {
558 // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting
559 // demuxer IPC messages into their own group.
560 media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id);
561 if (client)
562 client->OnDemuxerDurationChanged(duration);
563 }
564
565 void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) { 492 void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) {
566 DCHECK(!GetPlayer(player->player_id())); 493 DCHECK(!GetPlayer(player->player_id()));
567 players_.push_back(player); 494 players_.push_back(player);
568 } 495 }
569 496
570 void BrowserMediaPlayerManager::RemovePlayer(int player_id) { 497 void BrowserMediaPlayerManager::RemovePlayer(int player_id) {
571 for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin(); 498 for (ScopedVector<MediaPlayerAndroid>::iterator it = players_.begin();
572 it != players_.end(); ++it) { 499 it != players_.end(); ++it) {
573 if ((*it)->player_id() == player_id) { 500 if ((*it)->player_id() == player_id) {
574 players_.erase(it); 501 players_.erase(it);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 if (!player || !drm_bridge) { 542 if (!player || !drm_bridge) {
616 DVLOG(1) << "OnSetMediaKeys(): Player and MediaKeys must be present."; 543 DVLOG(1) << "OnSetMediaKeys(): Player and MediaKeys must be present.";
617 return; 544 return;
618 } 545 }
619 // TODO(qinmin): add the logic to decide whether we should create the 546 // TODO(qinmin): add the logic to decide whether we should create the
620 // fullscreen surface for EME lv1. 547 // fullscreen surface for EME lv1.
621 player->SetDrmBridge(drm_bridge); 548 player->SetDrmBridge(drm_bridge);
622 } 549 }
623 550
624 } // namespace content 551 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/android/browser_media_player_manager.h ('k') | content/content_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698