From 4fd31a2a719905c584cfb2280259688d398d58b3 Mon Sep 17 00:00:00 2001 From: Ronghua Wu Date: Tue, 14 Apr 2015 14:40:32 -0700 Subject: [PATCH] media: Add reason to CodecException. Bug: 19620911 Change-Id: Ic7244a2369a04bfd69e703415a8c9aacdcbf3c57 --- api/current.txt | 3 +++ api/system-current.txt | 3 +++ media/java/android/media/MediaCodec.java | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/api/current.txt b/api/current.txt index dc83f6eff101e..ea7b0be6323f7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -15141,8 +15141,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 ac80474f37d0f..bb31924f4bfe0 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -16353,8 +16353,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 e028e3f349b33..c85fcdc6f27c9 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -687,6 +687,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 @@ -713,6 +714,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 @@ -734,6 +744,19 @@ 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_FATAL = 0; private final static int ACTION_TRANSIENT = 1; @@ -741,6 +764,7 @@ final public class MediaCodec { private final String mDiagnosticInfo; private final int mErrorCode; + private final int mReason; private final int mActionCode; }