diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index 889501a04383..5417669c2079 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.14.0 +* Adds `rgba8888` to `ImageFormatGroup` enum. * Updates minimum supported SDK version to Flutter 3.38/Dart 3.10. ## 2.13.0 diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/type_conversion.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/type_conversion.dart index 457d7d00ccb4..a402986ffd2c 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/type_conversion.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/type_conversion.dart @@ -37,6 +37,8 @@ ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) { return ImageFormatGroup.yuv420; case 256: // android.graphics.ImageFormat.JPEG return ImageFormatGroup.jpeg; + case 1: // android.graphics.PixelFormat.RGBA_8888 + return ImageFormatGroup.rgba8888; } } @@ -47,6 +49,9 @@ ImageFormatGroup _imageFormatGroupFromPlatformData(dynamic data) { case 1111970369: // kCVPixelFormatType_32BGRA return ImageFormatGroup.bgra8888; + + case 1380401729: // kCVPixelFormatType_32RGBA + return ImageFormatGroup.rgba8888; } } diff --git a/packages/camera/camera_platform_interface/lib/src/types/image_format_group.dart b/packages/camera/camera_platform_interface/lib/src/types/image_format_group.dart index 04974ec8bd57..c39ecd16f720 100644 --- a/packages/camera/camera_platform_interface/lib/src/types/image_format_group.dart +++ b/packages/camera/camera_platform_interface/lib/src/types/image_format_group.dart @@ -37,6 +37,15 @@ enum ImageFormatGroup { /// On Android, this is `android.graphics.ImageFormat.NV21`. See /// https://developer.android.com/reference/android/graphics/ImageFormat#NV21 nv21, + + /// 32-bit RGBA. + /// + /// On Android, this is `android.graphics.PixelFormat.RGBA_8888`. See + /// https://developer.android.com/reference/android/graphics/PixelFormat#RGBA_8888 + /// + /// On iOS, this is `kCVPixelFormatType_32RGBA`. See + /// https://developer.apple.com/documentation/corevideo/1563591-pixel_format_identifiers/kcvpixelformattype_32rgba?language=objc + rgba8888, } /// Extension on [ImageFormatGroup] to stringify the enum @@ -54,6 +63,8 @@ extension ImageFormatGroupName on ImageFormatGroup { return 'jpeg'; case ImageFormatGroup.nv21: return 'nv21'; + case ImageFormatGroup.rgba8888: + return 'rgba8888'; case ImageFormatGroup.unknown: return 'unknown'; } diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 804bead11e33..6102c20a7fd4 100644 --- a/packages/camera/camera_platform_interface/pubspec.yaml +++ b/packages/camera/camera_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/camera/camera issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.13.0 +version: 2.14.0 environment: sdk: ^3.10.0 diff --git a/packages/camera/camera_platform_interface/test/method_channel/type_conversion_test.dart b/packages/camera/camera_platform_interface/test/method_channel/type_conversion_test.dart index 5e578b97b4e5..7e4819d81a00 100644 --- a/packages/camera/camera_platform_interface/test/method_channel/type_conversion_test.dart +++ b/packages/camera/camera_platform_interface/test/method_channel/type_conversion_test.dart @@ -83,4 +83,54 @@ void main() { ); expect(cameraImage.format.group, ImageFormatGroup.yuv420); }); + + test('$CameraImageData has ImageFormatGroup.rgba8888 for Android', () { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + + final CameraImageData cameraImage = cameraImageFromPlatformData( + { + 'format': 1, + 'height': 1, + 'width': 4, + 'lensAperture': 1.8, + 'sensorExposureTime': 9991324, + 'sensorSensitivity': 92.0, + 'planes': [ + { + 'bytes': Uint8List.fromList([1, 2, 3, 4]), + 'bytesPerPixel': 1, + 'bytesPerRow': 4, + 'height': 1, + 'width': 4, + }, + ], + }, + ); + expect(cameraImage.format.group, ImageFormatGroup.rgba8888); + }); + + test('$CameraImageData has ImageFormatGroup.rgba8888 for iOS', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final CameraImageData cameraImage = cameraImageFromPlatformData( + { + 'format': 1380401729, + 'height': 1, + 'width': 4, + 'lensAperture': 1.8, + 'sensorExposureTime': 9991324, + 'sensorSensitivity': 92.0, + 'planes': [ + { + 'bytes': Uint8List.fromList([1, 2, 3, 4]), + 'bytesPerPixel': 1, + 'bytesPerRow': 4, + 'height': 1, + 'width': 4, + }, + ], + }, + ); + expect(cameraImage.format.group, ImageFormatGroup.rgba8888); + }); } diff --git a/packages/camera/camera_platform_interface/test/types/image_group_test.dart b/packages/camera/camera_platform_interface/test/types/image_group_test.dart index c6ba9f2cb73e..89dc491498e3 100644 --- a/packages/camera/camera_platform_interface/test/types/image_group_test.dart +++ b/packages/camera/camera_platform_interface/test/types/image_group_test.dart @@ -12,6 +12,7 @@ void main() { expect(ImageFormatGroup.yuv420.name(), 'yuv420'); expect(ImageFormatGroup.jpeg.name(), 'jpeg'); expect(ImageFormatGroup.nv21.name(), 'nv21'); + expect(ImageFormatGroup.rgba8888.name(), 'rgba8888'); expect(ImageFormatGroup.unknown.name(), 'unknown'); }); });