Merge "media: Add reason to CodecException."
diff --git a/api/current.txt b/api/current.txt
index ee0b65a..8d8ee3b 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -15179,8 +15179,11 @@
public static final class MediaCodec.CodecException extends java.lang.IllegalStateException {
method public java.lang.String getDiagnosticInfo();
+ method public int getReason();
method public boolean isRecoverable();
method public boolean isTransient();
+ field public static final int REASON_HARDWARE = 0; // 0x0
+ field public static final int REASON_RECLAIMED = 1; // 0x1
}
public static final class MediaCodec.CryptoException extends java.lang.RuntimeException {
diff --git a/api/system-current.txt b/api/system-current.txt
index 3aa7f48..f071534 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -16391,8 +16391,11 @@
public static final class MediaCodec.CodecException extends java.lang.IllegalStateException {
method public java.lang.String getDiagnosticInfo();
+ method public int getReason();
method public boolean isRecoverable();
method public boolean isTransient();
+ field public static final int REASON_HARDWARE = 0; // 0x0
+ field public static final int REASON_RECLAIMED = 1; // 0x1
}
public static final class MediaCodec.CryptoException extends java.lang.RuntimeException {
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index fd7fca6..59fccda 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -672,6 +672,7 @@
CodecException(int errorCode, int actionCode, String detailMessage) {
super(detailMessage);
mErrorCode = errorCode;
+ mReason = REASON_HARDWARE;
mActionCode = actionCode;
// TODO get this from codec
@@ -699,6 +700,15 @@
}
/**
+ * Retrieve the reason associated with a CodecException.
+ * The reason could be one of {@link #REASON_HARDWARE} or {@link #REASON_RECLAIMED}.
+ *
+ */
+ public int getReason() {
+ return mReason;
+ }
+
+ /**
* Retrieve the error code associated with a CodecException.
* This is opaque diagnostic information and may depend on
* hardware or API level.
@@ -719,12 +729,26 @@
return mDiagnosticInfo;
}
+ /**
+ * This indicates the exception is caused by the hardware.
+ */
+ public static final int REASON_HARDWARE = 0;
+
+ /**
+ * This indicates the exception is because the resource manager reclaimed
+ * the media resource used by the codec.
+ * <p>
+ * With this exception, the codec must be released, as it has moved to terminal state.
+ */
+ public static final int REASON_RECLAIMED = 1;
+
/* Must be in sync with android_media_MediaCodec.cpp */
private final static int ACTION_TRANSIENT = 1;
private final static int ACTION_RECOVERABLE = 2;
private final String mDiagnosticInfo;
private final int mErrorCode;
+ private final int mReason;
private final int mActionCode;
}