Chromium Code Reviews| Index: media/base/android/media_source_player.cc |
| diff --git a/media/base/android/media_source_player.cc b/media/base/android/media_source_player.cc |
| index d4408b31396a02d90d20e912e1b75951d6950af6..453138965cf31cb3cbf99a8bad029fb36437d86e 100644 |
| --- a/media/base/android/media_source_player.cc |
| +++ b/media/base/android/media_source_player.cc |
| @@ -39,7 +39,7 @@ MediaSourcePlayer::MediaSourcePlayer( |
| interpolator_(&default_tick_clock_), |
| doing_browser_seek_(false), |
| pending_seek_(false), |
| - drm_bridge_(NULL), |
| + drm_bridge_(nullptr), |
| cdm_registration_id_(0), |
| is_waiting_for_key_(false), |
| key_added_while_decode_pending_(false), |
| @@ -69,8 +69,8 @@ MediaSourcePlayer::MediaSourcePlayer( |
| MediaSourcePlayer::~MediaSourcePlayer() { |
| Release(); |
| - DCHECK_EQ(!drm_bridge_, !cdm_registration_id_); |
| - if (drm_bridge_) { |
| + DCHECK_EQ(!cdm_, !cdm_registration_id_); |
| + if (cdm_) { |
| drm_bridge_->UnregisterPlayer(cdm_registration_id_); |
|
Tima Vaisburd
2015/10/28 22:49:40
Same consideration as with MediaCodecPlayer: I wou
xhwang
2015/10/29 00:17:28
Done.
|
| cdm_registration_id_ = 0; |
| } |
| @@ -273,7 +273,9 @@ void MediaSourcePlayer::OnMediaCryptoReady( |
| RetryDecoderCreation(true, true); |
| } |
| -void MediaSourcePlayer::SetCdm(BrowserCdm* cdm) { |
| +void MediaSourcePlayer::SetCdm(const scoped_refptr<MediaKeys>& cdm) { |
| + DCHECK(cdm); |
| + |
| // Currently we don't support DRM change during the middle of playback, even |
| // if the player is paused. |
| // TODO(qinmin): support DRM change after playback has started. |
| @@ -283,13 +285,15 @@ void MediaSourcePlayer::SetCdm(BrowserCdm* cdm) { |
| << "This is not well supported!"; |
| } |
| - if (drm_bridge_) { |
| + if (cdm_) { |
| NOTREACHED() << "Currently we do not support resetting CDM."; |
| return; |
| } |
| + cdm_ = cdm; |
| + |
| // Only MediaDrmBridge will be set on MediaSourcePlayer. |
| - drm_bridge_ = static_cast<MediaDrmBridge*>(cdm); |
| + drm_bridge_ = static_cast<MediaDrmBridge*>(cdm_.get()); |
| cdm_registration_id_ = drm_bridge_->RegisterPlayer( |
| base::Bind(&MediaSourcePlayer::OnKeyAdded, weak_this_), |
| @@ -299,6 +303,7 @@ void MediaSourcePlayer::SetCdm(BrowserCdm* cdm) { |
| video_decoder_job_->SetDrmBridge(drm_bridge_); |
| if (drm_bridge_->GetMediaCrypto().is_null()) { |
| + // Use BindToCurrentLoop to avoid reentrancy. |
| MediaDrmBridge::MediaCryptoReadyCB cb = BindToCurrentLoop( |
| base::Bind(&MediaSourcePlayer::OnMediaCryptoReady, weak_this_)); |
| drm_bridge_->SetMediaCryptoReadyCB(cb); |
| @@ -837,16 +842,17 @@ void MediaSourcePlayer::ResumePlaybackAfterKeyAdded() { |
| void MediaSourcePlayer::OnCdmUnset() { |
| DVLOG(1) << __FUNCTION__; |
| - DCHECK(drm_bridge_); |
| + DCHECK(cdm_); |
| // TODO(xhwang): Currently this is only called during teardown. Support full |
| // detachment of CDM during playback. This will be needed when we start to |
| // support setMediaKeys(0) (see http://crbug.com/330324), or when we release |
| // MediaDrm when the video is paused, or when the device goes to sleep (see |
| // http://crbug.com/272421). |
| - audio_decoder_job_->SetDrmBridge(NULL); |
| - video_decoder_job_->SetDrmBridge(NULL); |
| + audio_decoder_job_->SetDrmBridge(nullptr); |
| + video_decoder_job_->SetDrmBridge(nullptr); |
| cdm_registration_id_ = 0; |
| - drm_bridge_ = NULL; |
| + drm_bridge_ = nullptr; |
| + cdm_ = nullptr; |
| } |
| } // namespace media |