summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2013-04-18 23:18:46 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-04-18 23:18:46 +0000
commitc884a08e8c450682f3fe83576fb9e89f8337146e (patch)
treed4752c281cf06617ce1437dd5d49abffa6cc94ee /media
parent9bc3386e1dfacf6544039dc9f66d07b827632f23 (diff)
parentf7568b5ee96b3d80721c76ab3d47f1368a99bf98 (diff)
downloadframeworks_base-c884a08e8c450682f3fe83576fb9e89f8337146e.zip
frameworks_base-c884a08e8c450682f3fe83576fb9e89f8337146e.tar.gz
frameworks_base-c884a08e8c450682f3fe83576fb9e89f8337146e.tar.bz2
Merge "Improve error handling for DRM errors reported by plugins" into jb-mr2-dev
Diffstat (limited to 'media')
-rw-r--r--media/jni/android_media_MediaDrm.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp
index d9d466e..d1b499e 100644
--- a/media/jni/android_media_MediaDrm.cpp
+++ b/media/jni/android_media_MediaDrm.cpp
@@ -30,6 +30,7 @@
#include <media/IDrm.h>
#include <media/IMediaPlayerService.h>
#include <media/stagefright/foundation/ADebug.h>
+#include <media/stagefright/MediaErrors.h>
namespace android {
@@ -191,10 +192,62 @@ void JNIDrmListener::notify(DrmPlugin::EventType eventType, int extra,
static bool throwExceptionAsNecessary(
JNIEnv *env, status_t err, const char *msg = NULL) {
+ const char *drmMessage = NULL;
+
+ switch(err) {
+ case ERROR_DRM_UNKNOWN:
+ drmMessage = "General DRM error";
+ break;
+ case ERROR_DRM_NO_LICENSE:
+ drmMessage = "No license";
+ break;
+ case ERROR_DRM_LICENSE_EXPIRED:
+ drmMessage = "License expired";
+ break;
+ case ERROR_DRM_SESSION_NOT_OPENED:
+ drmMessage = "Session not opened";
+ break;
+ case ERROR_DRM_DECRYPT_UNIT_NOT_INITIALIZED:
+ drmMessage = "Not initialized";
+ break;
+ case ERROR_DRM_DECRYPT:
+ drmMessage = "Decrypt error";
+ break;
+ case ERROR_DRM_CANNOT_HANDLE:
+ drmMessage = "Unsupported scheme or data format";
+ break;
+ case ERROR_DRM_TAMPER_DETECTED:
+ drmMessage = "Invalid state";
+ break;
+ case ERROR_DRM_NOT_PROVISIONED:
+ drmMessage = "Not provisioned";
+ break;
+ case ERROR_DRM_DEVICE_REVOKED:
+ drmMessage = "Device revoked";
+ break;
+ default:
+ break;
+ }
+
+ String8 vendorMessage;
+ if (err >= ERROR_DRM_VENDOR_MIN && err <= ERROR_DRM_VENDOR_MAX) {
+ vendorMessage.format("DRM vendor-defined error: %d", err);
+ drmMessage = vendorMessage.string();
+ }
+
if (err == BAD_VALUE) {
jniThrowException(env, "java/lang/IllegalArgumentException", msg);
return true;
} else if (err != OK) {
+ String8 errbuf;
+ if (drmMessage != NULL) {
+ if (msg == NULL) {
+ msg = drmMessage;
+ } else {
+ errbuf.format("%s: %s", msg, drmMessage);
+ msg = errbuf.string();
+ }
+ }
jniThrowException(env, "java/lang/IllegalStateException", msg);
return true;
}