diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md
index 1d2e9c665c5..61aff809f22 100644
--- a/packages/camera/camera_android_camerax/CHANGELOG.md
+++ b/packages/camera/camera_android_camerax/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.0+17
+
+* Implements resolution configuration for all camera use cases.
+
## 0.5.0+16
* Adds pub topics to package metadata.
diff --git a/packages/camera/camera_android_camerax/README.md b/packages/camera/camera_android_camerax/README.md
index dd6e5633880..1642b815690 100644
--- a/packages/camera/camera_android_camerax/README.md
+++ b/packages/camera/camera_android_camerax/README.md
@@ -24,16 +24,18 @@ dependencies:
## Missing features and limitations
-### Resolution configuration \[[Issue #120462][120462]\]
-Any specified `ResolutionPreset` wll go unused in favor of CameraX defaults and
-`onCameraResolutionChanged` is unimplemented.
+### 240p resolution configuration for video recording
+
+240p resolution configuration for video recording is unsupported by CameraX,
+and thus, the plugin will fall back to 480p if configured with a
+`ResolutionPreset`.
### Locking/Unlocking capture orientation \[[Issue #125915][125915]\]
`lockCaptureOrientation` & `unLockCaptureOrientation` are unimplemented.
-### Flash mode configuration \[[Issue #120715][120715]\]
+### Torch mode \[[Issue #120715][120715]\]
Calling `setFlashMode` with mode `FlashMode.torch` currently does nothing.
diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FallbackStrategyHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FallbackStrategyHostApiImpl.java
index 0309d5476a0..da9f58a3f71 100644
--- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FallbackStrategyHostApiImpl.java
+++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/FallbackStrategyHostApiImpl.java
@@ -9,7 +9,7 @@
import androidx.camera.video.FallbackStrategy;
import androidx.camera.video.Quality;
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.FallbackStrategyHostApi;
-import io.flutter.plugins.camerax.GeneratedCameraXLibrary.VideoQualityConstraint;
+import io.flutter.plugins.camerax.GeneratedCameraXLibrary.VideoQuality;
import io.flutter.plugins.camerax.GeneratedCameraXLibrary.VideoResolutionFallbackRule;
/**
@@ -28,20 +28,18 @@ public class FallbackStrategyHostApiImpl implements FallbackStrategyHostApi {
public static class FallbackStrategyProxy {
/** Creates an instance of {@link FallbackStrategy}. */
public @NonNull FallbackStrategy create(
- @NonNull VideoQualityConstraint videoQualityConstraint,
- @NonNull VideoResolutionFallbackRule fallbackRule) {
- Quality videoQuality =
- QualitySelectorHostApiImpl.getQualityFromVideoQualityConstraint(videoQualityConstraint);
+ @NonNull VideoQuality videoQuality, @NonNull VideoResolutionFallbackRule fallbackRule) {
+ Quality quality = QualitySelectorHostApiImpl.getQualityFromVideoQuality(videoQuality);
switch (fallbackRule) {
case HIGHER_QUALITY_OR_LOWER_THAN:
- return FallbackStrategy.higherQualityOrLowerThan(videoQuality);
+ return FallbackStrategy.higherQualityOrLowerThan(quality);
case HIGHER_QUALITY_THAN:
- return FallbackStrategy.higherQualityThan(videoQuality);
+ return FallbackStrategy.higherQualityThan(quality);
case LOWER_QUALITY_OR_HIGHER_THAN:
- return FallbackStrategy.lowerQualityOrHigherThan(videoQuality);
+ return FallbackStrategy.lowerQualityOrHigherThan(quality);
case LOWER_QUALITY_THAN:
- return FallbackStrategy.lowerQualityThan(videoQuality);
+ return FallbackStrategy.lowerQualityThan(quality);
}
throw new IllegalArgumentException(
"Specified fallback rule " + fallbackRule + " unrecognized.");
@@ -75,9 +73,8 @@ public FallbackStrategyHostApiImpl(@NonNull InstanceManager instanceManager) {
@Override
public void create(
@NonNull Long identifier,
- @NonNull VideoQualityConstraint videoQualityConstraint,
+ @NonNull VideoQuality videoQuality,
@NonNull VideoResolutionFallbackRule fallbackRule) {
- instanceManager.addDartCreatedInstance(
- proxy.create(videoQualityConstraint, fallbackRule), identifier);
+ instanceManager.addDartCreatedInstance(proxy.create(videoQuality, fallbackRule), identifier);
}
}
diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java
index d7d378d158b..fe9a935989f 100644
--- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java
+++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/GeneratedCameraXLibrary.java
@@ -112,7 +112,7 @@ private LiveDataSupportedType(final int index) {
*
*
See https://developer.android.com/reference/androidx/camera/video/Quality.
*/
- public enum VideoQualityConstraint {
+ public enum VideoQuality {
SD(0),
HD(1),
FHD(2),
@@ -122,12 +122,16 @@ public enum VideoQualityConstraint {
final int index;
- private VideoQualityConstraint(final int index) {
+ private VideoQuality(final int index) {
this.index = index;
}
}
- /** Fallback rules for selecting video resolution. */
+ /**
+ * Fallback rules for selecting video resolution.
+ *
+ *
See https://developer.android.com/reference/androidx/camera/video/FallbackStrategy.
+ */
public enum VideoResolutionFallbackRule {
HIGHER_QUALITY_OR_LOWER_THAN(0),
HIGHER_QUALITY_THAN(1),
@@ -472,6 +476,59 @@ ArrayList