diff options
author | Igor Murashkin <iam@google.com> | 2014-07-11 21:09:53 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-07-11 17:04:34 +0000 |
commit | 30f01591c8109cc6193de8d6f1246f5861a34b13 (patch) | |
tree | b8ad17822c2b40891d52b625e6c1d239ae633d8f /core | |
parent | 685206cb03c086fd7282df03f58f6b6b22578cd3 (diff) | |
parent | 396532ffb80f70c336b3564e5bac4c09d3be07ff (diff) | |
download | frameworks_base-30f01591c8109cc6193de8d6f1246f5861a34b13.zip frameworks_base-30f01591c8109cc6193de8d6f1246f5861a34b13.tar.gz frameworks_base-30f01591c8109cc6193de8d6f1246f5861a34b13.tar.bz2 |
Merge "camera2: (LEGACY) Update flash modes to fix #testFlashControl CTS"
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java | 74 | ||||
-rw-r--r-- | core/java/android/hardware/camera2/legacy/LegacyResultMapper.java | 70 |
2 files changed, 101 insertions, 43 deletions
diff --git a/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java b/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java index 273bd89..1e4561f 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java +++ b/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java @@ -258,34 +258,70 @@ public class LegacyRequestMapper { List<String> supportedFlashModes = p.getSupportedFlashModes(); + String flashModeSetting = null; + + // Flash is OFF by default, on cameras that support flash + if (ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_OFF)) { + flashModeSetting = Parameters.FLASH_MODE_OFF; + } + /* * Map all of the control.aeMode* enums, but ignore AE_MODE_OFF since we never support it */ // Ignore flash.mode controls unless aeMode == ON if (aeMode == CONTROL_AE_MODE_ON) { - // Flash is OFF by default - p.setFlashMode(Parameters.FLASH_MODE_OFF); - - if (flashMode == FLASH_MODE_TORCH && - ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_TORCH)) { - p.setFlashMode(Parameters.FLASH_MODE_TORCH); - } else if (flashMode == FLASH_MODE_SINGLE && - ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_ON)) { - p.setFlashMode(Parameters.FLASH_MODE_ON); + if (flashMode == FLASH_MODE_TORCH) { + if (ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_TORCH)) { + flashModeSetting = Parameters.FLASH_MODE_TORCH; + } else { + Log.w(TAG, "mapAeAndFlashMode - Ignore flash.mode == TORCH;" + + "camera does not support it"); + } + } else if (flashMode == FLASH_MODE_SINGLE) { + if (ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_ON)) { + flashModeSetting = Parameters.FLASH_MODE_ON; + } else { + Log.w(TAG, "mapAeAndFlashMode - Ignore flash.mode == SINGLE;" + + "camera does not support it"); + } + } else { + // Use the default FLASH_MODE_OFF + } + } else if (aeMode == CONTROL_AE_MODE_ON_ALWAYS_FLASH) { + if (ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_ON)) { + flashModeSetting = Parameters.FLASH_MODE_ON; + } else { + Log.w(TAG, "mapAeAndFlashMode - Ignore control.aeMode == ON_ALWAYS_FLASH;" + + "camera does not support it"); + } + } else if (aeMode == CONTROL_AE_MODE_ON_AUTO_FLASH) { + if (ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_AUTO)) { + flashModeSetting = Parameters.FLASH_MODE_AUTO; + } else { + Log.w(TAG, "mapAeAndFlashMode - Ignore control.aeMode == ON_AUTO_FLASH;" + + "camera does not support it"); } - } else if (aeMode == CONTROL_AE_MODE_ON_ALWAYS_FLASH && - ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_ON)) { - p.setFlashMode(Parameters.FLASH_MODE_ON); - } else if (aeMode == CONTROL_AE_MODE_ON_AUTO_FLASH && - ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_AUTO)) { - p.setFlashMode(Parameters.FLASH_MODE_AUTO); - } else if (aeMode == CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE && - ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_RED_EYE)) { - p.setFlashMode(Parameters.FLASH_MODE_RED_EYE); + } else if (aeMode == CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE) { + if (ListUtils.listContains(supportedFlashModes, Parameters.FLASH_MODE_RED_EYE)) { + flashModeSetting = Parameters.FLASH_MODE_RED_EYE; + } else { + Log.w(TAG, "mapAeAndFlashMode - Ignore control.aeMode == ON_AUTO_FLASH_REDEYE;" + + "camera does not support it"); + } } else { // Default to aeMode == ON, flash = OFF - p.setFlashMode(Parameters.FLASH_MODE_OFF); + } + + if (flashModeSetting != null) { + p.setFlashMode(flashModeSetting); + } + + if (VERBOSE) { + Log.v(TAG, + "mapAeAndFlashMode - set flash.mode (api1) to " + flashModeSetting + + ", requested (api2) " + flashMode + + ", supported (api1) " + ListUtils.listToString(supportedFlashModes)); } } diff --git a/core/java/android/hardware/camera2/legacy/LegacyResultMapper.java b/core/java/android/hardware/camera2/legacy/LegacyResultMapper.java index c02f8ac..a10a2af 100644 --- a/core/java/android/hardware/camera2/legacy/LegacyResultMapper.java +++ b/core/java/android/hardware/camera2/legacy/LegacyResultMapper.java @@ -80,7 +80,7 @@ public class LegacyResultMapper { /* * control.ae* */ - mapAe(result, request, activeArraySize, zoomData, /*out*/params); + mapAe(result, characteristics, request, activeArraySize, zoomData, /*out*/params); // control.awbLock result.set(CaptureResult.CONTROL_AWB_LOCK, params.getAutoWhiteBalanceLock()); @@ -101,6 +101,13 @@ public class LegacyResultMapper { } /* + * flash + */ + { + // TODO + } + + /* * lens */ // lens.focalLength @@ -122,6 +129,7 @@ public class LegacyResultMapper { } private static void mapAe(CameraMetadataNative m, + CameraCharacteristics characteristics, CaptureRequest request, Rect activeArray, ZoomData zoomData, /*out*/Parameters p) { // control.aeAntiBandingMode { @@ -153,8 +161,8 @@ public class LegacyResultMapper { } } - // control.aeMode, flash.mode - mapAeAndFlashMode(m, p); + // control.aeMode, flash.mode, flash.state + mapAeAndFlashMode(m, characteristics, p); // control.aeState if (LegacyMetadataMapper.LIE_ABOUT_AE_STATE) { @@ -219,33 +227,47 @@ public class LegacyResultMapper { return meteringRectList.toArray(new MeteringRectangle[0]); } - - /** Map results for control.aeMode, flash.mode */ - private static void mapAeAndFlashMode(CameraMetadataNative m, /*out*/Parameters p) { + /** Map results for control.aeMode, flash.mode, flash.state */ + private static void mapAeAndFlashMode(CameraMetadataNative m, + CameraCharacteristics characteristics, Parameters p) { // Default: AE mode on but flash never fires int flashMode = FLASH_MODE_OFF; + // If there is no flash on this camera, the state is always unavailable + // , otherwise it's only known for TORCH/SINGLE modes + Integer flashState = characteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE) + ? null : FLASH_STATE_UNAVAILABLE; int aeMode = CONTROL_AE_MODE_ON; - switch (p.getFlashMode()) { - case Parameters.FLASH_MODE_OFF: - break; // ok, using default - case Parameters.FLASH_MODE_AUTO: - aeMode = CONTROL_AE_MODE_ON_AUTO_FLASH; - break; - case Parameters.FLASH_MODE_ON: - // flashMode = SINGLE + aeMode = ON is indistinguishable from ON_ALWAYS_FLASH - aeMode = CONTROL_AE_MODE_ON_ALWAYS_FLASH; - break; - case Parameters.FLASH_MODE_RED_EYE: - aeMode = CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE; - break; - case Parameters.FLASH_MODE_TORCH: - flashMode = FLASH_MODE_TORCH; - break; - default: - Log.w(TAG, "mapAeAndFlashMode - Ignoring unknown flash mode " + p.getFlashMode()); + String flashModeSetting = p.getFlashMode(); + + if (flashModeSetting != null) { + switch (flashModeSetting) { + case Parameters.FLASH_MODE_OFF: + break; // ok, using default + case Parameters.FLASH_MODE_AUTO: + aeMode = CONTROL_AE_MODE_ON_AUTO_FLASH; + break; + case Parameters.FLASH_MODE_ON: + // flashMode = SINGLE + aeMode = ON is indistinguishable from ON_ALWAYS_FLASH + flashMode = FLASH_MODE_SINGLE; + aeMode = CONTROL_AE_MODE_ON_ALWAYS_FLASH; + flashState = FLASH_STATE_FIRED; + break; + case Parameters.FLASH_MODE_RED_EYE: + aeMode = CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE; + break; + case Parameters.FLASH_MODE_TORCH: + flashMode = FLASH_MODE_TORCH; + flashState = FLASH_STATE_FIRED; + break; + default: + Log.w(TAG, + "mapAeAndFlashMode - Ignoring unknown flash mode " + p.getFlashMode()); + } } + // flash.state + m.set(FLASH_STATE, flashState); // flash.mode m.set(FLASH_MODE, flashMode); // control.aeMode |