Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d393216f authored by Jeff Tinker's avatar Jeff Tinker
Browse files

Add error code to MediaCodec.CryptoException

Added a code to represent unsupported operations

bug: 25929554
Change-Id: Id8bfa092f29de073db19c4d7444f89249ea2cdd5
parent e872ac45
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20444,6 +20444,7 @@ package android.media {
    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
    field public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
  }
  public static final class MediaCodec.CryptoInfo {
+1 −0
Original line number Diff line number Diff line
@@ -21934,6 +21934,7 @@ package android.media {
    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
    field public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
  }
  public static final class MediaCodec.CryptoInfo {
+1 −0
Original line number Diff line number Diff line
@@ -20453,6 +20453,7 @@ package android.media {
    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
    field public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
  }
  public static final class MediaCodec.CryptoInfo {
+11 −0
Original line number Diff line number Diff line
@@ -2074,6 +2074,16 @@ final public class MediaCodec {
         */
        public static final int ERROR_SESSION_NOT_OPENED = 5;

        /**
         * This indicates that an operation was attempted that could not be
         * supported by the crypto system of the device in its current
         * configuration.  It may occur when the license policy requires
         * device security features that aren't supported by the device,
         * or due to an internal error in the crypto system that prevents
         * the specified security policy from being met.
         */
        public static final int ERROR_UNSUPPORTED_OPERATION = 6;

        /** @hide */
        @IntDef({
            ERROR_NO_KEY,
@@ -2081,6 +2091,7 @@ final public class MediaCodec {
            ERROR_RESOURCE_BUSY,
            ERROR_INSUFFICIENT_OUTPUT_PROTECTION,
            ERROR_SESSION_NOT_OPENED,
            ERROR_UNSUPPORTED_OPERATION
        })
        @Retention(RetentionPolicy.SOURCE)
        public @interface CryptoErrorCode {}
+10 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ static struct CryptoErrorCodes {
    jint cryptoErrorResourceBusy;
    jint cryptoErrorInsufficientOutputProtection;
    jint cryptoErrorSessionNotOpened;
    jint cryptoErrorUnsupportedOperation;
} gCryptoErrorCodes;

static struct CodecActionCodes {
@@ -869,6 +870,10 @@ static void throwCryptoException(JNIEnv *env, status_t err, const char *msg) {
            err = gCryptoErrorCodes.cryptoErrorSessionNotOpened;
            defaultMsg = "Attempted to use a closed session";
            break;
        case ERROR_DRM_CANNOT_HANDLE:
            err = gCryptoErrorCodes.cryptoErrorUnsupportedOperation;
            defaultMsg = "Operation not supported in this configuration";
            break;
        default:  /* Other negative DRM error codes go out as is. */
            break;
    }
@@ -1773,6 +1778,11 @@ static void android_media_MediaCodec_native_init(JNIEnv *env) {
    gCryptoErrorCodes.cryptoErrorSessionNotOpened =
        env->GetStaticIntField(clazz.get(), field);

    field = env->GetStaticFieldID(clazz.get(), "ERROR_UNSUPPORTED_OPERATION", "I");
    CHECK(field != NULL);
    gCryptoErrorCodes.cryptoErrorUnsupportedOperation =
        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");