From 8eac699c6e69a9a2bd5eced48e5abbfe69410b56 Mon Sep 17 00:00:00 2001 From: Jayant Chowdhary Date: Wed, 7 Dec 2022 22:37:37 +0000 Subject: [PATCH] camera2: Reduced Ultra high resolution sensors. Add documentation stating that it is possible for camera devices not supporting the ULTRA_HIGH_RESOLUTION_SENSOR capability to still switch sensor pixel modes. Also add documentation to the related *MAXIMUM_RESOLUTION tags mentioning they can be present when the ULTRA_HIGH_RESOLUTION_SENSOR capability is not present. They may also be present when SENSOR_PIXEL_MODE is listed in the available capture request keys. Bug: 261232769 Test: build Change-Id: I0c35ad8e435b68cdfc1d70da8a2e5a96c35e10ba Signed-off-by: Jayant Chowdhary --- .../camera2/CameraCharacteristics.java | 36 +++++++++--- .../hardware/camera2/CameraMetadata.java | 8 +-- .../hardware/camera2/CaptureRequest.java | 55 +++++++++++++++---- .../hardware/camera2/CaptureResult.java | 55 +++++++++++++++---- .../camera2/impl/CameraMetadataNative.java | 11 +++- 5 files changed, 127 insertions(+), 38 deletions(-) diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java index b9b310fcc542a..c95d081f5f7d7 100644 --- a/core/java/android/hardware/camera2/CameraCharacteristics.java +++ b/core/java/android/hardware/camera2/CameraCharacteristics.java @@ -4123,7 +4123,8 @@ public final class CameraCharacteristics extends CameraMetadata + * capability or devices where {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}

*

Units: Pixel coordinates on the image sensor

*

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

* @@ -4148,7 +4149,8 @@ public final class CameraCharacteristics extends CameraMetadata + * capability or devices where {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}

*

Units: Pixels

*

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

* @@ -4172,7 +4174,8 @@ public final class CameraCharacteristics extends CameraMetadata + * capability or devices where {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}

*

Units: Pixel coordinates on the image sensor

*

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

* @@ -4192,14 +4195,29 @@ public final class CameraCharacteristics extends CameraMetadata - *

This key will not be present if REMOSAIC_REPROCESSING is not supported, since RAW images - * will have a regular bayer pattern.

- *

This key will not be present for sensors which don't have the - * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability.

+ * the same color filter. + * In case the device has the + * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } + * capability :

+ *
    + *
  • This key will not be present if REMOSAIC_REPROCESSING is not supported, since RAW + * images will have a regular bayer pattern.
  • + *
+ *

In case the device does not have the + * {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } + * capability :

+ *
    + *
  • This key will be present if + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}, since RAW + * images may not necessarily have a regular bayer pattern when + * {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}} is set to + * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.
  • + *
*

Units: Pixels

*

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

+ * + * @see CaptureRequest#SENSOR_PIXEL_MODE */ @PublicKey @NonNull diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java index 705afc59f36fc..ed2a198dd6ed4 100644 --- a/core/java/android/hardware/camera2/CameraMetadata.java +++ b/core/java/android/hardware/camera2/CameraMetadata.java @@ -3645,17 +3645,13 @@ public abstract class CameraMetadata { // /** - *

This is the default sensor pixel mode. This is the only sensor pixel mode - * supported unless a camera device advertises - * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }.

+ *

This is the default sensor pixel mode.

* @see CaptureRequest#SENSOR_PIXEL_MODE */ public static final int SENSOR_PIXEL_MODE_DEFAULT = 0; /** - *

This sensor pixel mode is offered by devices with capability - * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }. - * In this mode, sensors typically do not bin pixels, as a result can offer larger + *

In this mode, sensors typically do not bin pixels, as a result can offer larger * image sizes.

* @see CaptureRequest#SENSOR_PIXEL_MODE */ diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java index 381c87d39cac0..929868b2facaa 100644 --- a/core/java/android/hardware/camera2/CaptureRequest.java +++ b/core/java/android/hardware/camera2/CaptureRequest.java @@ -1430,7 +1430,9 @@ public final class CaptureRequest extends CameraMetadata> * mode.

*

For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, + * capability or devices where + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}} * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to @@ -1660,7 +1662,10 @@ public final class CaptureRequest extends CameraMetadata> * mode.

*

For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / + * capability or devices where + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}, + * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.

@@ -1882,7 +1887,10 @@ public final class CaptureRequest extends CameraMetadata> * mode.

*

For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / + * capability or devices where + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}, + * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.

@@ -3169,7 +3177,9 @@ public final class CaptureRequest extends CameraMetadata> * {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details.

*

For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / + * capability or devices where {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}

+ *

{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.

@@ -3517,13 +3527,10 @@ public final class CaptureRequest extends CameraMetadata> * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT } mode. * When operating in * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT } mode, sensors - * with {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability would typically perform pixel binning in order to improve low light + * would typically perform pixel binning in order to improve low light * performance, noise reduction etc. However, in * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION } - * mode (supported only - * by {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * sensors), sensors typically operate in unbinned mode allowing for a larger image size. + * mode, sensors typically operate in unbinned mode allowing for a larger image size. * The stream configurations supported in * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION } * mode are also different from those of @@ -3537,7 +3544,32 @@ public final class CaptureRequest extends CameraMetadata> * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap} * must not be mixed in the same CaptureRequest. In other words, these outputs are * exclusive to each other. - * This key does not need to be set for reprocess requests.

+ * This key does not need to be set for reprocess requests. + * This key will be be present on devices supporting the + * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } + * capability. It may also be present on devices which do not support the aforementioned + * capability. In that case:

+ *
    + *
  • + *

    The mandatory stream combinations listed in + * {@link android.hardware.camera2.CameraCharacteristics.mandatoryMaximumResolutionStreamCombinations } + * would not apply.

    + *
  • + *
  • + *

    The bayer pattern of {@code RAW} streams when + * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION } + * is selected will be the one listed in {@link android.sensor.info.binningFactor }.

    + *
  • + *
  • + *

    The following keys will always be present:

    + *
      + *
    • {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}
    • + *
    • {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution}
    • + *
    • {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.pixelArraySizeMaximumResolution}
    • + *
    • {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution}
    • + *
    + *
  • + *
*

Possible values:

*
    *
  • {@link #SENSOR_PIXEL_MODE_DEFAULT DEFAULT}
  • @@ -3548,6 +3580,9 @@ public final class CaptureRequest extends CameraMetadata> * * @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP * @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION + * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION + * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION + * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION * @see #SENSOR_PIXEL_MODE_DEFAULT * @see #SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION */ diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java index 635e79c013990..a429f30c9a9e3 100644 --- a/core/java/android/hardware/camera2/CaptureResult.java +++ b/core/java/android/hardware/camera2/CaptureResult.java @@ -849,7 +849,9 @@ public class CaptureResult extends CameraMetadata> { * mode.

    *

    For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, + * capability or devices where + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}} * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to @@ -1329,7 +1331,10 @@ public class CaptureResult extends CameraMetadata> { * mode.

    *

    For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / + * capability or devices where + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}, + * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.

    @@ -1962,7 +1967,10 @@ public class CaptureResult extends CameraMetadata> { * mode.

    *

    For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / + * capability or devices where + * {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}, + * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.

    @@ -3831,7 +3839,9 @@ public class CaptureResult extends CameraMetadata> { * {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details.

    *

    For camera devices with the * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability, {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / + * capability or devices where {@link CameraCharacteristics#getAvailableCaptureRequestKeys } + * lists {@link CaptureRequest#SENSOR_PIXEL_MODE {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}}

    + *

    {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution} / * {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution} must be used as the * coordinate system for requests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.

    @@ -4442,13 +4452,10 @@ public class CaptureResult extends CameraMetadata> { * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT } mode. * When operating in * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT } mode, sensors - * with {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * capability would typically perform pixel binning in order to improve low light + * would typically perform pixel binning in order to improve low light * performance, noise reduction etc. However, in * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION } - * mode (supported only - * by {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } - * sensors), sensors typically operate in unbinned mode allowing for a larger image size. + * mode, sensors typically operate in unbinned mode allowing for a larger image size. * The stream configurations supported in * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION } * mode are also different from those of @@ -4462,7 +4469,32 @@ public class CaptureResult extends CameraMetadata> { * {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap} * must not be mixed in the same CaptureRequest. In other words, these outputs are * exclusive to each other. - * This key does not need to be set for reprocess requests.

    + * This key does not need to be set for reprocess requests. + * This key will be be present on devices supporting the + * {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR } + * capability. It may also be present on devices which do not support the aforementioned + * capability. In that case:

    + *
      + *
    • + *

      The mandatory stream combinations listed in + * {@link android.hardware.camera2.CameraCharacteristics.mandatoryMaximumResolutionStreamCombinations } + * would not apply.

      + *
    • + *
    • + *

      The bayer pattern of {@code RAW} streams when + * {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION } + * is selected will be the one listed in {@link android.sensor.info.binningFactor }.

      + *
    • + *
    • + *

      The following keys will always be present:

      + *
        + *
      • {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}
      • + *
      • {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.activeArraySizeMaximumResolution}
      • + *
      • {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.pixelArraySizeMaximumResolution}
      • + *
      • {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution}
      • + *
      + *
    • + *
    *

    Possible values:

    *
      *
    • {@link #SENSOR_PIXEL_MODE_DEFAULT DEFAULT}
    • @@ -4473,6 +4505,9 @@ public class CaptureResult extends CameraMetadata> { * * @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP * @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION + * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION + * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION + * @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION * @see #SENSOR_PIXEL_MODE_DEFAULT * @see #SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION */ diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java index 9640b0e506dab..2c486bb4de348 100644 --- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java +++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java @@ -1612,15 +1612,20 @@ public class CameraMetadataNative implements Parcelable { } private StreamConfigurationMap getStreamConfigurationMapMaximumResolution() { - if (!isUltraHighResolutionSensor()) { - return null; - } StreamConfiguration[] configurations = getBase( CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION); StreamConfigurationDuration[] minFrameDurations = getBase( CameraCharacteristics.SCALER_AVAILABLE_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION); StreamConfigurationDuration[] stallDurations = getBase( CameraCharacteristics.SCALER_AVAILABLE_STALL_DURATIONS_MAXIMUM_RESOLUTION); + // If the at least these keys haven't been advertised, there cannot be a meaningful max + // resolution StreamConfigurationMap + if (configurations == null || + minFrameDurations == null || + stallDurations == null) { + return null; + } + StreamConfiguration[] depthConfigurations = getBase( CameraCharacteristics.DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION); StreamConfigurationDuration[] depthMinFrameDurations = getBase(