diff --git a/api/current.txt b/api/current.txt index ee0b65a25196f..8d8ee3b34042f 100644 --- a/api/current.txt +++ b/api/current.txt @@ -15179,8 +15179,11 @@ package android.media { 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 3aa7f48d6d171..f071534f00750 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -16391,8 +16391,11 @@ package android.media { 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 fd7fca6ee6da8..59fccda040551 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -672,6 +672,7 @@ final public class MediaCodec { CodecException(int errorCode, int actionCode, String detailMessage) { super(detailMessage); mErrorCode = errorCode; + mReason = REASON_HARDWARE; mActionCode = actionCode; // TODO get this from codec @@ -698,6 +699,15 @@ final public class MediaCodec { return mActionCode == ACTION_RECOVERABLE; } + /** + * 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 @@ -719,12 +729,26 @@ final public class MediaCodec { 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. + *

+ * 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; }