Skip to content

Commit 749abe9

Browse files
authored
[camera_platform_interface] Add setJpegImageQuality method (#11454)
Platform interface changes for adding JPEG compression quality control to the camera plugin. This is the platform interface subset of #11155, split out per the federated plugin contribution process. Fixes flutter/flutter#183229 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
1 parent 3d6b4eb commit 749abe9

6 files changed

Lines changed: 53 additions & 2 deletions

File tree

packages/camera/camera_platform_interface/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
## NEXT
1+
## 2.13.0
22

33
* Updates minimum supported SDK version to Flutter 3.35/Dart 3.9.
4+
* Adds `setJpegImageQuality` for controlling JPEG compression quality.
45

56
## 2.12.0
67

packages/camera/camera_platform_interface/lib/src/method_channel/method_channel_camera.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,15 @@ class MethodChannelCamera extends CameraPlatform {
518518
});
519519
}
520520

521+
@override
522+
Future<void> setJpegImageQuality(int cameraId, int quality) {
523+
assert(quality >= 1 && quality <= 100);
524+
return _channel.invokeMethod<void>('setJpegImageQuality', <String, dynamic>{
525+
'cameraId': cameraId,
526+
'quality': quality,
527+
});
528+
}
529+
521530
@override
522531
Widget buildPreview(int cameraId) {
523532
return Texture(textureId: cameraId);

packages/camera/camera_platform_interface/lib/src/platform_interface/camera_platform.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,4 +347,12 @@ abstract class CameraPlatform extends PlatformInterface {
347347
Future<void> setImageFileFormat(int cameraId, ImageFileFormat format) {
348348
throw UnimplementedError('setImageFileFormat() is not implemented.');
349349
}
350+
351+
/// Sets the JPEG compression quality for still image capture.
352+
///
353+
/// This only applies to images captured in JPEG format.
354+
/// The [quality] must be between 1 (lowest) and 100 (highest).
355+
Future<void> setJpegImageQuality(int cameraId, int quality) {
356+
throw UnimplementedError('setJpegImageQuality() is not implemented.');
357+
}
350358
}

packages/camera/camera_platform_interface/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/camera/camera
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22
55
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
66
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
7-
version: 2.12.0
7+
version: 2.13.0
88

99
environment:
1010
sdk: ^3.9.0

packages/camera/camera_platform_interface/test/camera_platform_interface_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,20 @@ void main() {
520520
},
521521
);
522522

523+
test(
524+
'Default implementation of setJpegImageQuality() should throw unimplemented error',
525+
() {
526+
// Arrange
527+
final cameraPlatform = ExtendsCameraPlatform();
528+
529+
// Act & Assert
530+
expect(
531+
() => cameraPlatform.setJpegImageQuality(1, 50),
532+
throwsUnimplementedError,
533+
);
534+
},
535+
);
536+
523537
test(
524538
'Default implementation of supportsImageStreaming() should return false',
525539
() {

packages/camera/camera_platform_interface/test/method_channel/method_channel_camera_test.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,6 +1302,25 @@ void main() {
13021302
),
13031303
]);
13041304
});
1305+
1306+
test('Should set the image quality', () async {
1307+
// Arrange
1308+
final channel = MethodChannelMock(
1309+
channelName: 'plugins.flutter.io/camera',
1310+
methods: <String, dynamic>{'setJpegImageQuality': null},
1311+
);
1312+
1313+
// Act
1314+
await camera.setJpegImageQuality(cameraId, 50);
1315+
1316+
// Assert
1317+
expect(channel.log, <Matcher>[
1318+
isMethodCall(
1319+
'setJpegImageQuality',
1320+
arguments: <String, Object?>{'cameraId': cameraId, 'quality': 50},
1321+
),
1322+
]);
1323+
});
13051324
});
13061325
});
13071326
}

0 commit comments

Comments
 (0)