Loading core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java +55 −19 Original line number Diff line number Diff line Loading @@ -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); } } 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); 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_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)); } } Loading core/java/android/hardware/camera2/legacy/LegacyResultMapper.java +46 −24 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -100,6 +100,13 @@ public class LegacyResultMapper { request.get(CaptureRequest.CONTROL_AWB_MODE)); } /* * flash */ { // TODO } /* * lens */ Loading @@ -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 { Loading Loading @@ -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) { Loading Loading @@ -219,14 +227,21 @@ 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()) { String flashModeSetting = p.getFlashMode(); if (flashModeSetting != null) { switch (flashModeSetting) { case Parameters.FLASH_MODE_OFF: break; // ok, using default case Parameters.FLASH_MODE_AUTO: Loading @@ -234,18 +249,25 @@ public class LegacyResultMapper { 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()); 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 Loading Loading
core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java +55 −19 Original line number Diff line number Diff line Loading @@ -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); } } 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); 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_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)); } } Loading
core/java/android/hardware/camera2/legacy/LegacyResultMapper.java +46 −24 Original line number Diff line number Diff line Loading @@ -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()); Loading @@ -100,6 +100,13 @@ public class LegacyResultMapper { request.get(CaptureRequest.CONTROL_AWB_MODE)); } /* * flash */ { // TODO } /* * lens */ Loading @@ -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 { Loading Loading @@ -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) { Loading Loading @@ -219,14 +227,21 @@ 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()) { String flashModeSetting = p.getFlashMode(); if (flashModeSetting != null) { switch (flashModeSetting) { case Parameters.FLASH_MODE_OFF: break; // ok, using default case Parameters.FLASH_MODE_AUTO: Loading @@ -234,18 +249,25 @@ public class LegacyResultMapper { 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()); 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 Loading