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

Unified Diff: content/common/gpu/media/android_video_decode_accelerator.cc

Issue 1808983002: media: Add MediaDrmBridgeCdmContext. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 4 years, 9 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: content/common/gpu/media/android_video_decode_accelerator.cc
diff --git a/content/common/gpu/media/android_video_decode_accelerator.cc b/content/common/gpu/media/android_video_decode_accelerator.cc
index 9eccdc65e0440ab49d2bdcb479e2e670382960ea..7fbc29f0683fd74cee24827f305f8d9cecd0c4b6 100644
--- a/content/common/gpu/media/android_video_decode_accelerator.cc
+++ b/content/common/gpu/media/android_video_decode_accelerator.cc
@@ -38,7 +38,6 @@
#include "ui/gl/gl_bindings.h"
#if defined(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
-#include "media/base/media_keys.h"
#include "media/mojo/services/mojo_cdm_service.h"
#endif
@@ -263,6 +262,7 @@ AndroidVideoDecodeAccelerator::AndroidVideoDecodeAccelerator(
state_(NO_ERROR),
picturebuffers_requested_(false),
gl_decoder_(decoder),
+ media_drm_bridge_cdm_context_(nullptr),
cdm_registration_id_(0),
pending_input_buf_index_(-1),
error_sequence_token_(0),
@@ -285,11 +285,11 @@ AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() {
g_avda_timer.Pointer()->StopTimer(this);
#if defined(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
- if (cdm_) {
- DCHECK(cdm_registration_id_);
- static_cast<media::MediaDrmBridge*>(cdm_.get())
- ->UnregisterPlayer(cdm_registration_id_);
- }
+ if (!media_drm_bridge_cdm_context_)
+ return;
+
+ DCHECK(cdm_registration_id_);
+ media_drm_bridge_cdm_context_->UnregisterPlayer(cdm_registration_id_);
#endif // defined(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
}
@@ -365,21 +365,22 @@ void AndroidVideoDecodeAccelerator::SetCdm(int cdm_id) {
DVLOG(2) << __FUNCTION__ << ": " << cdm_id;
#if defined(ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
- using media::MediaDrmBridge;
-
DCHECK(client_) << "SetCdm() must be called after Initialize().";
- if (cdm_) {
+ if (media_drm_bridge_cdm_context_) {
NOTREACHED() << "We do not support resetting CDM.";
NotifyCdmAttached(false);
return;
}
- cdm_ = media::MojoCdmService::LegacyGetCdm(cdm_id);
- DCHECK(cdm_);
+ // Store the CDM to hold a reference to it.
+ cdm_for_reference_holding_only_ = media::MojoCdmService::LegacyGetCdm(cdm_id);
+ DCHECK(cdm_for_reference_holding_only_);
- // On Android platform the MediaKeys will be its subclass MediaDrmBridge.
- MediaDrmBridge* drm_bridge = static_cast<MediaDrmBridge*>(cdm_.get());
+ // On Android platform the CdmContext must be a MediaDrmBridgeCdmContext.
ddorwin 2016/03/22 17:20:12 nit: This sounds like this is true for all instanc
+ media_drm_bridge_cdm_context_ = static_cast<media::MediaDrmBridgeCdmContext*>(
+ cdm_for_reference_holding_only_->GetCdmContext());
+ DCHECK(media_drm_bridge_cdm_context_);
// Register CDM callbacks. The callbacks registered will be posted back to
// this thread via BindToCurrentLoop.
@@ -389,19 +390,18 @@ void AndroidVideoDecodeAccelerator::SetCdm(int cdm_id) {
// destructed as well. So the |cdm_unset_cb| will never have a chance to be
// called.
// TODO(xhwang): Remove |cdm_unset_cb| after it's not used on all platforms.
- cdm_registration_id_ =
- drm_bridge->RegisterPlayer(media::BindToCurrentLoop(base::Bind(
- &AndroidVideoDecodeAccelerator::OnKeyAdded,
- weak_this_factory_.GetWeakPtr())),
- base::Bind(&base::DoNothing));
+ cdm_registration_id_ = media_drm_bridge_cdm_context_->RegisterPlayer(
+ media::BindToCurrentLoop(
+ base::Bind(&AndroidVideoDecodeAccelerator::OnKeyAdded,
+ weak_this_factory_.GetWeakPtr())),
+ base::Bind(&base::DoNothing));
- drm_bridge->SetMediaCryptoReadyCB(media::BindToCurrentLoop(
+ media_drm_bridge_cdm_context_->SetMediaCryptoReadyCB(media::BindToCurrentLoop(
base::Bind(&AndroidVideoDecodeAccelerator::OnMediaCryptoReady,
weak_this_factory_.GetWeakPtr())));
// Postpone NotifyCdmAttached() call till we create the MediaCodec after
// OnMediaCryptoReady().
-
#else
NOTIMPLEMENTED();
@@ -1071,12 +1071,14 @@ void AndroidVideoDecodeAccelerator::PostError(
}
void AndroidVideoDecodeAccelerator::OnMediaCryptoReady(
- media::MediaDrmBridge::JavaObjectPtr media_crypto,
+ media::MediaDrmBridgeCdmContext::JavaObjectPtr media_crypto,
bool needs_protected_surface) {
DVLOG(1) << __FUNCTION__;
if (!media_crypto) {
LOG(ERROR) << "MediaCrypto is not available, can't play encrypted stream.";
+ cdm_for_reference_holding_only_ = nullptr;
+ media_drm_bridge_cdm_context_ = nullptr;
NotifyCdmAttached(false);
return;
}

Powered by Google App Engine
This is Rietveld 408576698