From 600071ca78bb3fa52b4b3e04112ed6664ffe0e30 Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Fri, 11 Apr 2014 16:11:15 -0700 Subject: [PATCH] Allow DRM plugins to be destroyed when released bug: 13411994 Change-Id: I5b4ac137ebfbaa61bc37f8344ab6ff3a7f6c0099 --- media/jni/android_media_MediaDrm.cpp | 10 ++++++++-- media/jni/android_media_MediaDrm.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp index 7c4568241c40a..4fbd2a4a91eb2 100644 --- a/media/jni/android_media_MediaDrm.cpp +++ b/media/jni/android_media_MediaDrm.cpp @@ -297,8 +297,6 @@ JDrm::JDrm( } JDrm::~JDrm() { - mDrm.clear(); - JNIEnv *env = AndroidRuntime::getJNIEnv(); env->DeleteWeakGlobalRef(mObject); @@ -363,6 +361,13 @@ void JDrm::notify(DrmPlugin::EventType eventType, int extra, const Parcel *obj) } } +void JDrm::disconnect() { + if (mDrm != NULL) { + mDrm->destroyPlugin(); + mDrm.clear(); + } +} + // static bool JDrm::IsCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) { @@ -527,6 +532,7 @@ static void android_media_MediaDrm_release(JNIEnv *env, jobject thiz) { sp drm = setDrm(env, thiz, NULL); if (drm != NULL) { drm->setListener(NULL); + drm->disconnect(); } } diff --git a/media/jni/android_media_MediaDrm.h b/media/jni/android_media_MediaDrm.h index 620ad2832babf..b7b8e5dd6b6cb 100644 --- a/media/jni/android_media_MediaDrm.h +++ b/media/jni/android_media_MediaDrm.h @@ -47,6 +47,8 @@ struct JDrm : public BnDrmClient { void notify(DrmPlugin::EventType, int extra, const Parcel *obj); status_t setListener(const sp& listener); + void disconnect(); + protected: virtual ~JDrm();