summaryrefslogtreecommitdiff
path: root/media/jni/android_media_MediaCrypto.cpp
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2016-02-12 08:58:32 -0800
committerJeff Tinker <jtinker@google.com>2016-02-12 20:23:45 -0800
commitdc614f86a5a61d0b4287796dfa028c637f615d34 (patch)
treee8fd3df767296dd5e68cee5b1b1d1393ee5f845a /media/jni/android_media_MediaCrypto.cpp
parent6f1033104d178f8c03857770edf5568947f1af70 (diff)
Add mediadrm service
Part of media security hardening This is an intermediate step toward moving mediadrm to a new service separate from mediaserver. This first step allows mediadrmservice to run based on the system property media.mediadrmservice.enable so it can be selectively enabled on devices that support using native_handles for secure buffers. bug: 22990512 Change-Id: I9af073d8383f25657938d07be90c21c0dc6126b7
Diffstat (limited to 'media/jni/android_media_MediaCrypto.cpp')
-rw-r--r--media/jni/android_media_MediaCrypto.cpp35
1 files changed, 24 insertions, 11 deletions
diff --git a/media/jni/android_media_MediaCrypto.cpp b/media/jni/android_media_MediaCrypto.cpp
index e414f4838583..35da84ce82e5 100644
--- a/media/jni/android_media_MediaCrypto.cpp
+++ b/media/jni/android_media_MediaCrypto.cpp
@@ -25,7 +25,9 @@
#include "JNIHelp.h"
#include <binder/IServiceManager.h>
+#include <cutils/properties.h>
#include <media/ICrypto.h>
+#include <media/IMediaDrmService.h>
#include <media/IMediaPlayerService.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -61,19 +63,30 @@ JCrypto::~JCrypto() {
// static
sp<ICrypto> JCrypto::MakeCrypto() {
sp<IServiceManager> sm = defaultServiceManager();
-
- sp<IBinder> binder =
- sm->getService(String16("media.player"));
-
- sp<IMediaPlayerService> service =
- interface_cast<IMediaPlayerService>(binder);
-
- if (service == NULL) {
- return NULL;
+ sp<ICrypto> crypto;
+
+ char value[PROPERTY_VALUE_MAX];
+ if (property_get("media.mediadrmservice.enable", value, NULL)
+ && (!strcmp("1", value) || !strcasecmp("true", value))) {
+ sp<IBinder> binder =
+ sm->getService(String16("media.drm"));
+ sp<IMediaDrmService> service =
+ interface_cast<IMediaDrmService>(binder);
+ if (service == NULL) {
+ return NULL;
+ }
+ crypto = service->makeCrypto();
+ } else {
+ sp<IBinder> binder =
+ sm->getService(String16("media.player"));
+ sp<IMediaPlayerService> service =
+ interface_cast<IMediaPlayerService>(binder);
+ if (service == NULL) {
+ return NULL;
+ }
+ crypto = service->makeCrypto();
}
- sp<ICrypto> crypto = service->makeCrypto();
-
if (crypto == NULL || (crypto->initCheck() != OK && crypto->initCheck() != NO_INIT)) {
return NULL;
}