summaryrefslogtreecommitdiffstats
path: root/drm/libdrmframework
diff options
context:
space:
mode:
authorGloria Wang <gwang@google.com>2011-03-15 10:52:28 -0700
committerGloria Wang <gwang@google.com>2011-03-15 11:17:22 -0700
commit8d2577b9ac2f95f218db59a78447efd3c6a742dd (patch)
tree615cb3a9b4108444458d9d46858794fbed8d504b /drm/libdrmframework
parent8b9a9067511efca72ca872d689e30315c1450f94 (diff)
downloadframeworks_av-8d2577b9ac2f95f218db59a78447efd3c6a742dd.zip
frameworks_av-8d2577b9ac2f95f218db59a78447efd3c6a742dd.tar.gz
frameworks_av-8d2577b9ac2f95f218db59a78447efd3c6a742dd.tar.bz2
Bug fixes of DRM framework.
- Add death listener to clean-up drmserver appropriately when drmserver died. - Remove "static" declaration of mUniqueIdVector because it was not needed to be static variable. - Remove "class DrmContentIds;" because the class does not exist. - contentPath in saveRights() could be empty because it is not required by some DRM schemes. - Fix naming convention to use sXXX for static variables. - Fix typo Change-Id: I7d440488fc074c200f1009d1bafafeffebd690b2
Diffstat (limited to 'drm/libdrmframework')
-rw-r--r--drm/libdrmframework/DrmManagerClientImpl.cpp37
-rw-r--r--drm/libdrmframework/include/DrmManager.h3
-rw-r--r--drm/libdrmframework/include/DrmManagerClientImpl.h12
-rw-r--r--drm/libdrmframework/include/IDrmManagerService.h1
-rw-r--r--drm/libdrmframework/plugins/common/include/IDrmEngine.h1
5 files changed, 36 insertions, 18 deletions
diff --git a/drm/libdrmframework/DrmManagerClientImpl.cpp b/drm/libdrmframework/DrmManagerClientImpl.cpp
index e6ae220..a57dd98 100644
--- a/drm/libdrmframework/DrmManagerClientImpl.cpp
+++ b/drm/libdrmframework/DrmManagerClientImpl.cpp
@@ -28,8 +28,9 @@ using namespace android;
#define INVALID_VALUE -1
-Mutex DrmManagerClientImpl::mMutex;
-sp<IDrmManagerService> DrmManagerClientImpl::mDrmManagerService;
+Mutex DrmManagerClientImpl::sMutex;
+sp<IDrmManagerService> DrmManagerClientImpl::sDrmManagerService;
+sp<DrmManagerClientImpl::DeathNotifier> DrmManagerClientImpl::sDeathNotifier;
const String8 DrmManagerClientImpl::EMPTY_STRING("");
DrmManagerClientImpl* DrmManagerClientImpl::create(int* pUniqueId) {
@@ -47,8 +48,8 @@ void DrmManagerClientImpl::remove(int uniqueId) {
}
const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
- mMutex.lock();
- if (NULL == mDrmManagerService.get()) {
+ Mutex::Autolock lock(sMutex);
+ if (NULL == sDrmManagerService.get()) {
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder;
do {
@@ -62,11 +63,13 @@ const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
reqt.tv_nsec = 500000000; //0.5 sec
nanosleep(&reqt, NULL);
} while (true);
-
- mDrmManagerService = interface_cast<IDrmManagerService>(binder);
+ if (NULL == sDeathNotifier.get()) {
+ sDeathNotifier = new DeathNotifier();
+ }
+ binder->linkToDeath(sDeathNotifier);
+ sDrmManagerService = interface_cast<IDrmManagerService>(binder);
}
- mMutex.unlock();
- return mDrmManagerService;
+ return sDrmManagerService;
}
void DrmManagerClientImpl::addClient(int uniqueId) {
@@ -143,11 +146,8 @@ DrmInfo* DrmManagerClientImpl::acquireDrmInfo(
status_t DrmManagerClientImpl::saveRights(int uniqueId, const DrmRights& drmRights,
const String8& rightsPath, const String8& contentPath) {
status_t status = DRM_ERROR_UNKNOWN;
- if (EMPTY_STRING != contentPath) {
- status = getDrmManagerService()->saveRights(
+ return getDrmManagerService()->saveRights(
uniqueId, drmRights, rightsPath, contentPath);
- }
- return status;
}
String8 DrmManagerClientImpl::getOriginalMimeType(
@@ -336,3 +336,16 @@ status_t DrmManagerClientImpl::notify(const DrmInfoEvent& event) {
return DRM_NO_ERROR;
}
+DrmManagerClientImpl::DeathNotifier::~DeathNotifier() {
+ Mutex::Autolock lock(sMutex);
+ if (NULL != sDrmManagerService.get()) {
+ sDrmManagerService->asBinder()->unlinkToDeath(this);
+ }
+}
+
+void DrmManagerClientImpl::DeathNotifier::binderDied(const wp<IBinder>& who) {
+ Mutex::Autolock lock(sMutex);
+ DrmManagerClientImpl::sDrmManagerService.clear();
+ LOGW("DrmManager server died!");
+}
+
diff --git a/drm/libdrmframework/include/DrmManager.h b/drm/libdrmframework/include/DrmManager.h
index e05366d..86a5ff4 100644
--- a/drm/libdrmframework/include/DrmManager.h
+++ b/drm/libdrmframework/include/DrmManager.h
@@ -30,7 +30,6 @@ class IDrmManager;
class DrmRegistrationInfo;
class DrmUnregistrationInfo;
class DrmRightsAcquisitionInfo;
-class DrmContentIds;
class DrmConstraints;
class DrmMetadata;
class DrmRights;
@@ -141,7 +140,7 @@ private:
bool canHandle(int uniqueId, const String8& path);
private:
- static Vector<int> mUniqueIdVector;
+ Vector<int> mUniqueIdVector;
static const String8 EMPTY_STRING;
int mDecryptSessionId;
diff --git a/drm/libdrmframework/include/DrmManagerClientImpl.h b/drm/libdrmframework/include/DrmManagerClientImpl.h
index 0cba8d4..564896b 100644
--- a/drm/libdrmframework/include/DrmManagerClientImpl.h
+++ b/drm/libdrmframework/include/DrmManagerClientImpl.h
@@ -407,9 +407,17 @@ private:
Mutex mLock;
sp<DrmManagerClient::OnInfoListener> mOnInfoListener;
+ class DeathNotifier: public IBinder::DeathRecipient {
+ public:
+ DeathNotifier() {}
+ virtual ~DeathNotifier();
+ virtual void binderDied(const wp<IBinder>& who);
+ };
+
private:
- static Mutex mMutex;
- static sp<IDrmManagerService> mDrmManagerService;
+ static Mutex sMutex;
+ static sp<DeathNotifier> sDeathNotifier;
+ static sp<IDrmManagerService> sDrmManagerService;
static const sp<IDrmManagerService>& getDrmManagerService();
static const String8 EMPTY_STRING;
};
diff --git a/drm/libdrmframework/include/IDrmManagerService.h b/drm/libdrmframework/include/IDrmManagerService.h
index 2424ea5..7727e55 100644
--- a/drm/libdrmframework/include/IDrmManagerService.h
+++ b/drm/libdrmframework/include/IDrmManagerService.h
@@ -25,7 +25,6 @@
namespace android {
-class DrmContentIds;
class DrmConstraints;
class DrmMetadata;
class DrmRights;
diff --git a/drm/libdrmframework/plugins/common/include/IDrmEngine.h b/drm/libdrmframework/plugins/common/include/IDrmEngine.h
index d05c24f..77460f6 100644
--- a/drm/libdrmframework/plugins/common/include/IDrmEngine.h
+++ b/drm/libdrmframework/plugins/common/include/IDrmEngine.h
@@ -21,7 +21,6 @@
namespace android {
-class DrmContentIds;
class DrmConstraints;
class DrmMetadata;
class DrmRights;