summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorIgor Murashkin <iam@google.com>2014-07-11 21:09:53 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-07-11 17:04:34 +0000
commit30f01591c8109cc6193de8d6f1246f5861a34b13 (patch)
treeb8ad17822c2b40891d52b625e6c1d239ae633d8f /core
parent685206cb03c086fd7282df03f58f6b6b22578cd3 (diff)
parent396532ffb80f70c336b3564e5bac4c09d3be07ff (diff)
downloadframeworks_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.java74
-rw-r--r--core/java/android/hardware/camera2/legacy/LegacyResultMapper.java70
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