1 use super::Result; 2 use thiserror::Error; 3 4 #[repr(i32)] 5 #[derive(Copy, Clone, Debug, PartialEq, Eq)] 6 pub enum MediaErrorResult { 7 CodecErrorInsufficientResource = ffi::media_status_t_AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE, 8 CodecErrorReclaimed = ffi::media_status_t_AMEDIACODEC_ERROR_RECLAIMED, 9 ErrorUnknown = ffi::media_status_t_AMEDIA_ERROR_UNKNOWN, 10 ErrorMalformed = ffi::media_status_t_AMEDIA_ERROR_MALFORMED, 11 ErrorUnsupported = ffi::media_status_t_AMEDIA_ERROR_UNSUPPORTED, 12 ErrorInvalidObject = ffi::media_status_t_AMEDIA_ERROR_INVALID_OBJECT, 13 ErrorInvalidParameter = ffi::media_status_t_AMEDIA_ERROR_INVALID_PARAMETER, 14 ErrorInvalidOperation = ffi::media_status_t_AMEDIA_ERROR_INVALID_OPERATION, 15 ErrorEndOfStream = ffi::media_status_t_AMEDIA_ERROR_END_OF_STREAM, 16 ErrorIo = ffi::media_status_t_AMEDIA_ERROR_IO, 17 ErrorWouldBlock = ffi::media_status_t_AMEDIA_ERROR_WOULD_BLOCK, 18 DrmErrorBase = ffi::media_status_t_AMEDIA_DRM_ERROR_BASE, 19 DrmNotProvisioned = ffi::media_status_t_AMEDIA_DRM_NOT_PROVISIONED, 20 DrmResourceBusy = ffi::media_status_t_AMEDIA_DRM_RESOURCE_BUSY, 21 DrmDeviceRevoked = ffi::media_status_t_AMEDIA_DRM_DEVICE_REVOKED, 22 DrmShortBuffer = ffi::media_status_t_AMEDIA_DRM_SHORT_BUFFER, 23 DrmSessionNotOpened = ffi::media_status_t_AMEDIA_DRM_SESSION_NOT_OPENED, 24 DrmTamperDetected = ffi::media_status_t_AMEDIA_DRM_TAMPER_DETECTED, 25 DrmVerifyFailed = ffi::media_status_t_AMEDIA_DRM_VERIFY_FAILED, 26 DrmNeedKey = ffi::media_status_t_AMEDIA_DRM_NEED_KEY, 27 DrmLicenseExpired = ffi::media_status_t_AMEDIA_DRM_LICENSE_EXPIRED, 28 ImgreaderErrorBase = ffi::media_status_t_AMEDIA_IMGREADER_ERROR_BASE, 29 ImgreaderNoBufferAvailable = ffi::media_status_t_AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE, 30 ImgreaderMaxImagesAcquired = ffi::media_status_t_AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED, 31 ImgreaderCannotLockImage = ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE, 32 ImgreaderCannotUnlockImage = ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE, 33 ImgreaderImageNotLocked = ffi::media_status_t_AMEDIA_IMGREADER_IMAGE_NOT_LOCKED, 34 } 35 36 #[derive(Debug, Error)] 37 pub enum NdkMediaError { 38 #[error("error Media result ({0:?})")] 39 ErrorResult(MediaErrorResult), 40 #[error("unknown Media error result ({0})")] 41 UnknownResult(i32), 42 } 43 44 impl NdkMediaError { from_status<T>( status: ffi::media_status_t, on_success: impl FnOnce() -> T, ) -> Result<T>45 pub(crate) fn from_status<T>( 46 status: ffi::media_status_t, 47 on_success: impl FnOnce() -> T, 48 ) -> Result<T> { 49 use MediaErrorResult::*; 50 let result = match status { 51 ffi::media_status_t_AMEDIA_OK => return Ok(on_success()), 52 ffi::media_status_t_AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE => { 53 CodecErrorInsufficientResource 54 } 55 ffi::media_status_t_AMEDIACODEC_ERROR_RECLAIMED => CodecErrorReclaimed, 56 ffi::media_status_t_AMEDIA_ERROR_UNKNOWN => ErrorUnknown, 57 ffi::media_status_t_AMEDIA_ERROR_MALFORMED => ErrorMalformed, 58 ffi::media_status_t_AMEDIA_ERROR_UNSUPPORTED => ErrorUnsupported, 59 ffi::media_status_t_AMEDIA_ERROR_INVALID_OBJECT => ErrorInvalidObject, 60 ffi::media_status_t_AMEDIA_ERROR_INVALID_PARAMETER => ErrorInvalidParameter, 61 ffi::media_status_t_AMEDIA_ERROR_INVALID_OPERATION => ErrorInvalidOperation, 62 ffi::media_status_t_AMEDIA_ERROR_END_OF_STREAM => ErrorEndOfStream, 63 ffi::media_status_t_AMEDIA_ERROR_IO => ErrorIo, 64 ffi::media_status_t_AMEDIA_ERROR_WOULD_BLOCK => ErrorWouldBlock, 65 ffi::media_status_t_AMEDIA_DRM_ERROR_BASE => DrmErrorBase, 66 ffi::media_status_t_AMEDIA_DRM_NOT_PROVISIONED => DrmNotProvisioned, 67 ffi::media_status_t_AMEDIA_DRM_RESOURCE_BUSY => DrmResourceBusy, 68 ffi::media_status_t_AMEDIA_DRM_DEVICE_REVOKED => DrmDeviceRevoked, 69 ffi::media_status_t_AMEDIA_DRM_SHORT_BUFFER => DrmShortBuffer, 70 ffi::media_status_t_AMEDIA_DRM_SESSION_NOT_OPENED => DrmSessionNotOpened, 71 ffi::media_status_t_AMEDIA_DRM_TAMPER_DETECTED => DrmTamperDetected, 72 ffi::media_status_t_AMEDIA_DRM_VERIFY_FAILED => DrmVerifyFailed, 73 ffi::media_status_t_AMEDIA_DRM_NEED_KEY => DrmNeedKey, 74 ffi::media_status_t_AMEDIA_DRM_LICENSE_EXPIRED => DrmLicenseExpired, 75 ffi::media_status_t_AMEDIA_IMGREADER_ERROR_BASE => ImgreaderErrorBase, 76 ffi::media_status_t_AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE => ImgreaderNoBufferAvailable, 77 ffi::media_status_t_AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED => ImgreaderMaxImagesAcquired, 78 ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE => ImgreaderCannotLockImage, 79 ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE => ImgreaderCannotUnlockImage, 80 ffi::media_status_t_AMEDIA_IMGREADER_IMAGE_NOT_LOCKED => ImgreaderImageNotLocked, 81 _ => return Err(NdkMediaError::UnknownResult(status)), 82 }; 83 Err(NdkMediaError::ErrorResult(result)) 84 } 85 } 86