Chromium Code Reviews| Index: content/renderer/media/android/webmediaplayer_android.cc |
| diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc |
| index fbee40903ee64f8566a6cbb05ea4bb93247b9189..5b042fd8b5f9a2deb59289c789141fe663a9e879 100644 |
| --- a/content/renderer/media/android/webmediaplayer_android.cc |
| +++ b/content/renderer/media/android/webmediaplayer_android.cc |
| @@ -19,6 +19,7 @@ |
| #include "content/public/common/content_client.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/renderer/render_frame.h" |
| +#include "content/renderer/media/android/renderer_cdm_manager.h" |
| #include "content/renderer/media/android/renderer_demuxer_android.h" |
| #include "content/renderer/media/android/renderer_media_player_manager.h" |
| #include "content/renderer/media/crypto/key_systems.h" |
| @@ -85,7 +86,8 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
| blink::WebFrame* frame, |
| blink::WebMediaPlayerClient* client, |
| base::WeakPtr<WebMediaPlayerDelegate> delegate, |
| - RendererMediaPlayerManager* manager, |
| + RendererMediaPlayerManager* player_manager, |
| + RendererCdmManager* cdm_manager, |
| scoped_refptr<StreamTextureFactory> factory, |
| const scoped_refptr<base::MessageLoopProxy>& media_loop, |
| media::MediaLog* media_log) |
| @@ -99,7 +101,8 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
| pending_seek_(false), |
| seeking_(false), |
| did_loading_progress_(false), |
| - manager_(manager), |
| + player_manager_(player_manager), |
| + cdm_manager_(cdm_manager), |
| network_state_(WebMediaPlayer::NetworkStateEmpty), |
| ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| texture_id_(0), |
| @@ -121,17 +124,18 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
| media_log_(media_log), |
| web_cdm_(NULL), |
| weak_factory_(this) { |
| - DCHECK(manager_); |
| + DCHECK(player_manager_); |
| + DCHECK(cdm_manager_); |
| DCHECK(main_thread_checker_.CalledOnValidThread()); |
| - player_id_ = manager_->RegisterMediaPlayer(this); |
| + player_id_ = player_manager_->RegisterMediaPlayer(this); |
| #if defined(VIDEO_HOLE) |
| force_use_overlay_embedded_video_ = CommandLine::ForCurrentProcess()-> |
| HasSwitch(switches::kForceUseOverlayEmbeddedVideo); |
| if (force_use_overlay_embedded_video_ || |
| - manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) { |
| + player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) { |
| // Defer stream texture creation until we are sure it's necessary. |
| needs_establish_peer_ = false; |
| current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1)); |
| @@ -144,9 +148,9 @@ WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { |
| SetVideoFrameProviderClient(NULL); |
| client_->setWebLayer(NULL); |
| - if (manager_) { |
| - manager_->DestroyPlayer(player_id_); |
| - manager_->UnregisterMediaPlayer(player_id_); |
| + if (player_manager_) { |
| + player_manager_->DestroyPlayer(player_id_); |
| + player_manager_->UnregisterMediaPlayer(player_id_); |
| } |
| if (stream_id_) { |
| @@ -232,11 +236,11 @@ void WebMediaPlayerAndroid::load(LoadType load_type, |
| url_ = url; |
| GURL first_party_url = frame_->document().firstPartyForCookies(); |
| - manager_->Initialize( |
| + player_manager_->Initialize( |
| player_type_, player_id_, url, first_party_url, demuxer_client_id); |
| - if (manager_->ShouldEnterFullscreen(frame_)) |
| - manager_->EnterFullscreen(player_id_, frame_); |
| + if (player_manager_->ShouldEnterFullscreen(frame_)) |
| + player_manager_->EnterFullscreen(player_id_, frame_); |
| UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); |
| UpdateReadyState(WebMediaPlayer::ReadyStateHaveNothing); |
| @@ -266,20 +270,22 @@ void WebMediaPlayerAndroid::DidLoadMediaInfo(MediaInfoLoader::Status status) { |
| void WebMediaPlayerAndroid::play() { |
| #if defined(VIDEO_HOLE) |
| if (hasVideo() && needs_external_surface_ && |
| - !manager_->IsInFullscreen(frame_)) { |
| + !player_manager_->IsInFullscreen(frame_)) { |
| DCHECK(!needs_establish_peer_); |
| - manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| + player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| } |
| #endif // defined(VIDEO_HOLE) |
| TryCreateStreamTextureProxyIfNeeded(); |
| // There is no need to establish the surface texture peer for fullscreen |
| // video. |
| - if (hasVideo() && needs_establish_peer_ && !manager_->IsInFullscreen(frame_)) |
| + if (hasVideo() && needs_establish_peer_ && |
| + !player_manager_->IsInFullscreen(frame_)) { |
| EstablishSurfaceTexturePeer(); |
| + } |
| if (paused()) |
| - manager_->Start(player_id_); |
| + player_manager_->Start(player_id_); |
| UpdatePlayingState(true); |
| UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); |
| playing_started_ = true; |
| @@ -330,7 +336,7 @@ void WebMediaPlayerAndroid::seek(double seconds) { |
| media_source_delegate_->StartWaitingForSeek(seek_time_); |
| // Kick off the asynchronous seek! |
| - manager_->Seek(player_id_, seek_time_); |
| + player_manager_->Seek(player_id_, seek_time_); |
| } |
| bool WebMediaPlayerAndroid::supportsSave() const { |
| @@ -342,7 +348,7 @@ void WebMediaPlayerAndroid::setRate(double rate) { |
| } |
| void WebMediaPlayerAndroid::setVolume(double volume) { |
| - manager_->SetVolume(player_id_, volume); |
| + player_manager_->SetVolume(player_id_, volume); |
| } |
| bool WebMediaPlayerAndroid::hasVideo() const { |
| @@ -703,10 +709,10 @@ void WebMediaPlayerAndroid::OnVideoSizeChanged(int width, int height) { |
| // TODO(qinmin): Change this so that only EME needs the H/W surface |
| if (force_use_overlay_embedded_video_ || |
| (media_source_delegate_ && media_source_delegate_->IsVideoEncrypted() && |
| - manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) { |
| + player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo())) { |
| needs_external_surface_ = true; |
| - if (!paused() && !manager_->IsInFullscreen(frame_)) |
| - manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| + if (!paused() && !player_manager_->IsInFullscreen(frame_)) |
| + player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| } else if (stream_texture_proxy_ && !stream_id_) { |
| // Do deferred stream texture creation finally. |
| DoCreateStreamTexture(); |
| @@ -763,10 +769,10 @@ void WebMediaPlayerAndroid::OnDisconnectedFromRemoteDevice() { |
| } |
| void WebMediaPlayerAndroid::OnDidEnterFullscreen() { |
| - if (!manager_->IsInFullscreen(frame_)) { |
| + if (!player_manager_->IsInFullscreen(frame_)) { |
| frame_->view()->willEnterFullScreen(); |
| frame_->view()->didEnterFullScreen(); |
| - manager_->DidEnterFullscreen(frame_); |
| + player_manager_->DidEnterFullscreen(frame_); |
| } |
| } |
| @@ -781,12 +787,12 @@ void WebMediaPlayerAndroid::OnDidExitFullscreen() { |
| #if defined(VIDEO_HOLE) |
| if (!paused() && needs_external_surface_) |
| - manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| + player_manager_->RequestExternalSurface(player_id_, last_computed_rect_); |
| #endif // defined(VIDEO_HOLE) |
| frame_->view()->willExitFullScreen(); |
| frame_->view()->didExitFullScreen(); |
| - manager_->DidExitFullscreen(); |
| + player_manager_->DidExitFullscreen(); |
| client_->repaint(); |
| } |
| @@ -872,13 +878,13 @@ void WebMediaPlayerAndroid::ReleaseMediaResources() { |
| case WebMediaPlayer::NetworkStateDecodeError: |
| break; |
| } |
| - manager_->ReleaseResources(player_id_); |
| + player_manager_->ReleaseResources(player_id_); |
| OnPlayerReleased(); |
| } |
| void WebMediaPlayerAndroid::OnDestruct() { |
| - if (manager_) |
| - manager_->UnregisterMediaPlayer(player_id_); |
| + if (player_manager_) |
| + player_manager_->UnregisterMediaPlayer(player_id_); |
| Detach(); |
| } |
| @@ -897,11 +903,11 @@ void WebMediaPlayerAndroid::Detach() { |
| current_frame_ = NULL; |
| } |
| is_remote_ = false; |
| - manager_ = NULL; |
| + player_manager_ = NULL; |
| } |
| void WebMediaPlayerAndroid::Pause(bool is_media_related_action) { |
| - manager_->Pause(player_id_, is_media_related_action); |
| + player_manager_->Pause(player_id_, is_media_related_action); |
| UpdatePlayingState(false); |
| } |
| @@ -1151,7 +1157,7 @@ void WebMediaPlayerAndroid::SetNeedsEstablishPeer(bool needs_establish_peer) { |
| } |
| void WebMediaPlayerAndroid::setPoster(const blink::WebURL& poster) { |
| - manager_->SetPoster(player_id_, poster); |
| + player_manager_->SetPoster(player_id_, poster); |
| } |
| void WebMediaPlayerAndroid::UpdatePlayingState(bool is_playing) { |
| @@ -1311,7 +1317,7 @@ WebMediaPlayerAndroid::GenerateKeyRequestInternal( |
| if (current_key_system_.empty()) { |
| if (!proxy_decryptor_) { |
| proxy_decryptor_.reset(new ProxyDecryptor( |
| - manager_, |
| + cdm_manager_, |
| base::Bind(&WebMediaPlayerAndroid::OnKeyAdded, |
| weak_factory_.GetWeakPtr()), |
| base::Bind(&WebMediaPlayerAndroid::OnKeyError, |
| @@ -1329,7 +1335,9 @@ WebMediaPlayerAndroid::GenerateKeyRequestInternal( |
| .Run(proxy_decryptor_->GetDecryptor()); |
| } |
| - manager_->SetCdm(player_id_, proxy_decryptor_->GetCdmId()); |
| + if (proxy_decryptor_->GetCdmId() != RendererCdmManager::kInvalidCdmId) |
| + player_manager_->SetCdm(player_id_, proxy_decryptor_->GetCdmId()); |
|
ddorwin
2014/05/23 23:28:37
This handles the Clear Key case, right? Should we
xhwang
2014/05/27 22:57:41
Done.
|
| + |
| current_key_system_ = key_system; |
| } else if (key_system != current_key_system_) { |
| return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; |
| @@ -1444,7 +1452,8 @@ void WebMediaPlayerAndroid::setContentDecryptionModule( |
| if (!decryptor_ready_cb_.is_null()) |
| base::ResetAndReturn(&decryptor_ready_cb_).Run(web_cdm_->GetDecryptor()); |
| - manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); |
| + if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) |
| + player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); |
| } |
| void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) { |
| @@ -1552,18 +1561,18 @@ void WebMediaPlayerAndroid::SetDecryptorReadyCB( |
| } |
| void WebMediaPlayerAndroid::enterFullscreen() { |
| - if (manager_->CanEnterFullscreen(frame_)) { |
| - manager_->EnterFullscreen(player_id_, frame_); |
| + if (player_manager_->CanEnterFullscreen(frame_)) { |
| + player_manager_->EnterFullscreen(player_id_, frame_); |
| SetNeedsEstablishPeer(false); |
| } |
| } |
| void WebMediaPlayerAndroid::exitFullscreen() { |
| - manager_->ExitFullscreen(player_id_); |
| + player_manager_->ExitFullscreen(player_id_); |
| } |
| bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
| - return manager_->CanEnterFullscreen(frame_); |
| + return player_manager_->CanEnterFullscreen(frame_); |
| } |
| } // namespace content |