Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion packages/camera/camera_platform_interface/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,14 @@ class MethodChannelCamera extends CameraPlatform {
});
}

@override
Future<void> setJpegImageQuality(int cameraId, int quality) {
return _channel.invokeMethod<void>('setJpegImageQuality', <String, dynamic>{
'cameraId': cameraId,
'quality': quality,
});
}

@override
Widget buildPreview(int cameraId) {
return Texture(textureId: cameraId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,4 +347,12 @@ abstract class CameraPlatform extends PlatformInterface {
Future<void> 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<void> setJpegImageQuality(int cameraId, int quality) {
throw UnimplementedError('setJpegImageQuality() is not implemented.');
}
}
2 changes: 1 addition & 1 deletion packages/camera/camera_platform_interface/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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',
() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1302,6 +1302,25 @@ void main() {
),
]);
});

test('Should set the image quality', () async {
// Arrange
final channel = MethodChannelMock(
channelName: 'plugins.flutter.io/camera',
methods: <String, dynamic>{'setJpegImageQuality': null},
);

// Act
await camera.setJpegImageQuality(cameraId, 50);

// Assert
expect(channel.log, <Matcher>[
isMethodCall(
'setJpegImageQuality',
arguments: <String, Object?>{'cameraId': cameraId, 'quality': 50},
),
]);
});
});
});
}