diff --git a/packages/camera/camera_platform_interface/CHANGELOG.md b/packages/camera/camera_platform_interface/CHANGELOG.md index fb538d49fd98..fc4a7de9d71e 100644 --- a/packages/camera/camera_platform_interface/CHANGELOG.md +++ b/packages/camera/camera_platform_interface/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.13.0 * Updates minimum supported SDK version to Flutter 3.35/Dart 3.9. +* Adds `setJpegImageQuality` for controlling JPEG compression quality. ## 2.12.0 diff --git a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart index 3652de5861d5..97c4107668f5 100644 --- a/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart +++ b/packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart @@ -518,6 +518,15 @@ class MethodChannelCamera extends CameraPlatform { }); } + @override + Future setJpegImageQuality(int cameraId, int quality) { + assert(quality >= 1 && quality <= 100); + return _channel.invokeMethod('setJpegImageQuality', { + 'cameraId': cameraId, + 'quality': quality, + }); + } + @override Widget buildPreview(int cameraId) { return Texture(textureId: cameraId); diff --git a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart index 152437a73312..192bce8b0134 100644 --- a/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart +++ b/packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart @@ -347,4 +347,12 @@ abstract class CameraPlatform extends PlatformInterface { Future setImageFileFormat(int cameraId, ImageFileFormat format) { throw UnimplementedError('setImageFileFormat() is not implemented.'); } + + /// Sets the JPEG compression quality for still image capture. + /// + /// This only applies to images captured in JPEG format. + /// The [quality] must be between 1 (lowest) and 100 (highest). + Future setJpegImageQuality(int cameraId, int quality) { + throw UnimplementedError('setJpegImageQuality() is not implemented.'); + } } diff --git a/packages/camera/camera_platform_interface/pubspec.yaml b/packages/camera/camera_platform_interface/pubspec.yaml index 3c2a1cbea685..8336114d1837 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.12.0 +version: 2.13.0 environment: sdk: ^3.9.0 diff --git a/packages/camera/camera_platform_interface/test/camera_platform_interface_test.dart b/packages/camera/camera_platform_interface/test/camera_platform_interface_test.dart index 9a9731062fdd..8453772f2441 100644 --- a/packages/camera/camera_platform_interface/test/camera_platform_interface_test.dart +++ b/packages/camera/camera_platform_interface/test/camera_platform_interface_test.dart @@ -520,6 +520,20 @@ void main() { }, ); + test( + 'Default implementation of setJpegImageQuality() should throw unimplemented error', + () { + // Arrange + final cameraPlatform = ExtendsCameraPlatform(); + + // Act & Assert + expect( + () => cameraPlatform.setJpegImageQuality(1, 50), + throwsUnimplementedError, + ); + }, + ); + test( 'Default implementation of supportsImageStreaming() should return false', () { diff --git a/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart b/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart index 15d1c34ef555..a52d725cf442 100644 --- a/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart +++ b/packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart @@ -1302,6 +1302,25 @@ void main() { ), ]); }); + + test('Should set the image quality', () async { + // Arrange + final channel = MethodChannelMock( + channelName: 'plugins.flutter.io/camera', + methods: {'setJpegImageQuality': null}, + ); + + // Act + await camera.setJpegImageQuality(cameraId, 50); + + // Assert + expect(channel.log, [ + isMethodCall( + 'setJpegImageQuality', + arguments: {'cameraId': cameraId, 'quality': 50}, + ), + ]); + }); }); }); }