| 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.
|
| + 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;
|
| }
|
|
|