OLD | NEW |
---|---|
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/media/android/browser_media_player_manager.h" | 5 #include "content/browser/media/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/content_view_core_impl.h" | 8 #include "content/browser/android/content_view_core_impl.h" |
9 #include "content/browser/media/android/browser_demuxer_android.h" | 9 #include "content/browser/media/android/browser_demuxer_android.h" |
10 #include "content/browser/media/android/media_resource_getter_impl.h" | 10 #include "content/browser/media/android/media_resource_getter_impl.h" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Initialize, OnInitialize) | 142 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Initialize, OnInitialize) |
143 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Start, OnStart) | 143 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Start, OnStart) |
144 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Seek, OnSeek) | 144 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Seek, OnSeek) |
145 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Pause, OnPause) | 145 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Pause, OnPause) |
146 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetVolume, OnSetVolume) | 146 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetVolume, OnSetVolume) |
147 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetPoster, OnSetPoster) | 147 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetPoster, OnSetPoster) |
148 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Release, OnReleaseResources) | 148 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_Release, OnReleaseResources) |
149 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) | 149 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyMediaPlayer, OnDestroyPlayer) |
150 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, | 150 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_DestroyAllMediaPlayers, |
151 DestroyAllMediaPlayers) | 151 DestroyAllMediaPlayers) |
152 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_SetMediaKeys, OnSetMediaKeys) | |
152 IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm) | 153 IPC_MESSAGE_HANDLER(CdmHostMsg_InitializeCdm, OnInitializeCdm) |
153 IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSession, OnCreateSession) | 154 IPC_MESSAGE_HANDLER(CdmHostMsg_CreateSession, OnCreateSession) |
154 IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession) | 155 IPC_MESSAGE_HANDLER(CdmHostMsg_UpdateSession, OnUpdateSession) |
155 IPC_MESSAGE_HANDLER(CdmHostMsg_ReleaseSession, OnReleaseSession) | 156 IPC_MESSAGE_HANDLER(CdmHostMsg_ReleaseSession, OnReleaseSession) |
156 IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm) | 157 IPC_MESSAGE_HANDLER(CdmHostMsg_DestroyCdm, OnDestroyCdm) |
157 #if defined(VIDEO_HOLE) | 158 #if defined(VIDEO_HOLE) |
158 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface, | 159 IPC_MESSAGE_HANDLER(MediaPlayerHostMsg_NotifyExternalSurface, |
159 OnNotifyExternalSurface) | 160 OnNotifyExternalSurface) |
160 #endif // defined(VIDEO_HOLE) | 161 #endif // defined(VIDEO_HOLE) |
161 IPC_MESSAGE_UNHANDLED(handled = false) | 162 IPC_MESSAGE_UNHANDLED(handled = false) |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
513 const GURL& first_party_for_cookies, | 514 const GURL& first_party_for_cookies, |
514 int demuxer_client_id) { | 515 int demuxer_client_id) { |
515 DCHECK(type != MEDIA_PLAYER_TYPE_MEDIA_SOURCE || demuxer_client_id > 0) | 516 DCHECK(type != MEDIA_PLAYER_TYPE_MEDIA_SOURCE || demuxer_client_id > 0) |
516 << "Media source players must have positive demuxer client IDs: " | 517 << "Media source players must have positive demuxer client IDs: " |
517 << demuxer_client_id; | 518 << demuxer_client_id; |
518 | 519 |
519 RemovePlayer(player_id); | 520 RemovePlayer(player_id); |
520 | 521 |
521 RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( | 522 RenderProcessHostImpl* host = static_cast<RenderProcessHostImpl*>( |
522 web_contents()->GetRenderProcessHost()); | 523 web_contents()->GetRenderProcessHost()); |
523 AddPlayer(CreateMediaPlayer( | 524 MediaPlayerAndroid* player = CreateMediaPlayer( |
524 type, player_id, url, first_party_for_cookies, demuxer_client_id, | 525 type, player_id, url, first_party_for_cookies, demuxer_client_id, |
525 host->GetBrowserContext()->IsOffTheRecord(), this, | 526 host->GetBrowserContext()->IsOffTheRecord(), this, |
526 host->browser_demuxer_android())); | 527 host->browser_demuxer_android()); |
528 if (!player) | |
529 return; | |
530 | |
531 AddPlayer(player); | |
532 | |
533 if (pending_set_media_keys_map_.find(player_id) == | |
534 pending_set_media_keys_map_.end()) { | |
535 return; | |
536 } | |
537 | |
538 int cdm_id = pending_set_media_keys_map_[player_id]; | |
ddorwin
2014/03/11 04:06:33
Better to save a temp iterator above?
xhwang
2014/03/12 01:07:52
Obsolete.
| |
539 MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id); | |
ddorwin
2014/03/11 04:06:33
Should we erase it from the map? Otherwise, we'll
xhwang
2014/03/12 01:07:52
You are right. But this code is obsolete now.
| |
540 if (!drm_bridge) | |
ddorwin
2014/03/11 04:06:33
Should this ever fail?
xhwang
2014/03/12 01:07:52
This code is obsolete. But this is possible. OnIni
| |
541 player->SetDrmBridge(drm_bridge); | |
527 } | 542 } |
528 | 543 |
529 void BrowserMediaPlayerManager::OnStart(int player_id) { | 544 void BrowserMediaPlayerManager::OnStart(int player_id) { |
530 MediaPlayerAndroid* player = GetPlayer(player_id); | 545 MediaPlayerAndroid* player = GetPlayer(player_id); |
531 if (player) | 546 if (player) |
532 player->Start(); | 547 player->Start(); |
533 } | 548 } |
534 | 549 |
535 void BrowserMediaPlayerManager::OnSeek( | 550 void BrowserMediaPlayerManager::OnSeek( |
536 int player_id, | 551 int player_id, |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
581 NOTREACHED() << "Invalid key system: " << key_system; | 596 NOTREACHED() << "Invalid key system: " << key_system; |
582 return; | 597 return; |
583 } | 598 } |
584 | 599 |
585 if (!MediaDrmBridge::IsKeySystemSupportedWithType(key_system, "")) { | 600 if (!MediaDrmBridge::IsKeySystemSupportedWithType(key_system, "")) { |
586 NOTREACHED() << "Unsupported key system: " << key_system; | 601 NOTREACHED() << "Unsupported key system: " << key_system; |
587 return; | 602 return; |
588 } | 603 } |
589 | 604 |
590 AddDrmBridge(cdm_id, key_system, frame_url); | 605 AddDrmBridge(cdm_id, key_system, frame_url); |
591 // In EME v0.1b MediaKeys lives in the media element. So the |cdm_id| | |
592 // is the same as the |player_id|. | |
593 OnSetMediaKeys(cdm_id, cdm_id); | |
594 } | 606 } |
595 | 607 |
596 void BrowserMediaPlayerManager::OnCreateSession( | 608 void BrowserMediaPlayerManager::OnCreateSession( |
597 int cdm_id, | 609 int cdm_id, |
598 uint32 session_id, | 610 uint32 session_id, |
599 CdmHostMsg_CreateSession_ContentType content_type, | 611 CdmHostMsg_CreateSession_ContentType content_type, |
600 const std::vector<uint8>& init_data) { | 612 const std::vector<uint8>& init_data) { |
601 if (init_data.size() > kMaxInitDataLength) { | 613 if (init_data.size() > kMaxInitDataLength) { |
602 LOG(WARNING) << "InitData for ID: " << cdm_id | 614 LOG(WARNING) << "InitData for ID: " << cdm_id |
603 << " too long: " << init_data.size(); | 615 << " too long: " << init_data.size(); |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
788 for (ScopedVector<MediaDrmBridge>::iterator it = drm_bridges_.begin(); | 800 for (ScopedVector<MediaDrmBridge>::iterator it = drm_bridges_.begin(); |
789 it != drm_bridges_.end(); ++it) { | 801 it != drm_bridges_.end(); ++it) { |
790 if ((*it)->cdm_id() == cdm_id) { | 802 if ((*it)->cdm_id() == cdm_id) { |
791 drm_bridges_.erase(it); | 803 drm_bridges_.erase(it); |
792 break; | 804 break; |
793 } | 805 } |
794 } | 806 } |
795 } | 807 } |
796 | 808 |
797 void BrowserMediaPlayerManager::OnSetMediaKeys(int player_id, int cdm_id) { | 809 void BrowserMediaPlayerManager::OnSetMediaKeys(int player_id, int cdm_id) { |
798 MediaPlayerAndroid* player = GetPlayer(player_id); | |
799 MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id); | 810 MediaDrmBridge* drm_bridge = GetDrmBridge(cdm_id); |
800 if (!player || !drm_bridge) { | 811 if (!drm_bridge) { |
801 DVLOG(1) << "OnSetMediaKeys(): Player and MediaKeys must be present."; | 812 DVLOG(1) << "OnSetMediaKeys(): MediaDrmBridge must be present."; |
802 return; | 813 return; |
803 } | 814 } |
815 | |
816 MediaPlayerAndroid* player = GetPlayer(player_id); | |
817 // SetMediaKeys() may be called before the player is loaded. | |
ddorwin
2014/03/11 04:06:33
How do we know the player_id in that case?
xhwang
2014/03/12 01:07:52
Removed.
| |
818 if (!player) { | |
819 pending_set_media_keys_map_[player_id] = cdm_id; | |
820 return; | |
821 } | |
822 | |
804 // TODO(qinmin): add the logic to decide whether we should create the | 823 // TODO(qinmin): add the logic to decide whether we should create the |
805 // fullscreen surface for EME lv1. | 824 // fullscreen surface for EME lv1. |
806 player->SetDrmBridge(drm_bridge); | 825 player->SetDrmBridge(drm_bridge); |
807 } | 826 } |
808 | 827 |
809 void BrowserMediaPlayerManager::CreateSessionIfPermitted( | 828 void BrowserMediaPlayerManager::CreateSessionIfPermitted( |
810 int cdm_id, | 829 int cdm_id, |
811 uint32 session_id, | 830 uint32 session_id, |
812 const std::string& content_type, | 831 const std::string& content_type, |
813 const std::vector<uint8>& init_data, | 832 const std::vector<uint8>& init_data, |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
884 if (player && player->IsSurfaceInUse()) | 903 if (player && player->IsSurfaceInUse()) |
885 return; | 904 return; |
886 ExternalVideoSurfaceContainer* surface_container = | 905 ExternalVideoSurfaceContainer* surface_container = |
887 ExternalVideoSurfaceContainer::FromWebContents(web_contents_); | 906 ExternalVideoSurfaceContainer::FromWebContents(web_contents_); |
888 if (surface_container) | 907 if (surface_container) |
889 surface_container->ReleaseExternalVideoSurface(player_id); | 908 surface_container->ReleaseExternalVideoSurface(player_id); |
890 #endif // defined(VIDEO_HOLE) | 909 #endif // defined(VIDEO_HOLE) |
891 } | 910 } |
892 | 911 |
893 } // namespace content | 912 } // namespace content |
OLD | NEW |