Merge "Use support level ZSL and Flash only when platform supports" am: 8690a7317d am: 92ab0d63c2
am: 0529fdaedf
Change-Id: Id18345701037b6306f2fec8dc233cd2fb1760833
diff --git a/src/com/android/camera/one/OneCameraCaptureSetting.java b/src/com/android/camera/one/OneCameraCaptureSetting.java
index 76f2042..bff9d64 100644
--- a/src/com/android/camera/one/OneCameraCaptureSetting.java
+++ b/src/com/android/camera/one/OneCameraCaptureSetting.java
@@ -45,8 +45,13 @@
final HardwareSpec hardwareSpec,
String cameraSettingScope,
boolean isHdrPlusEnabled) {
- Observable<OneCamera.PhotoCaptureParameters.Flash> flashSetting = new FlashSetting(
- SettingObserver.ofString(settingsManager, cameraSettingScope, Keys.KEY_FLASH_MODE));
+ Observable<OneCamera.PhotoCaptureParameters.Flash> flashSetting;
+ if (hardwareSpec.isFlashSupported()) {
+ flashSetting = new FlashSetting(SettingObserver.ofString(
+ settingsManager, cameraSettingScope, Keys.KEY_FLASH_MODE));
+ } else {
+ flashSetting = new FlashSetting(Observables.of("off"));
+ }
Observable<Integer> exposureSetting = SettingObserver.ofInteger(
settingsManager, cameraSettingScope, Keys.KEY_EXPOSURE);
Observable<Boolean> hdrSceneSetting;
diff --git a/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java b/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
index 0cedb18..3e0fb9d 100644
--- a/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
+++ b/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
@@ -105,9 +105,15 @@
}
}
- // On FULL devices starting with L-MR1 we can run ZSL.
- if (supportedLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL) {
- return CaptureSupportLevel.ZSL;
+ // On FULL devices starting with L-MR1 we can run ZSL if private reprocessing
+ // or YUV reprocessing is supported.
+ if (supportedLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL ||
+ supportedLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3) {
+ if (supportsReprocessing(characteristics)) {
+ return CaptureSupportLevel.ZSL;
+ } else {
+ return CaptureSupportLevel.LIMITED_YUV;
+ }
}
// On LIMITED devices starting with L-MR1 we run a simple YUV
@@ -124,6 +130,24 @@
};
}
+ private static boolean supportsReprocessing(CameraCharacteristics characteristics) {
+ int maxNumInputStreams = characteristics.get(
+ CameraCharacteristics.REQUEST_MAX_NUM_INPUT_STREAMS);
+ if (maxNumInputStreams == 0) {
+ return false;
+ }
+
+ int[] capabilities = characteristics.get(
+ CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
+ for (int cap : capabilities) {
+ if (cap == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING ||
+ cap == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/**
* @return If an override exits, this returns the capture support hardware
* level that should be used on this device.
diff --git a/src/com/android/camera/one/v2/photo/PictureTakerFactory.java b/src/com/android/camera/one/v2/photo/PictureTakerFactory.java
index cf585f3..68ca5a7 100644
--- a/src/com/android/camera/one/v2/photo/PictureTakerFactory.java
+++ b/src/com/android/camera/one/v2/photo/PictureTakerFactory.java
@@ -48,14 +48,14 @@
// performs the AF & AE precapture sequence.
ImageCaptureCommand flashOnCommand = new ConvergedImageCaptureCommand(
sharedImageReader, frameServer, rootRequestBuilder,
- CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG, CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
+ CameraDevice.TEMPLATE_STILL_CAPTURE, CameraDevice.TEMPLATE_STILL_CAPTURE,
Arrays.asList(rootRequestBuilder), true /* ae */, true /* af */);
// When flash is OFF, wait for AF convergence, but not AE convergence
// (which can be very slow).
ImageCaptureCommand flashOffCommand = new ConvergedImageCaptureCommand(
sharedImageReader, frameServer, rootRequestBuilder,
- CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG, CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
+ CameraDevice.TEMPLATE_STILL_CAPTURE, CameraDevice.TEMPLATE_STILL_CAPTURE,
Arrays.asList(rootRequestBuilder), false /* ae */, true /* af */);
// When flash is AUTO, wait for AF & AE.
@@ -63,7 +63,7 @@
// not necessary, then this could skip waiting for AE convergence.
ImageCaptureCommand flashAutoCommand = new ConvergedImageCaptureCommand(
sharedImageReader, frameServer, rootRequestBuilder,
- CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG, CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
+ CameraDevice.TEMPLATE_STILL_CAPTURE, CameraDevice.TEMPLATE_STILL_CAPTURE,
Arrays.asList(rootRequestBuilder), true /* ae */, true /* af */);
ImageCaptureCommand flashBasedCommand = new FlashBasedPhotoCommand(logFactory, flashMode,