diff --git a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/barcodescanner/HybridBarcodeScannerSpec.kt b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/barcodescanner/HybridBarcodeScannerSpec.kt index 7b22885b5a..ac23d0cd22 100644 --- a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/barcodescanner/HybridBarcodeScannerSpec.kt +++ b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/barcodescanner/HybridBarcodeScannerSpec.kt @@ -28,17 +28,17 @@ import com.margelo.nitro.core.HybridObject ) abstract class HybridBarcodeScannerSpec: HybridObject() { // Properties - + // Methods @DoNotStrip @Keep abstract fun scanCodes(frame: com.margelo.nitro.camera.HybridFrameSpec): Array - + @DoNotStrip @Keep abstract fun scanCodesAsync(frame: com.margelo.nitro.camera.HybridFrameSpec): Promise> - + @DoNotStrip @Keep abstract fun scanCodesInImageAsync(image: com.margelo.nitro.image.HybridImageSpec): Promise> diff --git a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.cpp b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.cpp index 25d5064bae..dab18e97a2 100644 --- a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.cpp +++ b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.cpp @@ -33,7 +33,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { VisionCameraBarcodeScanner::HybridBarcodeSpec_cxx& swiftPart = swiftWrapper->getSwiftPart(); return swiftPart.toUnsafe(); } - + // pragma MARK: std::shared_ptr std::shared_ptr create_std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_(void* NON_NULL swiftUnsafePointer) noexcept { // Implemented in VisionCamera @@ -43,7 +43,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { // Implemented in VisionCamera return margelo::nitro::camera::bridge::swift::get_std__shared_ptr_HybridFrameSpec_(cppType); } - + // pragma MARK: std::function>& /* result */)> Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec__ create_Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec__(void* NON_NULL swiftClosureWrapper) noexcept { auto swiftClosure = VisionCameraBarcodeScanner::Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec__::fromUnsafe(swiftClosureWrapper); @@ -51,7 +51,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { swiftClosure.call(result); }; } - + // pragma MARK: std::function Func_void_std__exception_ptr create_Func_void_std__exception_ptr(void* NON_NULL swiftClosureWrapper) noexcept { auto swiftClosure = VisionCameraBarcodeScanner::Func_void_std__exception_ptr::fromUnsafe(swiftClosureWrapper); @@ -59,7 +59,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { swiftClosure.call(error); }; } - + // pragma MARK: std::shared_ptr std::shared_ptr create_std__shared_ptr_margelo__nitro__image__HybridImageSpec_(void* NON_NULL swiftUnsafePointer) noexcept { // Implemented in NitroImage @@ -69,7 +69,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { // Implemented in NitroImage return margelo::nitro::image::bridge::swift::get_std__shared_ptr_HybridImageSpec_(cppType); } - + // pragma MARK: std::shared_ptr std::shared_ptr create_std__shared_ptr_HybridBarcodeScannerSpec_(void* NON_NULL swiftUnsafePointer) noexcept { VisionCameraBarcodeScanner::HybridBarcodeScannerSpec_cxx swiftPart = VisionCameraBarcodeScanner::HybridBarcodeScannerSpec_cxx::fromUnsafe(swiftUnsafePointer); @@ -85,7 +85,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { VisionCameraBarcodeScanner::HybridBarcodeScannerSpec_cxx& swiftPart = swiftWrapper->getSwiftPart(); return swiftPart.toUnsafe(); } - + // pragma MARK: std::shared_ptr std::shared_ptr create_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec_(void* NON_NULL swiftUnsafePointer) noexcept { // Implemented in VisionCamera @@ -95,7 +95,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { // Implemented in VisionCamera return margelo::nitro::camera::bridge::swift::get_std__shared_ptr_HybridCameraOutputSpec_(cppType); } - + // pragma MARK: std::shared_ptr std::shared_ptr create_std__shared_ptr_HybridBarcodeScannerFactorySpec_(void* NON_NULL swiftUnsafePointer) noexcept { VisionCameraBarcodeScanner::HybridBarcodeScannerFactorySpec_cxx swiftPart = VisionCameraBarcodeScanner::HybridBarcodeScannerFactorySpec_cxx::fromUnsafe(swiftUnsafePointer); diff --git a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.hpp b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.hpp index e72ddbc10b..6e5b168c8e 100644 --- a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.hpp +++ b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/VisionCameraBarcodeScanner-Swift-Cxx-Bridge.hpp @@ -81,7 +81,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { vector.reserve(size); return vector; } - + // pragma MARK: std::optional /** * Specialized version of `std::optional`. @@ -96,7 +96,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline std::string get_std__optional_std__string_(const std::optional& optional) noexcept { return optional.value(); } - + // pragma MARK: std::optional> /** * Specialized version of `std::optional>`. @@ -111,7 +111,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline std::shared_ptr get_std__optional_std__shared_ptr_ArrayBuffer__(const std::optional>& optional) noexcept { return optional.value(); } - + // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. @@ -119,11 +119,11 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { using std__shared_ptr_HybridBarcodeSpec_ = std::shared_ptr; std::shared_ptr create_std__shared_ptr_HybridBarcodeSpec_(void* NON_NULL swiftUnsafePointer) noexcept; void* NON_NULL get_std__shared_ptr_HybridBarcodeSpec_(std__shared_ptr_HybridBarcodeSpec_ cppType); - + // pragma MARK: std::weak_ptr using std__weak_ptr_HybridBarcodeSpec_ = std::weak_ptr; inline std__weak_ptr_HybridBarcodeSpec_ weakify_std__shared_ptr_HybridBarcodeSpec_(const std::shared_ptr& strong) noexcept { return strong; } - + // pragma MARK: std::vector> /** * Specialized version of `std::vector>`. @@ -134,7 +134,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { vector.reserve(size); return vector; } - + // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. @@ -142,11 +142,11 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { using std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_ = std::shared_ptr; std::shared_ptr create_std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_(void* NON_NULL swiftUnsafePointer) noexcept; void* NON_NULL get_std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_(std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_ cppType); - + // pragma MARK: std::weak_ptr using std__weak_ptr_margelo__nitro__camera__HybridFrameSpec_ = std::weak_ptr; inline std__weak_ptr_margelo__nitro__camera__HybridFrameSpec_ weakify_std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_(const std::shared_ptr& strong) noexcept { return strong; } - + // pragma MARK: std::shared_ptr>>> /** * Specialized version of `std::shared_ptr>>>`. @@ -158,7 +158,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline PromiseHolder>> wrap_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec____(std::shared_ptr>>> promise) noexcept { return PromiseHolder>>(std::move(promise)); } - + // pragma MARK: std::function>& /* result */)> /** * Specialized version of `std::function>&)>`. @@ -180,7 +180,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec___Wrapper wrap_Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec__(Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec__ value) noexcept { return Func_void_std__vector_std__shared_ptr_HybridBarcodeSpec___Wrapper(std::move(value)); } - + // pragma MARK: std::function /** * Specialized version of `std::function`. @@ -202,7 +202,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline Func_void_std__exception_ptr_Wrapper wrap_Func_void_std__exception_ptr(Func_void_std__exception_ptr value) noexcept { return Func_void_std__exception_ptr_Wrapper(std::move(value)); } - + // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. @@ -210,11 +210,11 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { using std__shared_ptr_margelo__nitro__image__HybridImageSpec_ = std::shared_ptr; std::shared_ptr create_std__shared_ptr_margelo__nitro__image__HybridImageSpec_(void* NON_NULL swiftUnsafePointer) noexcept; void* NON_NULL get_std__shared_ptr_margelo__nitro__image__HybridImageSpec_(std__shared_ptr_margelo__nitro__image__HybridImageSpec_ cppType); - + // pragma MARK: std::weak_ptr using std__weak_ptr_margelo__nitro__image__HybridImageSpec_ = std::weak_ptr; inline std__weak_ptr_margelo__nitro__image__HybridImageSpec_ weakify_std__shared_ptr_margelo__nitro__image__HybridImageSpec_(const std::shared_ptr& strong) noexcept { return strong; } - + // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. @@ -222,11 +222,11 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { using std__shared_ptr_HybridBarcodeScannerSpec_ = std::shared_ptr; std::shared_ptr create_std__shared_ptr_HybridBarcodeScannerSpec_(void* NON_NULL swiftUnsafePointer) noexcept; void* NON_NULL get_std__shared_ptr_HybridBarcodeScannerSpec_(std__shared_ptr_HybridBarcodeScannerSpec_ cppType); - + // pragma MARK: std::weak_ptr using std__weak_ptr_HybridBarcodeScannerSpec_ = std::weak_ptr; inline std__weak_ptr_HybridBarcodeScannerSpec_ weakify_std__shared_ptr_HybridBarcodeScannerSpec_(const std::shared_ptr& strong) noexcept { return strong; } - + // pragma MARK: Result>> using Result_std__vector_std__shared_ptr_HybridBarcodeSpec___ = Result>>; inline Result_std__vector_std__shared_ptr_HybridBarcodeSpec___ create_Result_std__vector_std__shared_ptr_HybridBarcodeSpec___(const std::vector>& value) noexcept { @@ -235,7 +235,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline Result_std__vector_std__shared_ptr_HybridBarcodeSpec___ create_Result_std__vector_std__shared_ptr_HybridBarcodeSpec___(const std::exception_ptr& error) noexcept { return Result>>::withError(error); } - + // pragma MARK: Result>>>> using Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____ = Result>>>>; inline Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____ create_Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____(const std::shared_ptr>>>& value) noexcept { @@ -244,7 +244,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____ create_Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____(const std::exception_ptr& error) noexcept { return Result>>>>::withError(error); } - + // pragma MARK: std::vector /** * Specialized version of `std::vector`. @@ -255,7 +255,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { vector.reserve(size); return vector; } - + // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. @@ -263,11 +263,11 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { using std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec_ = std::shared_ptr; std::shared_ptr create_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec_(void* NON_NULL swiftUnsafePointer) noexcept; void* NON_NULL get_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec_(std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec_ cppType); - + // pragma MARK: std::weak_ptr using std__weak_ptr_margelo__nitro__camera__HybridCameraOutputSpec_ = std::weak_ptr; inline std__weak_ptr_margelo__nitro__camera__HybridCameraOutputSpec_ weakify_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec_(const std::shared_ptr& strong) noexcept { return strong; } - + // pragma MARK: std::optional /** * Specialized version of `std::optional`. @@ -282,7 +282,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline BarcodeScannerOutputResolution get_std__optional_BarcodeScannerOutputResolution_(const std::optional& optional) noexcept { return optional.value(); } - + // pragma MARK: std::shared_ptr /** * Specialized version of `std::shared_ptr`. @@ -290,11 +290,11 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { using std__shared_ptr_HybridBarcodeScannerFactorySpec_ = std::shared_ptr; std::shared_ptr create_std__shared_ptr_HybridBarcodeScannerFactorySpec_(void* NON_NULL swiftUnsafePointer) noexcept; void* NON_NULL get_std__shared_ptr_HybridBarcodeScannerFactorySpec_(std__shared_ptr_HybridBarcodeScannerFactorySpec_ cppType); - + // pragma MARK: std::weak_ptr using std__weak_ptr_HybridBarcodeScannerFactorySpec_ = std::weak_ptr; inline std__weak_ptr_HybridBarcodeScannerFactorySpec_ weakify_std__shared_ptr_HybridBarcodeScannerFactorySpec_(const std::shared_ptr& strong) noexcept { return strong; } - + // pragma MARK: Result> using Result_std__shared_ptr_HybridBarcodeScannerSpec__ = Result>; inline Result_std__shared_ptr_HybridBarcodeScannerSpec__ create_Result_std__shared_ptr_HybridBarcodeScannerSpec__(const std::shared_ptr& value) noexcept { @@ -303,7 +303,7 @@ namespace margelo::nitro::camera::barcodescanner::bridge::swift { inline Result_std__shared_ptr_HybridBarcodeScannerSpec__ create_Result_std__shared_ptr_HybridBarcodeScannerSpec__(const std::exception_ptr& error) noexcept { return Result>::withError(error); } - + // pragma MARK: Result> using Result_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec__ = Result>; inline Result_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec__ create_Result_std__shared_ptr_margelo__nitro__camera__HybridCameraOutputSpec__(const std::shared_ptr& value) noexcept { diff --git a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/swift/HybridBarcodeScannerSpec_cxx.swift b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/swift/HybridBarcodeScannerSpec_cxx.swift index 94b4f338e6..5385d7de06 100644 --- a/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/swift/HybridBarcodeScannerSpec_cxx.swift +++ b/packages/react-native-vision-camera-barcode-scanner/nitrogen/generated/ios/swift/HybridBarcodeScannerSpec_cxx.swift @@ -86,7 +86,7 @@ open class HybridBarcodeScannerSpec_cxx { } } - + /** * Get the memory size of the Swift class (plus size of any other allocations) @@ -123,7 +123,7 @@ open class HybridBarcodeScannerSpec_cxx { } // Properties - + // Methods @inline(__always) @@ -150,7 +150,7 @@ open class HybridBarcodeScannerSpec_cxx { return bridge.create_Result_std__vector_std__shared_ptr_HybridBarcodeSpec___(__exceptionPtr) } } - + @inline(__always) public final func scanCodesAsync(frame: bridge.std__shared_ptr_margelo__nitro__camera__HybridFrameSpec_) -> bridge.Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____ { do { @@ -182,7 +182,7 @@ open class HybridBarcodeScannerSpec_cxx { return bridge.create_Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____(__exceptionPtr) } } - + @inline(__always) public final func scanCodesInImageAsync(image: bridge.std__shared_ptr_margelo__nitro__image__HybridImageSpec_) -> bridge.Result_std__shared_ptr_Promise_std__vector_std__shared_ptr_HybridBarcodeSpec_____ { do { diff --git a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/Camera2CameraInfo+getPixelFormats.kt b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/Camera2CameraInfo+getPixelFormats.kt index 803155ac26..b2e0bc8ba9 100644 --- a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/Camera2CameraInfo+getPixelFormats.kt +++ b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/Camera2CameraInfo+getPixelFormats.kt @@ -5,6 +5,7 @@ import androidx.annotation.OptIn import androidx.camera.camera2.interop.Camera2CameraInfo import com.margelo.nitro.camera.PixelFormat import com.margelo.nitro.camera.extensions.converters.fromImageFormat +import com.margelo.nitro.camera.utils.PixelRange @OptIn(androidx.camera.camera2.interop.ExperimentalCamera2Interop::class) fun Camera2CameraInfo.getPixelFormats(): Array { @@ -12,7 +13,7 @@ fun Camera2CameraInfo.getPixelFormats(): Array { this.getCameraCharacteristic(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP) ?: return emptyArray() return streams.outputFormats - .map { PixelFormat.fromImageFormat(it) } + .map { PixelFormat.fromImageFormat(it, PixelRange.UNKNOWN) } .distinct() .toTypedArray() } diff --git a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/ImageProxy+pixelFormat.kt b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/ImageProxy+pixelFormat.kt index 2508f53a71..276d7d68a3 100644 --- a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/ImageProxy+pixelFormat.kt +++ b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/ImageProxy+pixelFormat.kt @@ -1,13 +1,39 @@ package com.margelo.nitro.camera.extensions +import android.annotation.SuppressLint import android.graphics.ImageFormat +import android.hardware.DataSpace +import android.os.Build +import androidx.annotation.OptIn +import androidx.camera.core.ExperimentalGetImage import androidx.camera.core.ImageProxy import com.margelo.nitro.camera.DepthPixelFormat import com.margelo.nitro.camera.PixelFormat import com.margelo.nitro.camera.extensions.converters.fromImageFormat +import com.margelo.nitro.camera.utils.PixelRange + +private val ImageProxy.pixelRange: PixelRange + @SuppressLint("WrongConstant") + @OptIn(ExperimentalGetImage::class) + get() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + return PixelRange.UNKNOWN + } + + val dataSpace = image?.dataSpace ?: return PixelRange.UNKNOWN + val range = DataSpace.getRange(dataSpace) + return when (range) { + DataSpace.RANGE_LIMITED -> PixelRange.VIDEO + DataSpace.RANGE_FULL -> PixelRange.FULL + DataSpace.RANGE_EXTENDED -> PixelRange.EXTENDED + else -> PixelRange.UNKNOWN + } + } val ImageProxy.pixelFormat: PixelFormat - get() = PixelFormat.fromImageFormat(format) + get() { + return PixelFormat.fromImageFormat(format, pixelRange) + } val ImageProxy.depthPixelFormat: DepthPixelFormat get() { diff --git a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/converters/PixelFormat+fromImageFormat.kt b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/converters/PixelFormat+fromImageFormat.kt index 67d9261f4c..34118efcd6 100644 --- a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/converters/PixelFormat+fromImageFormat.kt +++ b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/extensions/converters/PixelFormat+fromImageFormat.kt @@ -2,18 +2,47 @@ package com.margelo.nitro.camera.extensions.converters import android.graphics.ImageFormat import com.margelo.nitro.camera.PixelFormat +import com.margelo.nitro.camera.utils.PixelRange -fun PixelFormat.Companion.fromImageFormat(imageFormat: Int): PixelFormat { +fun PixelFormat.Companion.fromImageFormat( + imageFormat: Int, + range: PixelRange, +): PixelFormat { return when (imageFormat) { ImageFormat.FLEX_RGB_888 -> PixelFormat.RGB_RGB_8_BIT ImageFormat.FLEX_RGBA_8888 -> PixelFormat.RGB_RGBA_8_BIT ImageFormat.DEPTH16 -> PixelFormat.DEPTH_16_BIT ImageFormat.DEPTH_POINT_CLOUD -> PixelFormat.DEPTH_POINT_CLOUD_32_BIT - ImageFormat.YUV_420_888 -> PixelFormat.YUV_420_8_BIT_VIDEO - ImageFormat.YUV_422_888 -> PixelFormat.YUV_422_8_BIT_VIDEO - ImageFormat.YUV_444_888 -> PixelFormat.YUV_444_8_BIT_VIDEO - ImageFormat.YCBCR_P010 -> PixelFormat.YUV_420_10_BIT_VIDEO - ImageFormat.YCBCR_P210 -> PixelFormat.YUV_422_10_BIT_VIDEO + ImageFormat.YUV_420_888 -> { + when (range) { + PixelRange.VIDEO -> PixelFormat.YUV_420_8_BIT_VIDEO + else -> PixelFormat.YUV_420_8_BIT_FULL + } + } + ImageFormat.YUV_422_888 -> { + when (range) { + PixelRange.VIDEO -> PixelFormat.YUV_422_8_BIT_VIDEO + else -> PixelFormat.YUV_422_8_BIT_FULL + } + } + ImageFormat.YUV_444_888 -> { + when (range) { + PixelRange.VIDEO -> PixelFormat.YUV_444_8_BIT_VIDEO + else -> PixelFormat.YUV_444_8_BIT_FULL + } + } + ImageFormat.YCBCR_P010 -> { + when (range) { + PixelRange.VIDEO -> PixelFormat.YUV_420_10_BIT_VIDEO + else -> PixelFormat.YUV_420_10_BIT_FULL + } + } + ImageFormat.YCBCR_P210 -> { + when (range) { + PixelRange.VIDEO -> PixelFormat.YUV_422_10_BIT_VIDEO + else -> PixelFormat.YUV_422_10_BIT_FULL + } + } ImageFormat.PRIVATE -> PixelFormat.PRIVATE else -> PixelFormat.UNKNOWN } diff --git a/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/utils/PixelRange.kt b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/utils/PixelRange.kt new file mode 100644 index 0000000000..363c684677 --- /dev/null +++ b/packages/react-native-vision-camera/android/src/main/java/com/margelo/nitro/camera/utils/PixelRange.kt @@ -0,0 +1,8 @@ +package com.margelo.nitro.camera.utils + +enum class PixelRange { + VIDEO, + FULL, + EXTENDED, + UNKNOWN, +} diff --git a/packages/react-native-vision-camera/ios/Extensions/Converters/AV+PixelFormat.swift b/packages/react-native-vision-camera/ios/Extensions/Converters/AV+PixelFormat.swift index f0c61086a4..140bf37eb7 100644 --- a/packages/react-native-vision-camera/ios/Extensions/Converters/AV+PixelFormat.swift +++ b/packages/react-native-vision-camera/ios/Extensions/Converters/AV+PixelFormat.swift @@ -42,6 +42,8 @@ extension PixelFormat { self = .yuv42210BitFull case .yuv4448BitVideo: self = .yuv4448BitVideo + case .yuv4448BitFull: + self = .yuv4448BitFull case .rgbBgra8Bit: self = .rgbBgra8Bit case .rgbRgba8Bit: diff --git a/packages/react-native-vision-camera/ios/Extensions/CoreMedia/CMFormatDescription.MediaSubType+hidden.swift b/packages/react-native-vision-camera/ios/Extensions/CoreMedia/CMFormatDescription.MediaSubType+hidden.swift index d524eda6cf..4219fccf82 100644 --- a/packages/react-native-vision-camera/ios/Extensions/CoreMedia/CMFormatDescription.MediaSubType+hidden.swift +++ b/packages/react-native-vision-camera/ios/Extensions/CoreMedia/CMFormatDescription.MediaSubType+hidden.swift @@ -43,6 +43,8 @@ extension CMFormatDescription.MediaSubType { // YUV 4:4:4 8-Bit static let yuv4448BitVideo = CMFormatDescription.MediaSubType( rawValue: kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange) + static let yuv4448BitFull = CMFormatDescription.MediaSubType( + rawValue: kCVPixelFormatType_444YpCbCr8BiPlanarFullRange) // BGRA static let rgbBgra8Bit = CMFormatDescription.MediaSubType(rawValue: kCVPixelFormatType_32BGRA) diff --git a/packages/react-native-vision-camera/nitrogen/generated/android/c++/JPixelFormat.hpp b/packages/react-native-vision-camera/nitrogen/generated/android/c++/JPixelFormat.hpp index 4bbe4b9ab6..fd8f9aef30 100644 --- a/packages/react-native-vision-camera/nitrogen/generated/android/c++/JPixelFormat.hpp +++ b/packages/react-native-vision-camera/nitrogen/generated/android/c++/JPixelFormat.hpp @@ -72,6 +72,9 @@ namespace margelo::nitro::camera { case PixelFormat::YUV_444_8_BIT_VIDEO: static const auto fieldYUV_444_8_BIT_VIDEO = clazz->getStaticField("YUV_444_8_BIT_VIDEO"); return clazz->getStaticFieldValue(fieldYUV_444_8_BIT_VIDEO); + case PixelFormat::YUV_444_8_BIT_FULL: + static const auto fieldYUV_444_8_BIT_FULL = clazz->getStaticField("YUV_444_8_BIT_FULL"); + return clazz->getStaticFieldValue(fieldYUV_444_8_BIT_FULL); case PixelFormat::RGB_BGRA_8_BIT: static const auto fieldRGB_BGRA_8_BIT = clazz->getStaticField("RGB_BGRA_8_BIT"); return clazz->getStaticFieldValue(fieldRGB_BGRA_8_BIT); diff --git a/packages/react-native-vision-camera/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/PixelFormat.kt b/packages/react-native-vision-camera/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/PixelFormat.kt index 6d38cef9bf..89419a9722 100644 --- a/packages/react-native-vision-camera/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/PixelFormat.kt +++ b/packages/react-native-vision-camera/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/PixelFormat.kt @@ -26,17 +26,18 @@ enum class PixelFormat(@DoNotStrip @Keep val value: Int) { YUV_422_10_BIT_VIDEO(7), YUV_422_10_BIT_FULL(8), YUV_444_8_BIT_VIDEO(9), - RGB_BGRA_8_BIT(10), - RGB_RGBA_8_BIT(11), - RGB_RGB_8_BIT(12), - RAW_BAYER_PACKED96_12_BIT(13), - RAW_BAYER_UNPACKED_16_BIT(14), - DEPTH_16_BIT(15), - DEPTH_32_BIT(16), - DEPTH_POINT_CLOUD_32_BIT(17), - DISPARITY_16_BIT(18), - DISPARITY_32_BIT(19), - PRIVATE(20); + YUV_444_8_BIT_FULL(10), + RGB_BGRA_8_BIT(11), + RGB_RGBA_8_BIT(12), + RGB_RGB_8_BIT(13), + RAW_BAYER_PACKED96_12_BIT(14), + RAW_BAYER_UNPACKED_16_BIT(15), + DEPTH_16_BIT(16), + DEPTH_32_BIT(17), + DEPTH_POINT_CLOUD_32_BIT(18), + DISPARITY_16_BIT(19), + DISPARITY_32_BIT(20), + PRIVATE(21); companion object } diff --git a/packages/react-native-vision-camera/nitrogen/generated/ios/swift/PixelFormat.swift b/packages/react-native-vision-camera/nitrogen/generated/ios/swift/PixelFormat.swift index 97d880c77a..c5dbf2268a 100644 --- a/packages/react-native-vision-camera/nitrogen/generated/ios/swift/PixelFormat.swift +++ b/packages/react-native-vision-camera/nitrogen/generated/ios/swift/PixelFormat.swift @@ -37,6 +37,8 @@ public extension PixelFormat { self = .yuv42210BitFull case "yuv-444-8-bit-video": self = .yuv4448BitVideo + case "yuv-444-8-bit-full": + self = .yuv4448BitFull case "rgb-bgra-8-bit": self = .rgbBgra8Bit case "rgb-rgba-8-bit": @@ -89,6 +91,8 @@ public extension PixelFormat { return "yuv-422-10-bit-full" case .yuv4448BitVideo: return "yuv-444-8-bit-video" + case .yuv4448BitFull: + return "yuv-444-8-bit-full" case .rgbBgra8Bit: return "rgb-bgra-8-bit" case .rgbRgba8Bit: diff --git a/packages/react-native-vision-camera/nitrogen/generated/shared/c++/PixelFormat.hpp b/packages/react-native-vision-camera/nitrogen/generated/shared/c++/PixelFormat.hpp index 658d6985db..4302debec1 100644 --- a/packages/react-native-vision-camera/nitrogen/generated/shared/c++/PixelFormat.hpp +++ b/packages/react-native-vision-camera/nitrogen/generated/shared/c++/PixelFormat.hpp @@ -39,17 +39,18 @@ namespace margelo::nitro::camera { YUV_422_10_BIT_VIDEO SWIFT_NAME(yuv42210BitVideo) = 7, YUV_422_10_BIT_FULL SWIFT_NAME(yuv42210BitFull) = 8, YUV_444_8_BIT_VIDEO SWIFT_NAME(yuv4448BitVideo) = 9, - RGB_BGRA_8_BIT SWIFT_NAME(rgbBgra8Bit) = 10, - RGB_RGBA_8_BIT SWIFT_NAME(rgbRgba8Bit) = 11, - RGB_RGB_8_BIT SWIFT_NAME(rgbRgb8Bit) = 12, - RAW_BAYER_PACKED96_12_BIT SWIFT_NAME(rawBayerPacked9612Bit) = 13, - RAW_BAYER_UNPACKED_16_BIT SWIFT_NAME(rawBayerUnpacked16Bit) = 14, - DEPTH_16_BIT SWIFT_NAME(depth16Bit) = 15, - DEPTH_32_BIT SWIFT_NAME(depth32Bit) = 16, - DEPTH_POINT_CLOUD_32_BIT SWIFT_NAME(depthPointCloud32Bit) = 17, - DISPARITY_16_BIT SWIFT_NAME(disparity16Bit) = 18, - DISPARITY_32_BIT SWIFT_NAME(disparity32Bit) = 19, - PRIVATE SWIFT_NAME(private) = 20, + YUV_444_8_BIT_FULL SWIFT_NAME(yuv4448BitFull) = 10, + RGB_BGRA_8_BIT SWIFT_NAME(rgbBgra8Bit) = 11, + RGB_RGBA_8_BIT SWIFT_NAME(rgbRgba8Bit) = 12, + RGB_RGB_8_BIT SWIFT_NAME(rgbRgb8Bit) = 13, + RAW_BAYER_PACKED96_12_BIT SWIFT_NAME(rawBayerPacked9612Bit) = 14, + RAW_BAYER_UNPACKED_16_BIT SWIFT_NAME(rawBayerUnpacked16Bit) = 15, + DEPTH_16_BIT SWIFT_NAME(depth16Bit) = 16, + DEPTH_32_BIT SWIFT_NAME(depth32Bit) = 17, + DEPTH_POINT_CLOUD_32_BIT SWIFT_NAME(depthPointCloud32Bit) = 18, + DISPARITY_16_BIT SWIFT_NAME(disparity16Bit) = 19, + DISPARITY_32_BIT SWIFT_NAME(disparity32Bit) = 20, + PRIVATE SWIFT_NAME(private) = 21, } CLOSED_ENUM; } // namespace margelo::nitro::camera @@ -72,6 +73,7 @@ namespace margelo::nitro { case hashString("yuv-422-10-bit-video"): return margelo::nitro::camera::PixelFormat::YUV_422_10_BIT_VIDEO; case hashString("yuv-422-10-bit-full"): return margelo::nitro::camera::PixelFormat::YUV_422_10_BIT_FULL; case hashString("yuv-444-8-bit-video"): return margelo::nitro::camera::PixelFormat::YUV_444_8_BIT_VIDEO; + case hashString("yuv-444-8-bit-full"): return margelo::nitro::camera::PixelFormat::YUV_444_8_BIT_FULL; case hashString("rgb-bgra-8-bit"): return margelo::nitro::camera::PixelFormat::RGB_BGRA_8_BIT; case hashString("rgb-rgba-8-bit"): return margelo::nitro::camera::PixelFormat::RGB_RGBA_8_BIT; case hashString("rgb-rgb-8-bit"): return margelo::nitro::camera::PixelFormat::RGB_RGB_8_BIT; @@ -99,6 +101,7 @@ namespace margelo::nitro { case margelo::nitro::camera::PixelFormat::YUV_422_10_BIT_VIDEO: return JSIConverter::toJSI(runtime, "yuv-422-10-bit-video"); case margelo::nitro::camera::PixelFormat::YUV_422_10_BIT_FULL: return JSIConverter::toJSI(runtime, "yuv-422-10-bit-full"); case margelo::nitro::camera::PixelFormat::YUV_444_8_BIT_VIDEO: return JSIConverter::toJSI(runtime, "yuv-444-8-bit-video"); + case margelo::nitro::camera::PixelFormat::YUV_444_8_BIT_FULL: return JSIConverter::toJSI(runtime, "yuv-444-8-bit-full"); case margelo::nitro::camera::PixelFormat::RGB_BGRA_8_BIT: return JSIConverter::toJSI(runtime, "rgb-bgra-8-bit"); case margelo::nitro::camera::PixelFormat::RGB_RGBA_8_BIT: return JSIConverter::toJSI(runtime, "rgb-rgba-8-bit"); case margelo::nitro::camera::PixelFormat::RGB_RGB_8_BIT: return JSIConverter::toJSI(runtime, "rgb-rgb-8-bit"); @@ -131,6 +134,7 @@ namespace margelo::nitro { case hashString("yuv-422-10-bit-video"): case hashString("yuv-422-10-bit-full"): case hashString("yuv-444-8-bit-video"): + case hashString("yuv-444-8-bit-full"): case hashString("rgb-bgra-8-bit"): case hashString("rgb-rgba-8-bit"): case hashString("rgb-rgb-8-bit"): diff --git a/packages/react-native-vision-camera/src/specs/common-types/VideoPixelFormat.ts b/packages/react-native-vision-camera/src/specs/common-types/VideoPixelFormat.ts index 94e4e9aa31..e358a61d78 100644 --- a/packages/react-native-vision-camera/src/specs/common-types/VideoPixelFormat.ts +++ b/packages/react-native-vision-camera/src/specs/common-types/VideoPixelFormat.ts @@ -18,6 +18,7 @@ import type { PixelFormat } from './PixelFormat' * | `yuv-422-10-bit-video` | YUV | 4:2:2 | 10-bit | Video | Planar | * | `yuv-422-10-bit-full` | YUV | 4:2:2 | 10-bit | Full | Planar | * | `yuv-444-8-bit-video` | YUV | 4:4:4 | 8-bit | Video | Planar | + * | `yuv-444-8-bit-full` | YUV | 4:4:4 | 8-bit | Full | Planar | * | `rgb-bgra-8-bit` | RGB | 4:4:4 | 8-bit | Full | Interleaved BGRA | * | `rgb-rgba-8-bit` | RGB | 4:4:4 | 8-bit | Full | Interleaved RGBA | * | `rgb-rgb-8-bit` | RGB | 4:4:4 | 8-bit | Full | Interleaved RGB | @@ -35,6 +36,7 @@ export type VideoPixelFormat = | 'yuv-422-10-bit-video' | 'yuv-422-10-bit-full' | 'yuv-444-8-bit-video' + | 'yuv-444-8-bit-full' | 'rgb-bgra-8-bit' | 'rgb-rgba-8-bit' | 'rgb-rgb-8-bit'