diff options
author | Andy Hung <hunga@google.com> | 2014-07-30 15:46:04 -0700 |
---|---|---|
committer | Andy Hung <hunga@google.com> | 2014-08-07 12:24:31 -0700 |
commit | 251d4be8aa5ab80bc915a82a2420233bdc62018e (patch) | |
tree | c158da7f2cd30e99ab93a8046b2cdd1d4ba50c91 /include/media/stagefright | |
parent | 92ce4715315bddd158c7d4028556632f0547e3b9 (diff) | |
download | frameworks_av-251d4be8aa5ab80bc915a82a2420233bdc62018e.zip frameworks_av-251d4be8aa5ab80bc915a82a2420233bdc62018e.tar.gz frameworks_av-251d4be8aa5ab80bc915a82a2420233bdc62018e.tar.bz2 |
Clarify and implement MediaCodec status codes
Clarify MediaCodec status codes in MediaError.h
When appropriate, return OMX error codes for status.
Optionally return a status code from CreateByType() and
CreateByComponentName().
Bug: 12034929
Bug: 13976475
Change-Id: I7463dd08d101074f730481b26127a69c9186c97e
Diffstat (limited to 'include/media/stagefright')
-rw-r--r-- | include/media/stagefright/MediaCodec.h | 17 | ||||
-rw-r--r-- | include/media/stagefright/MediaErrors.h | 38 |
2 files changed, 53 insertions, 2 deletions
diff --git a/include/media/stagefright/MediaCodec.h b/include/media/stagefright/MediaCodec.h index 4ff0d62..b87a09e 100644 --- a/include/media/stagefright/MediaCodec.h +++ b/include/media/stagefright/MediaCodec.h @@ -55,10 +55,10 @@ struct MediaCodec : public AHandler { struct BatteryNotifier; static sp<MediaCodec> CreateByType( - const sp<ALooper> &looper, const char *mime, bool encoder); + const sp<ALooper> &looper, const char *mime, bool encoder, status_t *err = NULL); static sp<MediaCodec> CreateByComponentName( - const sp<ALooper> &looper, const char *name); + const sp<ALooper> &looper, const char *name, status_t *err = NULL); status_t configure( const sp<AMessage> &format, @@ -223,6 +223,7 @@ private: AString mComponentName; uint32_t mReplyID; uint32_t mFlags; + status_t mStickyError; sp<Surface> mNativeWindow; SoftwareRenderer *mSoftRenderer; sp<AMessage> mOutputFormat; @@ -304,6 +305,18 @@ private: void updateBatteryStat(); bool isExecuting() const; + /* called to get the last codec error when the sticky flag is set. + * if no such codec error is found, returns UNKNOWN_ERROR. + */ + inline status_t getStickyError() const { + return mStickyError != 0 ? mStickyError : UNKNOWN_ERROR; + } + + inline void setStickyError(status_t err) { + mFlags |= kFlagStickyError; + mStickyError = err; + } + DISALLOW_EVIL_CONSTRUCTORS(MediaCodec); }; diff --git a/include/media/stagefright/MediaErrors.h b/include/media/stagefright/MediaErrors.h index 686f286..7540e07 100644 --- a/include/media/stagefright/MediaErrors.h +++ b/include/media/stagefright/MediaErrors.h @@ -23,6 +23,18 @@ namespace android { enum { + // status_t map for errors in the media framework + // OK or NO_ERROR or 0 represents no error. + + // See system/core/include/utils/Errors.h + // System standard errors from -1 through (possibly) -133 + // + // Errors with special meanings and side effects. + // INVALID_OPERATION: Operation attempted in an illegal state (will try to signal to app). + // DEAD_OBJECT: Signal from CodecBase to MediaCodec that MediaServer has died. + // NAME_NOT_FOUND: Signal from CodecBase to MediaCodec that the component was not found. + + // Media errors MEDIA_ERROR_BASE = -1000, ERROR_ALREADY_CONNECTED = MEDIA_ERROR_BASE, @@ -64,8 +76,34 @@ enum { // Heartbeat Error Codes HEARTBEAT_ERROR_BASE = -3000, ERROR_HEARTBEAT_TERMINATE_REQUESTED = HEARTBEAT_ERROR_BASE, + + // NDK Error codes + // frameworks/av/include/ndk/NdkMediaError.h + // from -10000 (0xFFFFD8F0 - 0xFFFFD8EC) + // from -20000 (0xFFFFB1E0 - 0xFFFFB1D7) + + // Codec errors are permitted from 0x80001000 through 0x9000FFFF + ERROR_CODEC_MAX = (signed)0x9000FFFF, + ERROR_CODEC_MIN = (signed)0x80001000, + + // System unknown errors from 0x80000000 - 0x80000007 (INT32_MIN + 7) + // See system/core/include/utils/Errors.h +}; + +// action codes for MediaCodecs that tell the upper layer and application +// the severity of any error. +enum ActionCode { + ACTION_CODE_FATAL, + ACTION_CODE_TRANSIENT, + ACTION_CODE_RECOVERABLE, }; +// returns true if err is a recognized DRM error code +static inline bool isCryptoError(status_t err) { + return (ERROR_DRM_RESOURCE_BUSY <= err && err <= ERROR_DRM_UNKNOWN) + || (ERROR_DRM_VENDOR_MIN <= err && err <= ERROR_DRM_VENDOR_MAX); +} + } // namespace android #endif // MEDIA_ERRORS_H_ |