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

Unified Diff: media/base/android/media_source_player.cc

Issue 308073004: Add PlayerTracker and BrowserCdm interfaces. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments addressed Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
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 081d69174577426b7553b8c64a796d14a27303a8..801fa7b3ebc5a502eae989b93e1087db5439893a 100644
--- a/media/base/android/media_source_player.cc
+++ b/media/base/android/media_source_player.cc
@@ -54,16 +54,23 @@ MediaSourcePlayer::MediaSourcePlayer(
reconfig_audio_decoder_(false),
reconfig_video_decoder_(false),
drm_bridge_(NULL),
+ cdm_registration_id_(0),
is_waiting_for_key_(false),
has_pending_audio_data_request_(false),
has_pending_video_data_request_(false),
weak_factory_(this) {
demuxer_->Initialize(this);
clock_.SetMaxTime(base::TimeDelta());
+ weak_this_ = weak_factory_.GetWeakPtr();
}
MediaSourcePlayer::~MediaSourcePlayer() {
Release();
+ if (drm_bridge_) {
+ DCHECK_NE(cdm_registration_id_, 0);
ddorwin 2014/06/02 20:20:29 If you want a DCHECK, it's probably something like
xhwang 2014/06/02 21:41:22 Done.
+ drm_bridge_->UnregisterPlayer(cdm_registration_id_);
+ cdm_registration_id_ = 0;
+ }
}
void MediaSourcePlayer::SetVideoSurface(gfx::ScopedJavaSurface surface) {
@@ -239,16 +246,6 @@ void MediaSourcePlayer::SetVolume(double volume) {
SetVolumeInternal();
}
-void MediaSourcePlayer::OnKeyAdded() {
- DVLOG(1) << __FUNCTION__;
- if (!is_waiting_for_key_)
- return;
-
- is_waiting_for_key_ = false;
- if (playing_)
- StartInternal();
-}
-
bool MediaSourcePlayer::IsSurfaceInUse() const {
return is_surface_in_use_;
}
@@ -355,7 +352,7 @@ void MediaSourcePlayer::OnMediaCryptoReady() {
StartInternal();
}
-void MediaSourcePlayer::SetCdm(MediaKeys* cdm) {
+void MediaSourcePlayer::SetCdm(BrowserCdm* 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.
@@ -365,12 +362,21 @@ void MediaSourcePlayer::SetCdm(MediaKeys* cdm) {
<< "This is not well supported!";
}
+ if (drm_bridge_) {
+ NOTREACHED() << "Currently we do not support resetting CDM.";
+ return;
+ }
+
// Only MediaDrmBridge will be set on MediaSourcePlayer.
drm_bridge_ = static_cast<MediaDrmBridge*>(cdm);
+ cdm_registration_id_ = drm_bridge_->RegisterPlayer(
+ base::Bind(&MediaSourcePlayer::OnKeyAdded, weak_this_),
+ base::Bind(&MediaSourcePlayer::OnCdmUnset, weak_this_));
+
if (drm_bridge_->GetMediaCrypto().is_null()) {
- drm_bridge_->SetMediaCryptoReadyCB(base::Bind(
- &MediaSourcePlayer::OnMediaCryptoReady, weak_factory_.GetWeakPtr()));
+ drm_bridge_->SetMediaCryptoReadyCB(
+ base::Bind(&MediaSourcePlayer::OnMediaCryptoReady, weak_this_));
return;
}
@@ -524,10 +530,8 @@ void MediaSourcePlayer::ProcessPendingEvents() {
return;
SetPendingEvent(PREFETCH_DONE_EVENT_PENDING);
- base::Closure barrier =
- BarrierClosure(count,
- base::Bind(&MediaSourcePlayer::OnPrefetchDone,
- weak_factory_.GetWeakPtr()));
+ base::Closure barrier = BarrierClosure(
+ count, base::Bind(&MediaSourcePlayer::OnPrefetchDone, weak_this_));
if (!AudioFinished())
audio_decoder_job_->Prefetch(barrier);
@@ -655,9 +659,7 @@ void MediaSourcePlayer::DecodeMoreAudio() {
scoped_ptr<DemuxerConfigs> configs(audio_decoder_job_->Decode(
start_time_ticks_,
start_presentation_timestamp_,
- base::Bind(&MediaSourcePlayer::MediaDecoderCallback,
- weak_factory_.GetWeakPtr(),
- true)));
+ base::Bind(&MediaSourcePlayer::MediaDecoderCallback, weak_this_, true)));
if (!configs) {
TRACE_EVENT_ASYNC_BEGIN0("media", "MediaSourcePlayer::DecodeMoreAudio",
audio_decoder_job_.get());
@@ -687,9 +689,7 @@ void MediaSourcePlayer::DecodeMoreVideo() {
scoped_ptr<DemuxerConfigs> configs(video_decoder_job_->Decode(
start_time_ticks_,
start_presentation_timestamp_,
- base::Bind(&MediaSourcePlayer::MediaDecoderCallback,
- weak_factory_.GetWeakPtr(),
- false)));
+ base::Bind(&MediaSourcePlayer::MediaDecoderCallback, weak_this_, false)));
if (!configs) {
TRACE_EVENT_ASYNC_BEGIN0("media", "MediaSourcePlayer::DecodeMoreVideo",
video_decoder_job_.get());
@@ -914,8 +914,8 @@ void MediaSourcePlayer::StartStarvationCallback(
timeout = std::max(timeout, kMinStarvationTimeout);
- decoder_starvation_callback_.Reset(base::Bind(
- &MediaSourcePlayer::OnDecoderStarved, weak_factory_.GetWeakPtr()));
+ decoder_starvation_callback_.Reset(
+ base::Bind(&MediaSourcePlayer::OnDecoderStarved, weak_this_));
base::MessageLoop::current()->PostDelayedTask(
FROM_HERE, decoder_starvation_callback_.callback(), timeout);
}
@@ -1022,4 +1022,21 @@ void MediaSourcePlayer::SetDemuxerConfigs(const DemuxerConfigs& configs,
}
}
+void MediaSourcePlayer::OnKeyAdded() {
+ DVLOG(1) << __FUNCTION__;
+ if (!is_waiting_for_key_)
+ return;
+
+ is_waiting_for_key_ = false;
+ if (playing_)
+ StartInternal();
+}
+
+void MediaSourcePlayer::OnCdmUnset() {
+ DVLOG(1) << __FUNCTION__;
+ DCHECK(drm_bridge_);
+ // TODO(xhwang): Support detachment of CDM.
+ DVLOG(1) << "CDM detachment not supported.";
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698