summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.txt1
-rw-r--r--api/system-current.txt1
-rw-r--r--media/java/android/media/MediaCodec.java9
-rw-r--r--media/jni/android_media_MediaCodec.cpp9
4 files changed, 20 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt
index 9ead86d..2905e17 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -15401,6 +15401,7 @@ package android.media {
field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
field public static final int ERROR_NO_KEY = 1; // 0x1
field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+ field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
}
public static final class MediaCodec.CryptoInfo {
diff --git a/api/system-current.txt b/api/system-current.txt
index af8a1b8..150b569 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -16664,6 +16664,7 @@ package android.media {
field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
field public static final int ERROR_NO_KEY = 1; // 0x1
field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+ field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
}
public static final class MediaCodec.CryptoInfo {
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index a79dd04..5f60891 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -2029,12 +2029,21 @@ final public class MediaCodec {
*/
public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4;
+ /**
+ * This indicates that decryption was attempted on a session that is
+ * not opened, which could be due to a failure to open the session,
+ * closing the session prematurely, or the session being reclaimed
+ * by the resource manager.
+ */
+ public static final int ERROR_SESSION_NOT_OPENED = 5;
+
/** @hide */
@IntDef({
ERROR_NO_KEY,
ERROR_KEY_EXPIRED,
ERROR_RESOURCE_BUSY,
ERROR_INSUFFICIENT_OUTPUT_PROTECTION,
+ ERROR_SESSION_NOT_OPENED,
})
@Retention(RetentionPolicy.SOURCE)
public @interface CryptoErrorCode {}
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index ce7f7e5..218a117 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -64,6 +64,7 @@ static struct CryptoErrorCodes {
jint cryptoErrorKeyExpired;
jint cryptoErrorResourceBusy;
jint cryptoErrorInsufficientOutputProtection;
+ jint cryptoErrorSessionNotOpened;
} gCryptoErrorCodes;
static struct CodecActionCodes {
@@ -843,6 +844,9 @@ static void throwCryptoException(JNIEnv *env, status_t err, const char *msg) {
case ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
err = gCryptoErrorCodes.cryptoErrorInsufficientOutputProtection;
break;
+ case ERROR_DRM_SESSION_NOT_OPENED:
+ err = gCryptoErrorCodes.cryptoErrorSessionNotOpened;
+ break;
default: /* Other negative DRM error codes go out as is. */
break;
}
@@ -1689,6 +1693,11 @@ static void android_media_MediaCodec_native_init(JNIEnv *env) {
gCryptoErrorCodes.cryptoErrorInsufficientOutputProtection =
env->GetStaticIntField(clazz.get(), field);
+ field = env->GetStaticFieldID(clazz.get(), "ERROR_SESSION_NOT_OPENED", "I");
+ CHECK(field != NULL);
+ gCryptoErrorCodes.cryptoErrorSessionNotOpened =
+ env->GetStaticIntField(clazz.get(), field);
+
clazz.reset(env->FindClass("android/media/MediaCodec$CodecException"));
CHECK(clazz.get() != NULL);
field = env->GetStaticFieldID(clazz.get(), "ACTION_TRANSIENT", "I");