Skip to content

Commit

Permalink
ndk-sys,ndk: Turn type aliases into newtype wrappers and fix mismatch…
Browse files Browse the repository at this point in the history
…es (#245)

Some stray `camera_status_t` showed up in the helper media bindings,
which is not caught as a mismatch to `media_status_t` unless both are a
newtype.

For similar reasons `AndroidBitmapFormat`, `AHardwareBuffer_Format` and
`AIMAGE_FORMATS` are also converted to cleaner newtype wrappers.
  • Loading branch information
MarijnS95 authored Apr 19, 2022
1 parent 7116fd0 commit d78aee1
Show file tree
Hide file tree
Showing 13 changed files with 1,827 additions and 1,202 deletions.
2 changes: 2 additions & 0 deletions ndk-sys/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Unreleased

- **Breaking:** Turn `enum` type aliases into newtype wrappers. (#245)

# 0.3.0 (2022-01-05)

- **Breaking:** Use `jni-sys` for low-level JNI types instead of those autogenerated by `bindgen` based on the header.
Expand Down
4 changes: 4 additions & 0 deletions ndk-sys/generate_bindings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ while read ARCH && read TARGET ; do
--blocklist-item 'C?_?JNIEnv' \
--blocklist-item '_?JavaVM' \
--blocklist-item '_?j\w+' \
--newtype-enum '\w+_(result|status)_t' \
--newtype-enum 'AndroidBitmapFormat' \
--newtype-enum 'AHardwareBuffer_Format' \
--newtype-enum 'AIMAGE_FORMATS' \
-- \
--sysroot="${ANDROID_NDK_ROOT}"/toolchains/llvm/prebuilt/linux-x86_64/sysroot/ --target=$TARGET
done << EOF
Expand Down
795 changes: 452 additions & 343 deletions ndk-sys/src/ffi_aarch64.rs

Large diffs are not rendered by default.

687 changes: 417 additions & 270 deletions ndk-sys/src/ffi_arm.rs

Large diffs are not rendered by default.

633 changes: 407 additions & 226 deletions ndk-sys/src/ffi_i686.rs

Large diffs are not rendered by default.

703 changes: 442 additions & 261 deletions ndk-sys/src/ffi_x86_64.rs

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions ndk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

- ndk/hardware_buffer: Make `HardwareBuffer::as_ptr()` public for interop with Vulkan.
- **Breaking:** `Configuration::country()` now returns `None` when the country is unset (akin to `Configuration::language()`)
- Add `MediaCodec` and `MediaFormat` bindings ([#216](https://github.com/rust-windowing/android-ndk-rs/pull/216))
- Add `MediaCodec` and `MediaFormat` bindings. (#216)
- **Breaking:** Upgrade to [`ndk-sys 0.4.0`](../ndk-sys/CHANGELOG.md#040-TODO-YET-UNRELEASED) and use new `enum` newtype wrappers. (#245)

# 0.6.0 (2022-01-05)

- **Breaking:** Upgrade to `ndk-sys 0.3.0` and migrate to `jni-sys` types that it now directly uses in its bindings.
- **Breaking:** Upgrade to [`ndk-sys 0.3.0`](../ndk-sys/CHANGELOG.md#030-2022-01-05) and migrate to `jni-sys` types that it now directly uses in its bindings.

# 0.5.0 (2021-11-22)

Expand Down
12 changes: 6 additions & 6 deletions ndk/src/bitmap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@ mod temp_allow_deprecated {
#[derive(Copy, Clone, Debug, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
#[allow(non_camel_case_types)]
pub enum BitmapFormat {
NONE = ffi::AndroidBitmapFormat_ANDROID_BITMAP_FORMAT_NONE,
RGBA_8888 = ffi::AndroidBitmapFormat_ANDROID_BITMAP_FORMAT_RGBA_8888,
RGB_565 = ffi::AndroidBitmapFormat_ANDROID_BITMAP_FORMAT_RGB_565,
NONE = ffi::AndroidBitmapFormat::ANDROID_BITMAP_FORMAT_NONE.0,
RGBA_8888 = ffi::AndroidBitmapFormat::ANDROID_BITMAP_FORMAT_RGBA_8888.0,
RGB_565 = ffi::AndroidBitmapFormat::ANDROID_BITMAP_FORMAT_RGB_565.0,
#[deprecated = "Deprecated in API level 13. Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead."]
RGBA_4444 = ffi::AndroidBitmapFormat_ANDROID_BITMAP_FORMAT_RGBA_4444,
A_8 = ffi::AndroidBitmapFormat_ANDROID_BITMAP_FORMAT_A_8,
RGBA_F16 = ffi::AndroidBitmapFormat_ANDROID_BITMAP_FORMAT_RGBA_F16,
RGBA_4444 = ffi::AndroidBitmapFormat::ANDROID_BITMAP_FORMAT_RGBA_4444.0,
A_8 = ffi::AndroidBitmapFormat::ANDROID_BITMAP_FORMAT_A_8.0,
RGBA_F16 = ffi::AndroidBitmapFormat::ANDROID_BITMAP_FORMAT_RGBA_F16.0,
}
}
pub use temp_allow_deprecated::*;
Expand Down
28 changes: 14 additions & 14 deletions ndk/src/hardware_buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,20 +83,20 @@ impl HardwareBufferUsage {
#[derive(Copy, Clone, Debug, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)]
#[allow(non_camel_case_types)]
pub enum HardwareBufferFormat {
R8G8B8A8_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM,
R8G8B8X8_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM,
R8G8B8_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM,
R5G6B5_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM,
R16G16B16A16_FLOAT = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT,
R10G10B10A2_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM,
BLOB = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_BLOB,
D16_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_D16_UNORM,
D24_UNORM = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_D24_UNORM,
D24_UNORM_S8_UINT = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT,
D32_FLOAT = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_D32_FLOAT,
D32_FLOAT_S8_UINT = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT,
S8_UINT = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_S8_UINT,
Y8Cb8Cr8_420 = ffi::AHardwareBuffer_Format_AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420,
R8G8B8A8_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM.0,
R8G8B8X8_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM.0,
R8G8B8_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM.0,
R5G6B5_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM.0,
R16G16B16A16_FLOAT = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT.0,
R10G10B10A2_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM.0,
BLOB = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_BLOB.0,
D16_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_D16_UNORM.0,
D24_UNORM = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_D24_UNORM.0,
D24_UNORM_S8_UINT = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT.0,
D32_FLOAT = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_D32_FLOAT.0,
D32_FLOAT_S8_UINT = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT.0,
S8_UINT = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_S8_UINT.0,
Y8Cb8Cr8_420 = ffi::AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420.0,
}

#[derive(Copy, Clone, Debug, Ord, PartialOrd, Eq, PartialEq)]
Expand Down
114 changes: 57 additions & 57 deletions ndk/src/media/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,77 +4,77 @@ use thiserror::Error;
#[repr(i32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum MediaErrorResult {
CodecErrorInsufficientResource = ffi::media_status_t_AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE,
CodecErrorReclaimed = ffi::media_status_t_AMEDIACODEC_ERROR_RECLAIMED,
ErrorUnknown = ffi::media_status_t_AMEDIA_ERROR_UNKNOWN,
ErrorMalformed = ffi::media_status_t_AMEDIA_ERROR_MALFORMED,
ErrorUnsupported = ffi::media_status_t_AMEDIA_ERROR_UNSUPPORTED,
ErrorInvalidObject = ffi::media_status_t_AMEDIA_ERROR_INVALID_OBJECT,
ErrorInvalidParameter = ffi::media_status_t_AMEDIA_ERROR_INVALID_PARAMETER,
ErrorInvalidOperation = ffi::media_status_t_AMEDIA_ERROR_INVALID_OPERATION,
ErrorEndOfStream = ffi::media_status_t_AMEDIA_ERROR_END_OF_STREAM,
ErrorIo = ffi::media_status_t_AMEDIA_ERROR_IO,
ErrorWouldBlock = ffi::media_status_t_AMEDIA_ERROR_WOULD_BLOCK,
DrmErrorBase = ffi::media_status_t_AMEDIA_DRM_ERROR_BASE,
DrmNotProvisioned = ffi::media_status_t_AMEDIA_DRM_NOT_PROVISIONED,
DrmResourceBusy = ffi::media_status_t_AMEDIA_DRM_RESOURCE_BUSY,
DrmDeviceRevoked = ffi::media_status_t_AMEDIA_DRM_DEVICE_REVOKED,
DrmShortBuffer = ffi::media_status_t_AMEDIA_DRM_SHORT_BUFFER,
DrmSessionNotOpened = ffi::media_status_t_AMEDIA_DRM_SESSION_NOT_OPENED,
DrmTamperDetected = ffi::media_status_t_AMEDIA_DRM_TAMPER_DETECTED,
DrmVerifyFailed = ffi::media_status_t_AMEDIA_DRM_VERIFY_FAILED,
DrmNeedKey = ffi::media_status_t_AMEDIA_DRM_NEED_KEY,
DrmLicenseExpired = ffi::media_status_t_AMEDIA_DRM_LICENSE_EXPIRED,
ImgreaderErrorBase = ffi::media_status_t_AMEDIA_IMGREADER_ERROR_BASE,
ImgreaderNoBufferAvailable = ffi::media_status_t_AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE,
ImgreaderMaxImagesAcquired = ffi::media_status_t_AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED,
ImgreaderCannotLockImage = ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE,
ImgreaderCannotUnlockImage = ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE,
ImgreaderImageNotLocked = ffi::media_status_t_AMEDIA_IMGREADER_IMAGE_NOT_LOCKED,
CodecErrorInsufficientResource = ffi::media_status_t::AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE.0,
CodecErrorReclaimed = ffi::media_status_t::AMEDIACODEC_ERROR_RECLAIMED.0,
ErrorUnknown = ffi::media_status_t::AMEDIA_ERROR_UNKNOWN.0,
ErrorMalformed = ffi::media_status_t::AMEDIA_ERROR_MALFORMED.0,
ErrorUnsupported = ffi::media_status_t::AMEDIA_ERROR_UNSUPPORTED.0,
ErrorInvalidObject = ffi::media_status_t::AMEDIA_ERROR_INVALID_OBJECT.0,
ErrorInvalidParameter = ffi::media_status_t::AMEDIA_ERROR_INVALID_PARAMETER.0,
ErrorInvalidOperation = ffi::media_status_t::AMEDIA_ERROR_INVALID_OPERATION.0,
ErrorEndOfStream = ffi::media_status_t::AMEDIA_ERROR_END_OF_STREAM.0,
ErrorIo = ffi::media_status_t::AMEDIA_ERROR_IO.0,
ErrorWouldBlock = ffi::media_status_t::AMEDIA_ERROR_WOULD_BLOCK.0,
DrmErrorBase = ffi::media_status_t::AMEDIA_DRM_ERROR_BASE.0,
DrmNotProvisioned = ffi::media_status_t::AMEDIA_DRM_NOT_PROVISIONED.0,
DrmResourceBusy = ffi::media_status_t::AMEDIA_DRM_RESOURCE_BUSY.0,
DrmDeviceRevoked = ffi::media_status_t::AMEDIA_DRM_DEVICE_REVOKED.0,
DrmShortBuffer = ffi::media_status_t::AMEDIA_DRM_SHORT_BUFFER.0,
DrmSessionNotOpened = ffi::media_status_t::AMEDIA_DRM_SESSION_NOT_OPENED.0,
DrmTamperDetected = ffi::media_status_t::AMEDIA_DRM_TAMPER_DETECTED.0,
DrmVerifyFailed = ffi::media_status_t::AMEDIA_DRM_VERIFY_FAILED.0,
DrmNeedKey = ffi::media_status_t::AMEDIA_DRM_NEED_KEY.0,
DrmLicenseExpired = ffi::media_status_t::AMEDIA_DRM_LICENSE_EXPIRED.0,
ImgreaderErrorBase = ffi::media_status_t::AMEDIA_IMGREADER_ERROR_BASE.0,
ImgreaderNoBufferAvailable = ffi::media_status_t::AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE.0,
ImgreaderMaxImagesAcquired = ffi::media_status_t::AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED.0,
ImgreaderCannotLockImage = ffi::media_status_t::AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE.0,
ImgreaderCannotUnlockImage = ffi::media_status_t::AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE.0,
ImgreaderImageNotLocked = ffi::media_status_t::AMEDIA_IMGREADER_IMAGE_NOT_LOCKED.0,
}

#[derive(Debug, Error)]
pub enum NdkMediaError {
#[error("error Media result ({0:?})")]
ErrorResult(MediaErrorResult),
#[error("unknown Media error result ({0})")]
UnknownResult(i32),
#[error("unknown Media error result ({0:?})")]
UnknownResult(ffi::media_status_t),
}

impl NdkMediaError {
pub(crate) fn from_status(status: ffi::media_status_t) -> Result<()> {
use MediaErrorResult::*;
let result = match status {
ffi::media_status_t_AMEDIA_OK => return Ok(()),
ffi::media_status_t_AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE => {
ffi::media_status_t::AMEDIA_OK => return Ok(()),
ffi::media_status_t::AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE => {
CodecErrorInsufficientResource
}
ffi::media_status_t_AMEDIACODEC_ERROR_RECLAIMED => CodecErrorReclaimed,
ffi::media_status_t_AMEDIA_ERROR_UNKNOWN => ErrorUnknown,
ffi::media_status_t_AMEDIA_ERROR_MALFORMED => ErrorMalformed,
ffi::media_status_t_AMEDIA_ERROR_UNSUPPORTED => ErrorUnsupported,
ffi::media_status_t_AMEDIA_ERROR_INVALID_OBJECT => ErrorInvalidObject,
ffi::media_status_t_AMEDIA_ERROR_INVALID_PARAMETER => ErrorInvalidParameter,
ffi::media_status_t_AMEDIA_ERROR_INVALID_OPERATION => ErrorInvalidOperation,
ffi::media_status_t_AMEDIA_ERROR_END_OF_STREAM => ErrorEndOfStream,
ffi::media_status_t_AMEDIA_ERROR_IO => ErrorIo,
ffi::media_status_t_AMEDIA_ERROR_WOULD_BLOCK => ErrorWouldBlock,
ffi::media_status_t_AMEDIA_DRM_ERROR_BASE => DrmErrorBase,
ffi::media_status_t_AMEDIA_DRM_NOT_PROVISIONED => DrmNotProvisioned,
ffi::media_status_t_AMEDIA_DRM_RESOURCE_BUSY => DrmResourceBusy,
ffi::media_status_t_AMEDIA_DRM_DEVICE_REVOKED => DrmDeviceRevoked,
ffi::media_status_t_AMEDIA_DRM_SHORT_BUFFER => DrmShortBuffer,
ffi::media_status_t_AMEDIA_DRM_SESSION_NOT_OPENED => DrmSessionNotOpened,
ffi::media_status_t_AMEDIA_DRM_TAMPER_DETECTED => DrmTamperDetected,
ffi::media_status_t_AMEDIA_DRM_VERIFY_FAILED => DrmVerifyFailed,
ffi::media_status_t_AMEDIA_DRM_NEED_KEY => DrmNeedKey,
ffi::media_status_t_AMEDIA_DRM_LICENSE_EXPIRED => DrmLicenseExpired,
ffi::media_status_t_AMEDIA_IMGREADER_ERROR_BASE => ImgreaderErrorBase,
ffi::media_status_t_AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE => ImgreaderNoBufferAvailable,
ffi::media_status_t_AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED => ImgreaderMaxImagesAcquired,
ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE => ImgreaderCannotLockImage,
ffi::media_status_t_AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE => ImgreaderCannotUnlockImage,
ffi::media_status_t_AMEDIA_IMGREADER_IMAGE_NOT_LOCKED => ImgreaderImageNotLocked,
ffi::media_status_t::AMEDIACODEC_ERROR_RECLAIMED => CodecErrorReclaimed,
ffi::media_status_t::AMEDIA_ERROR_UNKNOWN => ErrorUnknown,
ffi::media_status_t::AMEDIA_ERROR_MALFORMED => ErrorMalformed,
ffi::media_status_t::AMEDIA_ERROR_UNSUPPORTED => ErrorUnsupported,
ffi::media_status_t::AMEDIA_ERROR_INVALID_OBJECT => ErrorInvalidObject,
ffi::media_status_t::AMEDIA_ERROR_INVALID_PARAMETER => ErrorInvalidParameter,
ffi::media_status_t::AMEDIA_ERROR_INVALID_OPERATION => ErrorInvalidOperation,
ffi::media_status_t::AMEDIA_ERROR_END_OF_STREAM => ErrorEndOfStream,
ffi::media_status_t::AMEDIA_ERROR_IO => ErrorIo,
ffi::media_status_t::AMEDIA_ERROR_WOULD_BLOCK => ErrorWouldBlock,
ffi::media_status_t::AMEDIA_DRM_ERROR_BASE => DrmErrorBase,
ffi::media_status_t::AMEDIA_DRM_NOT_PROVISIONED => DrmNotProvisioned,
ffi::media_status_t::AMEDIA_DRM_RESOURCE_BUSY => DrmResourceBusy,
ffi::media_status_t::AMEDIA_DRM_DEVICE_REVOKED => DrmDeviceRevoked,
ffi::media_status_t::AMEDIA_DRM_SHORT_BUFFER => DrmShortBuffer,
ffi::media_status_t::AMEDIA_DRM_SESSION_NOT_OPENED => DrmSessionNotOpened,
ffi::media_status_t::AMEDIA_DRM_TAMPER_DETECTED => DrmTamperDetected,
ffi::media_status_t::AMEDIA_DRM_VERIFY_FAILED => DrmVerifyFailed,
ffi::media_status_t::AMEDIA_DRM_NEED_KEY => DrmNeedKey,
ffi::media_status_t::AMEDIA_DRM_LICENSE_EXPIRED => DrmLicenseExpired,
ffi::media_status_t::AMEDIA_IMGREADER_ERROR_BASE => ImgreaderErrorBase,
ffi::media_status_t::AMEDIA_IMGREADER_NO_BUFFER_AVAILABLE => ImgreaderNoBufferAvailable,
ffi::media_status_t::AMEDIA_IMGREADER_MAX_IMAGES_ACQUIRED => ImgreaderMaxImagesAcquired,
ffi::media_status_t::AMEDIA_IMGREADER_CANNOT_LOCK_IMAGE => ImgreaderCannotLockImage,
ffi::media_status_t::AMEDIA_IMGREADER_CANNOT_UNLOCK_IMAGE => ImgreaderCannotUnlockImage,
ffi::media_status_t::AMEDIA_IMGREADER_IMAGE_NOT_LOCKED => ImgreaderImageNotLocked,
_ => return Err(NdkMediaError::UnknownResult(status)),
};
Err(NdkMediaError::ErrorResult(result))
Expand Down
38 changes: 19 additions & 19 deletions ndk/src/media/image_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,23 @@ use crate::hardware_buffer::{HardwareBuffer, HardwareBufferUsage};
#[derive(Copy, Clone, Debug, PartialEq, Eq, TryFromPrimitive, IntoPrimitive)]
#[allow(non_camel_case_types)]
pub enum ImageFormat {
RGBA_8888 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RGBA_8888,
RGBX_8888 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RGBX_8888,
RGB_888 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RGB_888,
RGB_565 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RGB_565,
RGBA_FP16 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RGBA_FP16,
YUV_420_888 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_YUV_420_888,
JPEG = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_JPEG,
RAW16 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RAW16,
RAW_PRIVATE = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RAW_PRIVATE,
RAW10 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RAW10,
RAW12 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_RAW12,
DEPTH16 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_DEPTH16,
DEPTH_POINT_CLOUD = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_DEPTH_POINT_CLOUD,
PRIVATE = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_PRIVATE,
Y8 = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_Y8,
HEIC = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_HEIC,
DEPTH_JPEG = ffi::AIMAGE_FORMATS_AIMAGE_FORMAT_DEPTH_JPEG,
RGBA_8888 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RGBA_8888.0,
RGBX_8888 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RGBX_8888.0,
RGB_888 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RGB_888.0,
RGB_565 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RGB_565.0,
RGBA_FP16 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RGBA_FP16.0,
YUV_420_888 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_YUV_420_888.0,
JPEG = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_JPEG.0,
RAW16 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RAW16.0,
RAW_PRIVATE = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RAW_PRIVATE.0,
RAW10 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RAW10.0,
RAW12 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_RAW12.0,
DEPTH16 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_DEPTH16.0,
DEPTH_POINT_CLOUD = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_DEPTH_POINT_CLOUD.0,
PRIVATE = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_PRIVATE.0,
Y8 = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_Y8.0,
HEIC = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_HEIC.0,
DEPTH_JPEG = ffi::AIMAGE_FORMATS::AIMAGE_FORMAT_DEPTH_JPEG.0,
}

pub type ImageListener = Box<dyn FnMut(&ImageReader)>;
Expand Down Expand Up @@ -174,7 +174,7 @@ impl ImageReader {

pub fn get_format(&self) -> Result<ImageFormat> {
let format = construct(|res| unsafe { ffi::AImageReader_getFormat(self.as_ptr(), res) })?;
Ok((format as ffi::AIMAGE_FORMATS).try_into().unwrap())
Ok((format as u32).try_into().unwrap())
}

pub fn get_max_images(&self) -> Result<i32> {
Expand Down Expand Up @@ -301,7 +301,7 @@ impl Image {

pub fn get_format(&self) -> Result<ImageFormat> {
let format = construct(|res| unsafe { ffi::AImage_getFormat(self.as_ptr(), res) })?;
Ok((format as ffi::AIMAGE_FORMATS).try_into().unwrap())
Ok((format as u32).try_into().unwrap())
}

pub fn get_timestamp(&self) -> Result<i64> {
Expand Down
4 changes: 2 additions & 2 deletions ndk/src/media/media_codec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ impl MediaCodec {
index: result as ffi::size_t,
}))
} else {
NdkMediaError::from_status(result as ffi::media_status_t).map(|()| None)
NdkMediaError::from_status(ffi::media_status_t(result as _)).map(|()| None)
}
}

Expand Down Expand Up @@ -306,7 +306,7 @@ impl MediaCodec {
info,
}))
} else {
NdkMediaError::from_status(result as ffi::media_status_t).map(|()| None)
NdkMediaError::from_status(ffi::media_status_t(result as _)).map(|()| None)
}
}

Expand Down
4 changes: 2 additions & 2 deletions ndk/src/media/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ use std::{mem::MaybeUninit, ptr::NonNull};

pub type Result<T, E = NdkMediaError> = std::result::Result<T, E>;

fn construct<T>(with_ptr: impl FnOnce(*mut T) -> ffi::camera_status_t) -> Result<T> {
fn construct<T>(with_ptr: impl FnOnce(*mut T) -> ffi::media_status_t) -> Result<T> {
let mut result = MaybeUninit::uninit();
let status = with_ptr(result.as_mut_ptr());
NdkMediaError::from_status(status).map(|()| unsafe { result.assume_init() })
}

fn construct_never_null<T>(
with_ptr: impl FnOnce(*mut *mut T) -> ffi::camera_status_t,
with_ptr: impl FnOnce(*mut *mut T) -> ffi::media_status_t,
) -> Result<NonNull<T>> {
let result = construct(with_ptr)?;
let non_null = if cfg!(debug_assertions) {
Expand Down

0 comments on commit d78aee1

Please sign in to comment.