From 796863a5ec507d472825e77cdec0d8bc0cb6f3b4 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Mon, 16 Mar 2020 16:00:18 -0700 Subject: [PATCH] Camera: Move bokeh mode to extendedSceneMode tag Migrate BOKEH_MODE_STILL_CAPTURE and BOKEH_MODE_CONTINUOUS to be 2 enums of CONTROL_EXTENDED_SCENE_MODE. Test: Camera CTS, VTS Bug: 151759402 Change-Id: I2373f3cb37bbca72cdf403b209f2375c1954fb9a --- api/current.txt | 13 ++- .../camera2/CameraCharacteristics.java | 106 +++++++++--------- .../hardware/camera2/CameraMetadata.java | 37 ++++-- .../hardware/camera2/CaptureRequest.java | 47 ++++---- .../hardware/camera2/CaptureResult.java | 47 ++++---- .../camera2/impl/CameraMetadataNative.java | 70 ++++++------ .../hardware/camera2/params/Capability.java | 10 +- 7 files changed, 176 insertions(+), 154 deletions(-) diff --git a/api/current.txt b/api/current.txt index db721f5f4a3cd..6254436a12ef3 100644 --- a/api/current.txt +++ b/api/current.txt @@ -17240,8 +17240,8 @@ package android.hardware.camera2 { field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_COMPENSATION_STEP; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AE_LOCK_AVAILABLE; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AF_AVAILABLE_MODES; - field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_BOKEH_CAPABILITIES; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EFFECTS; + field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_MODES; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_SCENE_MODES; field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES; @@ -17462,9 +17462,6 @@ package android.hardware.camera2 { field public static final int CONTROL_AWB_STATE_INACTIVE = 0; // 0x0 field public static final int CONTROL_AWB_STATE_LOCKED = 3; // 0x3 field public static final int CONTROL_AWB_STATE_SEARCHING = 1; // 0x1 - field public static final int CONTROL_BOKEH_MODE_CONTINUOUS = 2; // 0x2 - field public static final int CONTROL_BOKEH_MODE_OFF = 0; // 0x0 - field public static final int CONTROL_BOKEH_MODE_STILL_CAPTURE = 1; // 0x1 field public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0; // 0x0 field public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6; // 0x6 field public static final int CONTROL_CAPTURE_INTENT_MOTION_TRACKING = 7; // 0x7 @@ -17482,9 +17479,13 @@ package android.hardware.camera2 { field public static final int CONTROL_EFFECT_MODE_SEPIA = 4; // 0x4 field public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3; // 0x3 field public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6; // 0x6 + field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS = 2; // 0x2 + field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE = 1; // 0x1 + field public static final int CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0; // 0x0 field public static final int CONTROL_MODE_AUTO = 1; // 0x1 field public static final int CONTROL_MODE_OFF = 0; // 0x0 field public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; // 0x3 + field public static final int CONTROL_MODE_USE_EXTENDED_SCENE_MODE = 4; // 0x4 field public static final int CONTROL_MODE_USE_SCENE_MODE = 2; // 0x2 field public static final int CONTROL_SCENE_MODE_ACTION = 2; // 0x2 field public static final int CONTROL_SCENE_MODE_BARCODE = 16; // 0x10 @@ -17676,10 +17677,10 @@ package android.hardware.camera2 { field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_LOCK; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_AWB_REGIONS; - field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_BOKEH_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_CAPTURE_INTENT; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EFFECT_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_ENABLE_ZSL; + field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_EXTENDED_SCENE_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_MODE; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_POST_RAW_SENSITIVITY_BOOST; field @NonNull public static final android.hardware.camera2.CaptureRequest.Key CONTROL_SCENE_MODE; @@ -17763,10 +17764,10 @@ package android.hardware.camera2 { field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_REGIONS; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_AWB_STATE; - field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_BOKEH_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_CAPTURE_INTENT; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_EFFECT_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_ENABLE_ZSL; + field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_EXTENDED_SCENE_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_MODE; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_POST_RAW_SENSITIVITY_BOOST; field @NonNull public static final android.hardware.camera2.CaptureResult.Key CONTROL_SCENE_MODE; diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index 6539c688b674d..34a40aef147ff 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -1125,42 +1125,43 @@ public final class CameraCharacteristics extends CameraMetadata>("android.control.postRawSensitivityBoostRange", new TypeReference>() {{ }}); /** - *

The list of bokeh modes for {@link CaptureRequest#CONTROL_BOKEH_MODE android.control.bokehMode} that are supported by this camera - * device, and each bokeh mode's maximum streaming (non-stall) size with bokeh effect.

- *

For OFF mode, the camera behaves normally with no bokeh effect.

- *

For STILL_CAPTURE mode, the maximum streaming dimension specifies the limit under which - * bokeh is effective when capture intent is PREVIEW. Note that when capture intent is - * PREVIEW, the bokeh effect may not be as high quality compared to STILL_CAPTURE intent - * in order to maintain reasonable frame rate. The maximum streaming dimension must be one - * of the YUV_420_888 or PRIVATE resolutions in availableStreamConfigurations, or (0, 0) - * if preview bokeh is not supported. If the application configures a stream larger than - * the maximum streaming dimension, bokeh effect may not be applied for this stream for - * PREVIEW intent.

- *

For CONTINUOUS mode, the maximum streaming dimension specifies the limit under which - * bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE resolutions - * in availableStreamConfigurations, and if the sensor maximum resolution is larger than or - * equal to 1080p, the maximum streaming dimension must be at least 1080p. If the - * application configures a stream with larger dimension, the stream may not have bokeh - * effect applied.

+ *

The list of extended scene modes for {@link CaptureRequest#CONTROL_EXTENDED_SCENE_MODE android.control.extendedSceneMode} that are supported + * by this camera device, and each extended scene mode's maximum streaming (non-stall) size + * with effect.

+ *

For DISABLED mode, the camera behaves normally with no extended scene mode enabled.

+ *

For BOKEH_STILL_CAPTURE mode, the maximum streaming dimension specifies the limit + * under which bokeh is effective when capture intent is PREVIEW. Note that when capture + * intent is PREVIEW, the bokeh effect may not be as high in quality compared to + * STILL_CAPTURE intent in order to maintain reasonable frame rate. The maximum streaming + * dimension must be one of the YUV_420_888 or PRIVATE resolutions in + * availableStreamConfigurations, or (0, 0) if preview bokeh is not supported. If the + * application configures a stream larger than the maximum streaming dimension, bokeh + * effect may not be applied for this stream for PREVIEW intent.

+ *

For BOKEH_CONTINUOUS mode, the maximum streaming dimension specifies the limit under + * which bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE + * resolutions in availableStreamConfigurations, and if the sensor maximum resolution is + * larger than or equal to 1080p, the maximum streaming dimension must be at least 1080p. + * If the application configures a stream with larger dimension, the stream may not have + * bokeh effect applied.

*

Units: (mode, width, height)

*

Optional - The value for this key may be {@code null} on some devices.

*

Limited capability - * Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key

* - * @see CaptureRequest#CONTROL_BOKEH_MODE + * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL * @hide */ - public static final Key CONTROL_AVAILABLE_BOKEH_MAX_SIZES = - new Key("android.control.availableBokehMaxSizes", int[].class); + public static final Key CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES = + new Key("android.control.availableExtendedSceneModeMaxSizes", int[].class); /** - *

The ranges of supported zoom ratio for non-OFF {@link CaptureRequest#CONTROL_BOKEH_MODE android.control.bokehMode}.

- *

When bokeh mode is enabled, the camera device may have limited range of zoom ratios - * compared to when bokeh mode is disabled. This tag lists the zoom ratio ranges for all - * supported non-OFF bokeh modes, in the same order as in - * {@link CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES android.control.availableBokehCapabilities}.

+ *

The ranges of supported zoom ratio for non-DISABLED {@link CaptureRequest#CONTROL_EXTENDED_SCENE_MODE android.control.extendedSceneMode}.

+ *

When extended scene mode is set, the camera device may have limited range of zoom ratios + * compared to when extended scene mode is DISABLED. This tag lists the zoom ratio ranges + * for all supported non-DISABLED extended scene modes, in the same order as in + * android.control.availableExtended.

*

Range [1.0, 1.0] means that no zoom (optical or digital) is supported.

*

Units: (minZoom, maxZoom)

*

Optional - The value for this key may be {@code null} on some devices.

@@ -1168,46 +1169,45 @@ public final class CameraCharacteristics extends CameraMetadata * - * @see CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES - * @see CaptureRequest#CONTROL_BOKEH_MODE + * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL * @hide */ - public static final Key CONTROL_AVAILABLE_BOKEH_ZOOM_RATIO_RANGES = - new Key("android.control.availableBokehZoomRatioRanges", float[].class); + public static final Key CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES = + new Key("android.control.availableExtendedSceneModeZoomRatioRanges", float[].class); /** - *

The list of bokeh modes for {@link CaptureRequest#CONTROL_BOKEH_MODE android.control.bokehMode} that are supported by - * this camera device, and each bokeh mode's capabilities such as maximum streaming size - * with bokeh effect, and supported zoom ratio ranges.

- *

For OFF mode, the camera behaves normally with no bokeh effect.

- *

For STILL_CAPTURE mode, the maximum streaming dimension specifies the limit under which - * bokeh is effective when capture intent is PREVIEW. Note that when capture intent is - * PREVIEW, the bokeh effect may not be as high quality compared to STILL_CAPTURE intent - * in order to maintain reasonable frame rate. The maximum streaming dimension must be one - * of the YUV_420_888 or PRIVATE resolutions in availableStreamConfigurations, or (0, 0) - * if preview bokeh is not supported. If the application configures a stream larger than - * the maximum streaming dimension, bokeh effect may not be applied for this stream for - * PREVIEW intent.

- *

For CONTINUOUS mode, the maximum streaming dimension specifies the limit under which - * bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE resolutions - * in availableStreamConfigurations, and if the sensor maximum resolution is larger than or - * equal to 1080p, the maximum streaming dimension must be at least 1080p. If the - * application configures a stream with larger dimension, the stream may not have bokeh - * effect applied.

- *

When bokeh mode is enabled, the camera device may have limited range of zoom ratios - * compared to when bokeh mode is disabled. availableBokehCapabilities lists the zoom - * ranges for all supported bokeh modes. A range of (1.0, 1.0) means that no zoom + *

The list of extended scene modes for {@link CaptureRequest#CONTROL_EXTENDED_SCENE_MODE android.control.extendedSceneMode} that + * are supported by this camera device, and each extended scene mode's capabilities such + * as maximum streaming size, and supported zoom ratio ranges.

+ *

For DISABLED mode, the camera behaves normally with no extended scene mdoe enabled.

+ *

For BOKEH_STILL_CAPTURE mode, the maximum streaming dimension specifies the limit + * under which bokeh is effective when capture intent is PREVIEW. Note that when capture + * intent is PREVIEW, the bokeh effect may not be as high quality compared to STILL_CAPTURE + * intent in order to maintain reasonable frame rate. The maximum streaming dimension must + * be one of the YUV_420_888 or PRIVATE resolutions in availableStreamConfigurations, or + * (0, 0) if preview bokeh is not supported. If the application configures a stream + * larger than the maximum streaming dimension, bokeh effect may not be applied for this + * stream for PREVIEW intent.

+ *

For BOKEH_CONTINUOUS mode, the maximum streaming dimension specifies the limit under + * which bokeh is effective. This dimension must be one of the YUV_420_888 or PRIVATE + * resolutions in availableStreamConfigurations, and if the sensor maximum resolution is + * larger than or equal to 1080p, the maximum streaming dimension must be at least 1080p. + * If the application configures a stream with larger dimension, the stream may not have + * bokeh effect applied.

+ *

When extended scene mode is set, the camera device may have limited range of zoom ratios + * compared to when the mode is DISABLED. availableExtendedSceneModeCapabilities lists the + * zoom ranges for all supported extended modes. A range of (1.0, 1.0) means that no zoom * (optical or digital) is supported.

*

Optional - The value for this key may be {@code null} on some devices.

* - * @see CaptureRequest#CONTROL_BOKEH_MODE + * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE */ @PublicKey @NonNull @SyntheticKey - public static final Key CONTROL_AVAILABLE_BOKEH_CAPABILITIES = - new Key("android.control.availableBokehCapabilities", android.hardware.camera2.params.Capability[].class); + public static final Key CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES = + new Key("android.control.availableExtendedSceneModeCapabilities", android.hardware.camera2.params.Capability[].class); /** *

Minimum and maximum zoom ratios supported by this camera device.

diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 7bf819fadc698..91dae66d08ae8 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -2190,6 +2190,7 @@ public abstract class CameraMetadata { * This setting can only be used if scene mode is supported (i.e. * {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes} * contain some modes other than DISABLED).

+ *

For extended scene modes such as BOKEH, please use USE_EXTENDED_SCENE_MODE instead.

* * @see CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES * @see CaptureRequest#CONTROL_MODE @@ -2209,6 +2210,19 @@ public abstract class CameraMetadata { */ public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; + /** + *

Use a specific extended scene mode.

+ *

When extended scene mode is on, the camera device may override certain control + * parameters, such as targetFpsRange, AE, AWB, and AF modes, to achieve best power and + * quality tradeoffs. Only the mandatory stream combinations of LIMITED hardware level + * are guaranteed.

+ *

This setting can only be used if extended scene mode is supported (i.e. + * android.control.availableExtendedSceneModes + * contains some modes other than DISABLED).

+ * @see CaptureRequest#CONTROL_MODE + */ + public static final int CONTROL_MODE_USE_EXTENDED_SCENE_MODE = 4; + // // Enumeration values for CaptureRequest#CONTROL_SCENE_MODE // @@ -2540,32 +2554,39 @@ public abstract class CameraMetadata { public static final int CONTROL_VIDEO_STABILIZATION_MODE_ON = 1; // - // Enumeration values for CaptureRequest#CONTROL_BOKEH_MODE + // Enumeration values for CaptureRequest#CONTROL_EXTENDED_SCENE_MODE // /** - *

Bokeh mode is disabled.

- * @see CaptureRequest#CONTROL_BOKEH_MODE + *

Extended scene mode is disabled.

+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE */ - public static final int CONTROL_BOKEH_MODE_OFF = 0; + public static final int CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0; /** *

High quality bokeh mode is enabled for all non-raw streams (including YUV, * JPEG, and IMPLEMENTATION_DEFINED) when capture intent is STILL_CAPTURE. Due to the * extra image processing, this mode may introduce additional stall to non-raw streams. * This mode should be used in high quality still capture use case.

- * @see CaptureRequest#CONTROL_BOKEH_MODE + * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE */ - public static final int CONTROL_BOKEH_MODE_STILL_CAPTURE = 1; + public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE = 1; /** *

Bokeh effect must not slow down capture rate relative to sensor raw output, * and the effect is applied to all processed streams no larger than the maximum * streaming dimension. This mode should be used if performance and power are a * priority, such as video recording.

- * @see CaptureRequest#CONTROL_BOKEH_MODE + * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE */ - public static final int CONTROL_BOKEH_MODE_CONTINUOUS = 2; + public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS = 2; + + /** + *

Vendor defined extended scene modes. These depend on vendor implementation.

+ * @see CaptureRequest#CONTROL_EXTENDED_SCENE_MODE + * @hide + */ + public static final int CONTROL_EXTENDED_SCENE_MODE_VENDOR_START = 0x40; // // Enumeration values for CaptureRequest#EDGE_MODE diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index c1554af5b2197..0ee748287fa29 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -1911,10 +1911,10 @@ public final class CaptureRequest extends CameraMetadata> * capture parameters itself.

*

When set to AUTO, the individual algorithm controls in * android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.

- *

When set to USE_SCENE_MODE, the individual controls in + *

When set to USE_SCENE_MODE or USE_EXTENDED_SCENE_MODE, the individual controls in * android.control.* are mostly disabled, and the camera device - * implements one of the scene mode settings (such as ACTION, - * SUNSET, or PARTY) as it wishes. The camera device scene mode + * implements one of the scene mode or extended scene mode settings (such as ACTION, + * SUNSET, PARTY, or BOKEH) as it wishes. The camera device scene mode * 3A settings are provided by {@link android.hardware.camera2.CaptureResult capture results}.

*

When set to OFF_KEEP_STATE, it is similar to OFF mode, the only difference * is that this frame will not be used by camera device background 3A statistics @@ -1927,6 +1927,7 @@ public final class CaptureRequest extends CameraMetadata> *

  • {@link #CONTROL_MODE_AUTO AUTO}
  • *
  • {@link #CONTROL_MODE_USE_SCENE_MODE USE_SCENE_MODE}
  • *
  • {@link #CONTROL_MODE_OFF_KEEP_STATE OFF_KEEP_STATE}
  • + *
  • {@link #CONTROL_MODE_USE_EXTENDED_SCENE_MODE USE_EXTENDED_SCENE_MODE}
  • *

    *

    Available values for this device:
    * {@link CameraCharacteristics#CONTROL_AVAILABLE_MODES android.control.availableModes}

    @@ -1938,6 +1939,7 @@ public final class CaptureRequest extends CameraMetadata> * @see #CONTROL_MODE_AUTO * @see #CONTROL_MODE_USE_SCENE_MODE * @see #CONTROL_MODE_OFF_KEEP_STATE + * @see #CONTROL_MODE_USE_EXTENDED_SCENE_MODE */ @PublicKey @NonNull @@ -2127,52 +2129,49 @@ public final class CaptureRequest extends CameraMetadata> new Key("android.control.enableZsl", boolean.class); /** - *

    Whether bokeh mode is enabled for a particular capture request.

    + *

    Whether extended scene mode is enabled for a particular capture request.

    *

    With bokeh mode, the camera device may blur out the parts of scene that are not in * focus, creating a bokeh (or shallow depth of field) effect for people or objects.

    - *

    When set to STILL_CAPTURE bokeh mode with STILL_CAPTURE capture intent, due to the extra + *

    When set to BOKEH_STILL_CAPTURE mode with STILL_CAPTURE capture intent, due to the extra * processing needed for high quality bokeh effect, the stall may be longer than when * capture intent is not STILL_CAPTURE.

    - *

    When set to STILL_CAPTURE bokeh mode with PREVIEW capture intent,

    + *

    When set to BOKEH_STILL_CAPTURE mode with PREVIEW capture intent,

    *
      *
    • If the camera device has BURST_CAPTURE capability, the frame rate requirement of * BURST_CAPTURE must still be met.
    • - *
    • All streams not larger than the maximum streaming dimension for STILL_CAPTURE mode - * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES }) + *
    • All streams not larger than the maximum streaming dimension for BOKEH_STILL_CAPTURE mode + * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES }) * will have preview bokeh effect applied.
    • *
    - *

    When set to CONTINUOUS mode, configured streams dimension should not exceed this mode's + *

    When set to BOKEH_CONTINUOUS mode, configured streams dimension should not exceed this mode's * maximum streaming dimension in order to have bokeh effect applied. Bokeh effect may not * be available for streams larger than the maximum streaming dimension.

    - *

    Switching between different bokeh modes may involve reconfiguration of the camera + *

    Switching between different extended scene modes may involve reconfiguration of the camera * pipeline, resulting in long latency. The application should check this key against the * available session keys queried via * {@link android.hardware.camera2.CameraCharacteristics#getAvailableSessionKeys }.

    - *

    When bokeh mode is on, the camera device may override certain control parameters, such as - * reduce frame rate or use face priority scene mode, to achieve best power and quality - * tradeoffs. When turned on, AE, AWB, and AF run in auto modes, and only the mandatory - * stream combinations of LIMITED hardware level are guaranteed.

    *

    For a logical multi-camera, bokeh may be implemented by stereo vision from sub-cameras * with different field of view. As a result, when bokeh mode is enabled, the camera device - * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, and the field of view will be smaller than when - * bokeh mode is off.

    + * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} or {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio}, and the field of + * view may be smaller than when bokeh mode is off.

    *

    Possible values: *

      - *
    • {@link #CONTROL_BOKEH_MODE_OFF OFF}
    • - *
    • {@link #CONTROL_BOKEH_MODE_STILL_CAPTURE STILL_CAPTURE}
    • - *
    • {@link #CONTROL_BOKEH_MODE_CONTINUOUS CONTINUOUS}
    • + *
    • {@link #CONTROL_EXTENDED_SCENE_MODE_DISABLED DISABLED}
    • + *
    • {@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE BOKEH_STILL_CAPTURE}
    • + *
    • {@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS BOKEH_CONTINUOUS}
    • *

    *

    Optional - The value for this key may be {@code null} on some devices.

    * + * @see CaptureRequest#CONTROL_ZOOM_RATIO * @see CaptureRequest#SCALER_CROP_REGION - * @see #CONTROL_BOKEH_MODE_OFF - * @see #CONTROL_BOKEH_MODE_STILL_CAPTURE - * @see #CONTROL_BOKEH_MODE_CONTINUOUS + * @see #CONTROL_EXTENDED_SCENE_MODE_DISABLED + * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE + * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS */ @PublicKey @NonNull - public static final Key CONTROL_BOKEH_MODE = - new Key("android.control.bokehMode", int.class); + public static final Key CONTROL_EXTENDED_SCENE_MODE = + new Key("android.control.extendedSceneMode", int.class); /** *

    The desired zoom ratio

    diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index b4c1d72faed4c..096aa0cd27b3b 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -2118,10 +2118,10 @@ public class CaptureResult extends CameraMetadata> { * capture parameters itself.

    *

    When set to AUTO, the individual algorithm controls in * android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.

    - *

    When set to USE_SCENE_MODE, the individual controls in + *

    When set to USE_SCENE_MODE or USE_EXTENDED_SCENE_MODE, the individual controls in * android.control.* are mostly disabled, and the camera device - * implements one of the scene mode settings (such as ACTION, - * SUNSET, or PARTY) as it wishes. The camera device scene mode + * implements one of the scene mode or extended scene mode settings (such as ACTION, + * SUNSET, PARTY, or BOKEH) as it wishes. The camera device scene mode * 3A settings are provided by {@link android.hardware.camera2.CaptureResult capture results}.

    *

    When set to OFF_KEEP_STATE, it is similar to OFF mode, the only difference * is that this frame will not be used by camera device background 3A statistics @@ -2134,6 +2134,7 @@ public class CaptureResult extends CameraMetadata> { *

  • {@link #CONTROL_MODE_AUTO AUTO}
  • *
  • {@link #CONTROL_MODE_USE_SCENE_MODE USE_SCENE_MODE}
  • *
  • {@link #CONTROL_MODE_OFF_KEEP_STATE OFF_KEEP_STATE}
  • + *
  • {@link #CONTROL_MODE_USE_EXTENDED_SCENE_MODE USE_EXTENDED_SCENE_MODE}
  • *

    *

    Available values for this device:
    * {@link CameraCharacteristics#CONTROL_AVAILABLE_MODES android.control.availableModes}

    @@ -2145,6 +2146,7 @@ public class CaptureResult extends CameraMetadata> { * @see #CONTROL_MODE_AUTO * @see #CONTROL_MODE_USE_SCENE_MODE * @see #CONTROL_MODE_OFF_KEEP_STATE + * @see #CONTROL_MODE_USE_EXTENDED_SCENE_MODE */ @PublicKey @NonNull @@ -2357,52 +2359,49 @@ public class CaptureResult extends CameraMetadata> { new Key("android.control.afSceneChange", int.class); /** - *

    Whether bokeh mode is enabled for a particular capture request.

    + *

    Whether extended scene mode is enabled for a particular capture request.

    *

    With bokeh mode, the camera device may blur out the parts of scene that are not in * focus, creating a bokeh (or shallow depth of field) effect for people or objects.

    - *

    When set to STILL_CAPTURE bokeh mode with STILL_CAPTURE capture intent, due to the extra + *

    When set to BOKEH_STILL_CAPTURE mode with STILL_CAPTURE capture intent, due to the extra * processing needed for high quality bokeh effect, the stall may be longer than when * capture intent is not STILL_CAPTURE.

    - *

    When set to STILL_CAPTURE bokeh mode with PREVIEW capture intent,

    + *

    When set to BOKEH_STILL_CAPTURE mode with PREVIEW capture intent,

    *
      *
    • If the camera device has BURST_CAPTURE capability, the frame rate requirement of * BURST_CAPTURE must still be met.
    • - *
    • All streams not larger than the maximum streaming dimension for STILL_CAPTURE mode - * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES }) + *
    • All streams not larger than the maximum streaming dimension for BOKEH_STILL_CAPTURE mode + * (queried via {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES }) * will have preview bokeh effect applied.
    • *
    - *

    When set to CONTINUOUS mode, configured streams dimension should not exceed this mode's + *

    When set to BOKEH_CONTINUOUS mode, configured streams dimension should not exceed this mode's * maximum streaming dimension in order to have bokeh effect applied. Bokeh effect may not * be available for streams larger than the maximum streaming dimension.

    - *

    Switching between different bokeh modes may involve reconfiguration of the camera + *

    Switching between different extended scene modes may involve reconfiguration of the camera * pipeline, resulting in long latency. The application should check this key against the * available session keys queried via * {@link android.hardware.camera2.CameraCharacteristics#getAvailableSessionKeys }.

    - *

    When bokeh mode is on, the camera device may override certain control parameters, such as - * reduce frame rate or use face priority scene mode, to achieve best power and quality - * tradeoffs. When turned on, AE, AWB, and AF run in auto modes, and only the mandatory - * stream combinations of LIMITED hardware level are guaranteed.

    *

    For a logical multi-camera, bokeh may be implemented by stereo vision from sub-cameras * with different field of view. As a result, when bokeh mode is enabled, the camera device - * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, and the field of view will be smaller than when - * bokeh mode is off.

    + * may override {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} or {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio}, and the field of + * view may be smaller than when bokeh mode is off.

    *

    Possible values: *

      - *
    • {@link #CONTROL_BOKEH_MODE_OFF OFF}
    • - *
    • {@link #CONTROL_BOKEH_MODE_STILL_CAPTURE STILL_CAPTURE}
    • - *
    • {@link #CONTROL_BOKEH_MODE_CONTINUOUS CONTINUOUS}
    • + *
    • {@link #CONTROL_EXTENDED_SCENE_MODE_DISABLED DISABLED}
    • + *
    • {@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE BOKEH_STILL_CAPTURE}
    • + *
    • {@link #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS BOKEH_CONTINUOUS}
    • *

    *

    Optional - The value for this key may be {@code null} on some devices.

    * + * @see CaptureRequest#CONTROL_ZOOM_RATIO * @see CaptureRequest#SCALER_CROP_REGION - * @see #CONTROL_BOKEH_MODE_OFF - * @see #CONTROL_BOKEH_MODE_STILL_CAPTURE - * @see #CONTROL_BOKEH_MODE_CONTINUOUS + * @see #CONTROL_EXTENDED_SCENE_MODE_DISABLED + * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE + * @see #CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS */ @PublicKey @NonNull - public static final Key CONTROL_BOKEH_MODE = - new Key("android.control.bokehMode", int.class); + public static final Key CONTROL_EXTENDED_SCENE_MODE = + new Key("android.control.extendedSceneMode", int.class); /** *

    The desired zoom ratio

    diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java index df77f52bb0345..786db6e20d140 100644 --- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java +++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java @@ -714,12 +714,12 @@ public class CameraMetadataNative implements Parcelable { } }); sGetCommandMap.put( - CameraCharacteristics.CONTROL_AVAILABLE_BOKEH_CAPABILITIES.getNativeKey(), + CameraCharacteristics.CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES.getNativeKey(), new GetCommand() { @Override @SuppressWarnings("unchecked") public T getValue(CameraMetadataNative metadata, Key key) { - return (T) metadata.getBokehCapabilities(); + return (T) metadata.getExtendedSceneModeCapabilities(); } }); } @@ -1442,53 +1442,55 @@ public class CameraMetadataNative implements Parcelable { return samples; } - private Capability[] getBokehCapabilities() { - int[] bokehMaxSizes = getBase(CameraCharacteristics.CONTROL_AVAILABLE_BOKEH_MAX_SIZES); - float[] bokehZoomRanges = getBase( - CameraCharacteristics.CONTROL_AVAILABLE_BOKEH_ZOOM_RATIO_RANGES); + private Capability[] getExtendedSceneModeCapabilities() { + int[] maxSizes = + getBase(CameraCharacteristics.CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_MAX_SIZES); + float[] zoomRanges = getBase( + CameraCharacteristics.CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_ZOOM_RATIO_RANGES); Range zoomRange = getBase(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE); float maxDigitalZoom = getBase(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM); - if (bokehMaxSizes == null) { + if (maxSizes == null) { return null; } - if (bokehMaxSizes.length % 3 != 0) { - throw new AssertionError("availableBokehMaxSizes must be tuples of " + - "[mode, width, height]"); + if (maxSizes.length % 3 != 0) { + throw new AssertionError("availableExtendedSceneModeMaxSizes must be tuples of " + + "[mode, width, height]"); } - int numBokehModes = bokehMaxSizes.length / 3; - int numBokehZoomRanges = 0; - if (bokehZoomRanges != null) { - if (bokehZoomRanges.length % 2 != 0) { - throw new AssertionError("availableBokehZoomRanges must be tuples of " + - "[minZoom, maxZoom]"); + int numExtendedSceneModes = maxSizes.length / 3; + int numExtendedSceneModeZoomRanges = 0; + if (zoomRanges != null) { + if (zoomRanges.length % 2 != 0) { + throw new AssertionError("availableExtendedSceneModeZoomRanges must be tuples of " + + "[minZoom, maxZoom]"); } - numBokehZoomRanges = bokehZoomRanges.length / 2; - if (numBokehModes - numBokehZoomRanges != 1) { - throw new AssertionError("Number of bokeh zoom ranges must be 1 less than " + - "number of supported bokeh modes"); + numExtendedSceneModeZoomRanges = zoomRanges.length / 2; + if (numExtendedSceneModes - numExtendedSceneModeZoomRanges != 1) { + throw new AssertionError("Number of extended scene mode zoom ranges must be 1 " + + "less than number of supported modes"); } } - float bokehOffMinZoomRatio = 1.0f; - float bokehOffMaxZoomRatio = maxDigitalZoom; + float modeOffMinZoomRatio = 1.0f; + float modeOffMaxZoomRatio = maxDigitalZoom; if (zoomRange != null) { - bokehOffMinZoomRatio = zoomRange.getLower(); - bokehOffMaxZoomRatio = zoomRange.getUpper(); + modeOffMinZoomRatio = zoomRange.getLower(); + modeOffMaxZoomRatio = zoomRange.getUpper(); } - Capability[] capabilities = new Capability[numBokehModes]; - for (int i = 0, j = 0; i < numBokehModes; i++) { - int mode = bokehMaxSizes[3 * i]; - int width = bokehMaxSizes[3 * i + 1]; - int height = bokehMaxSizes[3 * i + 2]; - if (mode != CameraMetadata.CONTROL_BOKEH_MODE_OFF && j < numBokehZoomRanges) { - capabilities[i] = new Capability(mode, width, height, bokehZoomRanges[2 * j], - bokehZoomRanges[2 * j + 1]); + Capability[] capabilities = new Capability[numExtendedSceneModes]; + for (int i = 0, j = 0; i < numExtendedSceneModes; i++) { + int mode = maxSizes[3 * i]; + int width = maxSizes[3 * i + 1]; + int height = maxSizes[3 * i + 2]; + if (mode != CameraMetadata.CONTROL_EXTENDED_SCENE_MODE_DISABLED + && j < numExtendedSceneModeZoomRanges) { + capabilities[i] = new Capability(mode, width, height, zoomRanges[2 * j], + zoomRanges[2 * j + 1]); j++; } else { - capabilities[i] = new Capability(mode, width, height, bokehOffMinZoomRatio, - bokehOffMaxZoomRatio); + capabilities[i] = new Capability(mode, width, height, modeOffMinZoomRatio, + modeOffMaxZoomRatio); } } diff --git a/core/java/android/hardware/camera2/params/Capability.java b/core/java/android/hardware/camera2/params/Capability.java index 367690c379601..6f59c5fdcb53c 100644 --- a/core/java/android/hardware/camera2/params/Capability.java +++ b/core/java/android/hardware/camera2/params/Capability.java @@ -30,7 +30,7 @@ import android.util.Size; * Immutable class to store the camera capability, its corresponding maximum * streaming dimension and zoom range. * - * @see CameraCharacteristics#CONTROL_AVAILABLE_BOKEH_CAPABILITIES + * @see CameraCharacteristics#CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES */ public final class Capability { @@ -72,10 +72,10 @@ public final class Capability { /** * Return the supported mode for this capability. * - * @return One of supported modes for the capability. For example, for available bokeh modes, - * this will be one of {@link CameraMetadata#CONTROL_BOKEH_MODE_OFF}, - * {@link CameraMetadata#CONTROL_BOKEH_MODE_STILL_CAPTURE}, and - * {@link CameraMetadata#CONTROL_BOKEH_MODE_CONTINUOUS}. + * @return One of supported modes for the capability. For example, for available extended + * scene modes, this will be one of {@link CameraMetadata#CONTROL_EXTENDED_SCENE_MODE_DISABLED}, + * {@link CameraMetadata#CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE}, and + * {@link CameraMetadata#CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS}. */ public int getMode() { return mMode;