Merge "camera2: Add support for quad bayer sensors." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fc314c712b
@@ -17859,6 +17859,7 @@ package android.hardware.camera2 {
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION_MAXIMUM_RESOLUTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
|
||||
@@ -17868,6 +17869,7 @@ package android.hardware.camera2 {
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
|
||||
@@ -17887,9 +17889,11 @@ package android.hardware.camera2 {
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SCALER_DEFAULT_SECURE_IMAGE_SIZE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MultiResolutionStreamConfigurationMap> SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
|
||||
@@ -17899,13 +17903,17 @@ package android.hardware.camera2 {
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_BINNING_FACTOR;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
|
||||
field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
|
||||
@@ -18202,8 +18210,10 @@ package android.hardware.camera2 {
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING = 4; // 0x4
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_RAW = 3; // 0x3
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS = 5; // 0x5
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING = 17; // 0x11
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA = 13; // 0xd
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA = 14; // 0xe
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR = 16; // 0x10
|
||||
field public static final int REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING = 7; // 0x7
|
||||
field public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0; // 0x0
|
||||
field public static final int SCALER_CROPPING_TYPE_FREEFORM = 1; // 0x1
|
||||
@@ -18221,6 +18231,8 @@ package android.hardware.camera2 {
|
||||
field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0; // 0x0
|
||||
field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME = 1; // 0x1
|
||||
field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN = 0; // 0x0
|
||||
field public static final int SENSOR_PIXEL_MODE_DEFAULT = 0; // 0x0
|
||||
field public static final int SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION = 1; // 0x1
|
||||
field public static final int SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10; // 0xa
|
||||
field public static final int SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14; // 0xe
|
||||
field public static final int SENSOR_REFERENCE_ILLUMINANT1_D50 = 23; // 0x17
|
||||
@@ -18350,6 +18362,7 @@ package android.hardware.camera2 {
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SCALER_ROTATE_AND_CROP;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_PIXEL_MODE;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
|
||||
@@ -18453,6 +18466,8 @@ package android.hardware.camera2 {
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_PIXEL_MODE;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> SENSOR_RAW_BINNING_FACTOR_USED;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
|
||||
field @NonNull public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
|
||||
@@ -18627,6 +18642,7 @@ package android.hardware.camera2.params {
|
||||
ctor public OutputConfiguration(@NonNull android.view.Surface);
|
||||
ctor public OutputConfiguration(int, @NonNull android.view.Surface);
|
||||
ctor public OutputConfiguration(@NonNull android.util.Size, @NonNull Class<T>);
|
||||
method public void addSensorPixelModeUsed(int);
|
||||
method public void addSurface(@NonNull android.view.Surface);
|
||||
method @NonNull public static java.util.Collection<android.hardware.camera2.params.OutputConfiguration> createInstancesForMultiResolutionOutput(@NonNull android.hardware.camera2.MultiResolutionImageReader);
|
||||
method public int describeContents();
|
||||
@@ -18635,6 +18651,7 @@ package android.hardware.camera2.params {
|
||||
method @Nullable public android.view.Surface getSurface();
|
||||
method public int getSurfaceGroupId();
|
||||
method @NonNull public java.util.List<android.view.Surface> getSurfaces();
|
||||
method public void removeSensorPixelModeUsed(int);
|
||||
method public void removeSurface(@NonNull android.view.Surface);
|
||||
method public void setPhysicalCameraId(@Nullable String);
|
||||
method public void writeToParcel(android.os.Parcel, int);
|
||||
|
||||
@@ -1209,6 +1209,25 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
public static final Key<android.util.Range<Float>> CONTROL_ZOOM_RATIO_RANGE =
|
||||
new Key<android.util.Range<Float>>("android.control.zoomRatioRange", new TypeReference<android.util.Range<Float>>() {{ }});
|
||||
|
||||
/**
|
||||
* <p>List of available high speed video size, fps range and max batch size configurations
|
||||
* supported by the camera device, in the format of
|
||||
* (width, height, fps_min, fps_max, batch_size_max),
|
||||
* when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.control.availableHighSpeedVideoConfigurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Range of valid values:</b><br></p>
|
||||
* <p>For each configuration, the fps_max >= 120fps.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.HighSpeedVideoConfiguration[]> CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.HighSpeedVideoConfiguration[]>("android.control.availableHighSpeedVideoConfigurationsMaximumResolution", android.hardware.camera2.params.HighSpeedVideoConfiguration[].class);
|
||||
|
||||
/**
|
||||
* <p>List of edge enhancement modes for {@link CaptureRequest#EDGE_MODE android.edge.mode} that are supported by this camera
|
||||
* device.</p>
|
||||
@@ -1769,6 +1788,48 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
public static final Key<float[]> LENS_DISTORTION =
|
||||
new Key<float[]>("android.lens.distortion", float[].class);
|
||||
|
||||
/**
|
||||
* <p>The correction coefficients to correct for this camera device's
|
||||
* radial and tangential lens distortion for a
|
||||
* CaptureRequest with {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to {@link CameraCharacteristics#LENS_DISTORTION android.lens.distortion}, when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Units</b>:
|
||||
* Unitless coefficients.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
|
||||
*
|
||||
* @see CameraCharacteristics#LENS_DISTORTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<float[]> LENS_DISTORTION_MAXIMUM_RESOLUTION =
|
||||
new Key<float[]>("android.lens.distortionMaximumResolution", float[].class);
|
||||
|
||||
/**
|
||||
* <p>The parameters for this camera device's intrinsic
|
||||
* calibration when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to {@link CameraCharacteristics#LENS_INTRINSIC_CALIBRATION android.lens.intrinsicCalibration}, when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Units</b>:
|
||||
* Pixels in the
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION android.sensor.info.preCorrectionActiveArraySizeMaximumResolution}
|
||||
* coordinate system.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
* <p><b>Permission {@link android.Manifest.permission#CAMERA } is needed to access this property</b></p>
|
||||
*
|
||||
* @see CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<float[]> LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION =
|
||||
new Key<float[]>("android.lens.intrinsicCalibrationMaximumResolution", float[].class);
|
||||
|
||||
/**
|
||||
* <p>List of noise reduction modes for {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode} that are supported
|
||||
* by this camera device.</p>
|
||||
@@ -2056,6 +2117,8 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
* <li>{@link #REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA SECURE_IMAGE_DATA}</li>
|
||||
* <li>{@link #REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA SYSTEM_CAMERA}</li>
|
||||
* <li>{@link #REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING OFFLINE_PROCESSING}</li>
|
||||
* <li>{@link #REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR ULTRA_HIGH_RESOLUTION_SENSOR}</li>
|
||||
* <li>{@link #REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING REMOSAIC_REPROCESSING}</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>This key is available on all devices.</p>
|
||||
@@ -2077,6 +2140,8 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
* @see #REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
|
||||
* @see #REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA
|
||||
* @see #REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING
|
||||
* @see #REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
|
||||
* @see #REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -2535,8 +2600,6 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
* set to either OFF or FAST.</p>
|
||||
* <p>When multiple streams are used in a request, the minimum frame
|
||||
* duration will be max(individual stream min durations).</p>
|
||||
* <p>The minimum frame duration of a stream (of a particular format, size)
|
||||
* is the same regardless of whether the stream is input or output.</p>
|
||||
* <p>See {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} and
|
||||
* android.scaler.availableStallDurations for more details about
|
||||
* calculating the max frame rate.</p>
|
||||
@@ -2916,10 +2979,10 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
* configurations which belong to this physical camera, and it will advertise and will only
|
||||
* advertise the maximum supported resolutions for a particular format.</p>
|
||||
* <p>If this camera device isn't a physical camera device constituting a logical camera,
|
||||
* but a standalone ULTRA_HIGH_RESOLUTION_SENSOR camera, this field represents the
|
||||
* multi-resolution input/output stream configurations of default mode and max resolution
|
||||
* modes. The sizes will be the maximum resolution of a particular format for default mode
|
||||
* and max resolution mode.</p>
|
||||
* but a standalone {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* camera, this field represents the multi-resolution input/output stream configurations of
|
||||
* default mode and max resolution modes. The sizes will be the maximum resolution of a
|
||||
* particular format for default mode and max resolution mode.</p>
|
||||
* <p>This field will only be advertised if the device is a physical camera of a
|
||||
* logical multi-camera device or an ultra high resolution sensor camera. For a logical
|
||||
* multi-camera, the camera API will derive the logical camera’s multi-resolution stream
|
||||
@@ -2976,6 +3039,132 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
public static final Key<android.hardware.camera2.params.MultiResolutionStreamConfigurationMap> SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP =
|
||||
new Key<android.hardware.camera2.params.MultiResolutionStreamConfigurationMap>("android.scaler.multiResolutionStreamConfigurationMap", android.hardware.camera2.params.MultiResolutionStreamConfigurationMap.class);
|
||||
|
||||
/**
|
||||
* <p>The available stream configurations that this
|
||||
* camera device supports (i.e. format, width, height, output/input stream) for a
|
||||
* CaptureRequest with {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.scaler.availableStreamConfigurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Not all output formats may be supported in a configuration with
|
||||
* an input stream of a particular format. For more details, see
|
||||
* android.scaler.availableInputOutputFormatsMapMaximumResolution.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfiguration[]> SCALER_AVAILABLE_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfiguration[]>("android.scaler.availableStreamConfigurationsMaximumResolution", android.hardware.camera2.params.StreamConfiguration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the minimum frame duration for each
|
||||
* format/size combination when the camera device is sent a CaptureRequest with
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.scaler.availableMinFrameDurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>When multiple streams are used in a request (if supported, when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}
|
||||
* is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }), the
|
||||
* minimum frame duration will be max(individual stream min durations).</p>
|
||||
* <p>See {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} and
|
||||
* android.scaler.availableStallDurationsMaximumResolution for more details about
|
||||
* calculating the max frame rate.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_FRAME_DURATION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> SCALER_AVAILABLE_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.scaler.availableMinFrameDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the maximum stall duration for each
|
||||
* output format/size combination when CaptureRequests are submitted with
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }</p>
|
||||
* <p>Analogous to android.scaler.availableMinFrameDurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> SCALER_AVAILABLE_STALL_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.scaler.availableStallDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>The available stream configurations that this
|
||||
* camera device supports when given a CaptureRequest with {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}
|
||||
* set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION };
|
||||
* also includes the minimum frame durations
|
||||
* and the stall durations for each format/size combination.</p>
|
||||
* <p>Analogous to {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap} for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@SyntheticKey
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationMap>("android.scaler.streamConfigurationMapMaximumResolution", android.hardware.camera2.params.StreamConfigurationMap.class);
|
||||
|
||||
/**
|
||||
* <p>The mapping of image formats that are supported by this
|
||||
* camera device for input streams, to their corresponding output formats, when
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.scaler.availableInputOutputFormatsMap for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.ReprocessFormatsMap> SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.ReprocessFormatsMap>("android.scaler.availableInputOutputFormatsMapMaximumResolution", android.hardware.camera2.params.ReprocessFormatsMap.class);
|
||||
|
||||
/**
|
||||
* <p>An array of mandatory stream combinations which are applicable when
|
||||
* {@link android.hardware.camera2.CaptureRequest } has {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set
|
||||
* to {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.
|
||||
* This is an app-readable conversion of the maximum resolution mandatory stream combination
|
||||
* {@link android.hardware.camera2.CameraDevice#createCaptureSession tables}.</p>
|
||||
* <p>The array of
|
||||
* {@link android.hardware.camera2.params.MandatoryStreamCombination combinations} is
|
||||
* generated according to the documented
|
||||
* {@link android.hardware.camera2.CameraDevice#createCaptureSession guideline} for each
|
||||
* device which has the
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* capability.
|
||||
* Clients can use the array as a quick reference to find an appropriate camera stream
|
||||
* combination.
|
||||
* The mandatory stream combination array will be {@code null} in case the device is not an
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* device.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@SyntheticKey
|
||||
public static final Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS =
|
||||
new Key<android.hardware.camera2.params.MandatoryStreamCombination[]>("android.scaler.mandatoryMaximumResolutionStreamCombinations", android.hardware.camera2.params.MandatoryStreamCombination[].class);
|
||||
|
||||
/**
|
||||
* <p>The area of the image sensor which corresponds to active pixels after any geometric
|
||||
* distortion correction has been applied.</p>
|
||||
@@ -3291,6 +3480,101 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
public static final Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE =
|
||||
new Key<android.graphics.Rect>("android.sensor.info.preCorrectionActiveArraySize", android.graphics.Rect.class);
|
||||
|
||||
/**
|
||||
* <p>The area of the image sensor which corresponds to active pixels after any geometric
|
||||
* distortion correction has been applied, when the sensor runs in maximum resolution mode.</p>
|
||||
* <p>Analogous to {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}, when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode}
|
||||
* is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.
|
||||
* Refer to {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} for details, with sensor array related keys
|
||||
* replaced with their
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }
|
||||
* counterparts.
|
||||
* This key will only be present for devices which advertise the
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* capability.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates on the image sensor</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION =
|
||||
new Key<android.graphics.Rect>("android.sensor.info.activeArraySizeMaximumResolution", android.graphics.Rect.class);
|
||||
|
||||
/**
|
||||
* <p>Dimensions of the full pixel array, possibly
|
||||
* including black calibration pixels, when the sensor runs in maximum resolution mode.
|
||||
* Analogous to {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}, when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is
|
||||
* set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>The pixel count of the full pixel array of the image sensor, which covers
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PHYSICAL_SIZE android.sensor.info.physicalSize} area. This represents the full pixel dimensions of
|
||||
* the raw buffers produced by this sensor, when it runs in maximum resolution mode. That
|
||||
* is, when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.
|
||||
* This key will only be present for devices which advertise the
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* capability.</p>
|
||||
* <p><b>Units</b>: Pixels</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PHYSICAL_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION =
|
||||
new Key<android.util.Size>("android.sensor.info.pixelArraySizeMaximumResolution", android.util.Size.class);
|
||||
|
||||
/**
|
||||
* <p>The area of the image sensor which corresponds to active pixels prior to the
|
||||
* application of any geometric distortion correction, when the sensor runs in maximum
|
||||
* resolution mode. This key must be used for crop / metering regions, only when
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize},
|
||||
* when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.
|
||||
* This key will only be present for devices which advertise the
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* capability.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates on the image sensor</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION =
|
||||
new Key<android.graphics.Rect>("android.sensor.info.preCorrectionActiveArraySizeMaximumResolution", android.graphics.Rect.class);
|
||||
|
||||
/**
|
||||
* <p>Dimensions of the group of pixels which are under the same color filter.
|
||||
* This specifies the width and height (pair of integers) of the group of pixels which fall
|
||||
* under the same color filter for ULTRA_HIGH_RESOLUTION sensors.</p>
|
||||
* <p>Sensors can have pixels grouped together under the same color filter in order
|
||||
* to improve various aspects of imaging such as noise reduction, low light
|
||||
* performance etc. These groups can be of various sizes such as 2X2 (quad bayer),
|
||||
* 3X3 (nona-bayer). This key specifies the length and width of the pixels grouped under
|
||||
* the same color filter.</p>
|
||||
* <p>This key will not be present if REMOSAIC_REPROCESSING is not supported, since RAW images
|
||||
* will have a regular bayer pattern.</p>
|
||||
* <p>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.</p>
|
||||
* <p><b>Units</b>: Pixels</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<android.util.Size> SENSOR_INFO_BINNING_FACTOR =
|
||||
new Key<android.util.Size>("android.sensor.info.binningFactor", android.util.Size.class);
|
||||
|
||||
/**
|
||||
* <p>The standard reference illuminant used as the scene light source when
|
||||
* calculating the {@link CameraCharacteristics#SENSOR_COLOR_TRANSFORM1 android.sensor.colorTransform1},
|
||||
@@ -4149,6 +4433,111 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDynamicDepthStallDurations", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>The available depth dataspace stream
|
||||
* configurations that this camera device supports
|
||||
* (i.e. format, width, height, output/input stream) when a CaptureRequest is submitted with
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.depth.availableDepthStreamConfigurations, for configurations which
|
||||
* are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfiguration[]> DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfiguration[]>("android.depth.availableDepthStreamConfigurationsMaximumResolution", android.hardware.camera2.params.StreamConfiguration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the minimum frame duration for each
|
||||
* format/size combination for depth output formats when a CaptureRequest is submitted with
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.depth.availableDepthMinFrameDurations, for configurations which
|
||||
* are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>See {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} and
|
||||
* android.scaler.availableStallDurationsMaximumResolution for more details about
|
||||
* calculating the max frame rate.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_FRAME_DURATION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDepthMinFrameDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the maximum stall duration for each
|
||||
* output format/size combination for depth streams for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.depth.availableDepthStallDurations, for configurations which
|
||||
* are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDepthStallDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>The available dynamic depth dataspace stream
|
||||
* configurations that this camera device supports (i.e. format, width, height,
|
||||
* output/input stream) for CaptureRequests where {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.depth.availableDynamicDepthStreamConfigurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfiguration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfiguration[]>("android.depth.availableDynamicDepthStreamConfigurationsMaximumResolution", android.hardware.camera2.params.StreamConfiguration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the minimum frame duration for each
|
||||
* format/size combination for dynamic depth output streams for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.depth.availableDynamicDepthMinFrameDurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDynamicDepthMinFrameDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the maximum stall duration for each
|
||||
* output format/size combination for dynamic depth streams for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Analogous to android.depth.availableDynamicDepthStallDurations, for configurations
|
||||
* which are applicable when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.depth.availableDynamicDepthStallDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>String containing the ids of the underlying physical cameras.</p>
|
||||
* <p>For a logical camera, this is concatenation of all underlying physical camera IDs.
|
||||
@@ -4286,6 +4675,47 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> HEIC_AVAILABLE_HEIC_STALL_DURATIONS =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.heic.availableHeicStallDurations", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>The available HEIC (ISO/IEC 23008-12) stream
|
||||
* configurations that this camera device supports
|
||||
* (i.e. format, width, height, output/input stream).</p>
|
||||
* <p>Refer to android.heic.availableHeicStreamConfigurations for details.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfiguration[]> HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfiguration[]>("android.heic.availableHeicStreamConfigurationsMaximumResolution", android.hardware.camera2.params.StreamConfiguration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the minimum frame duration for each
|
||||
* format/size combination for HEIC output formats for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Refer to android.heic.availableHeicMinFrameDurations for details.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.heic.availableHeicMinFrameDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/**
|
||||
* <p>This lists the maximum stall duration for each
|
||||
* output format/size combination for HEIC streams for CaptureRequests where
|
||||
* {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }.</p>
|
||||
* <p>Refer to android.heic.availableHeicStallDurations for details.</p>
|
||||
* <p><b>Units</b>: (format, width, height, ns) x n</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @hide
|
||||
*/
|
||||
public static final Key<android.hardware.camera2.params.StreamConfigurationDuration[]> HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION =
|
||||
new Key<android.hardware.camera2.params.StreamConfigurationDuration[]>("android.heic.availableHeicStallDurationsMaximumResolution", android.hardware.camera2.params.StreamConfigurationDuration[].class);
|
||||
|
||||
/*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
|
||||
* End generated code
|
||||
*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~O@*/
|
||||
|
||||
@@ -507,6 +507,18 @@ public final class CameraManager {
|
||||
return new CameraExtensionCharacteristics(mContext, cameraId, chars);
|
||||
}
|
||||
|
||||
private Map<String, CameraCharacteristics> getPhysicalIdToCharsMap(
|
||||
CameraCharacteristics chars) throws CameraAccessException {
|
||||
HashMap<String, CameraCharacteristics> physicalIdsToChars =
|
||||
new HashMap<String, CameraCharacteristics>();
|
||||
Set<String> physicalCameraIds = chars.getPhysicalCameraIds();
|
||||
for (String physicalCameraId : physicalCameraIds) {
|
||||
CameraCharacteristics physicalChars = getCameraCharacteristics(physicalCameraId);
|
||||
physicalIdsToChars.put(physicalCameraId, physicalChars);
|
||||
}
|
||||
return physicalIdsToChars;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for opening a connection to a camera with the given ID.
|
||||
*
|
||||
@@ -535,17 +547,18 @@ public final class CameraManager {
|
||||
throws CameraAccessException {
|
||||
CameraCharacteristics characteristics = getCameraCharacteristics(cameraId);
|
||||
CameraDevice device = null;
|
||||
|
||||
Map<String, CameraCharacteristics> physicalIdsToChars =
|
||||
getPhysicalIdToCharsMap(characteristics);
|
||||
synchronized (mLock) {
|
||||
|
||||
ICameraDeviceUser cameraUser = null;
|
||||
|
||||
android.hardware.camera2.impl.CameraDeviceImpl deviceImpl =
|
||||
new android.hardware.camera2.impl.CameraDeviceImpl(
|
||||
cameraId,
|
||||
callback,
|
||||
executor,
|
||||
characteristics,
|
||||
physicalIdsToChars,
|
||||
mContext.getApplicationInfo().targetSdkVersion,
|
||||
mContext);
|
||||
|
||||
|
||||
@@ -586,7 +586,7 @@ public abstract class CameraMetadata<TKey> {
|
||||
* that is, {@link android.graphics.ImageFormat#PRIVATE } is included in the lists of
|
||||
* formats returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputFormats } and {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputFormats }.</li>
|
||||
* <li>{@link android.hardware.camera2.params.StreamConfigurationMap#getValidOutputFormatsForInput }
|
||||
* returns non empty int[] for each supported input format returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputFormats }.</li>
|
||||
* returns non-empty int[] for each supported input format returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputFormats }.</li>
|
||||
* <li>Each size returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputSizes getInputSizes(ImageFormat.PRIVATE)} is also included in {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes getOutputSizes(ImageFormat.PRIVATE)}</li>
|
||||
* <li>Using {@link android.graphics.ImageFormat#PRIVATE } does not cause a frame rate drop
|
||||
* relative to the sensor's maximum capture rate (at that resolution).</li>
|
||||
@@ -1114,6 +1114,63 @@ public abstract class CameraMetadata<TKey> {
|
||||
*/
|
||||
public static final int REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING = 15;
|
||||
|
||||
/**
|
||||
* <p>This camera device is capable of producing ultra high resolution images in
|
||||
* addition to the image sizes described in the
|
||||
* {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap}.
|
||||
* It can operate in 'default' mode and 'max resolution' mode. It generally does this
|
||||
* by binning pixels in 'default' mode and not binning them in 'max resolution' mode.
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap}</code> describes the streams supported in 'default'
|
||||
* mode.
|
||||
* The stream configurations supported in 'max resolution' mode are described by
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}</code>.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
|
||||
*/
|
||||
public static final int REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR = 16;
|
||||
|
||||
/**
|
||||
* <p>The device supports reprocessing from the <code>RAW_SENSOR</code> format with a bayer pattern
|
||||
* given by {@link CameraCharacteristics#SENSOR_INFO_BINNING_FACTOR android.sensor.info.binningFactor} (m x n group of pixels with the same
|
||||
* color filter) to a remosaiced regular bayer pattern.</p>
|
||||
* <p>This capability will only be present for devices with
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* capability. When
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* devices do not advertise this capability,
|
||||
* {@link android.graphics.ImageFormat#RAW_SENSOR } images will already have a
|
||||
* regular bayer pattern.</p>
|
||||
* <p>If a <code>RAW_SENSOR</code> stream is requested along with another non-RAW stream in a
|
||||
* {@link android.hardware.camera2.CaptureRequest } (if multiple streams are supported
|
||||
* when {@link CaptureRequest#SENSOR_PIXEL_MODE android.sensor.pixelMode} is set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }),
|
||||
* the <code>RAW_SENSOR</code> stream will have a regular bayer pattern.</p>
|
||||
* <p>This capability requires the camera device to support the following :
|
||||
* * The {@link android.hardware.camera2.params.StreamConfigurationMap } mentioned below
|
||||
* refers to the one, described by
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}</code>.
|
||||
* * One input stream is supported, that is, <code>{@link CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS android.request.maxNumInputStreams} == 1</code>.
|
||||
* * {@link android.graphics.ImageFormat#RAW_SENSOR } is supported as an output/input
|
||||
* format, that is, {@link android.graphics.ImageFormat#RAW_SENSOR } is included in the
|
||||
* lists of formats returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputFormats } and {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputFormats }.
|
||||
* * {@link android.hardware.camera2.params.StreamConfigurationMap#getValidOutputFormatsForInput }
|
||||
* returns non-empty int[] for each supported input format returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputFormats }.
|
||||
* * Each size returned by {@link android.hardware.camera2.params.StreamConfigurationMap#getInputSizes getInputSizes(ImageFormat.RAW_SENSOR)} is also included in {@link android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes getOutputSizes(ImageFormat.RAW_SENSOR)}
|
||||
* * Using {@link android.graphics.ImageFormat#RAW_SENSOR } does not cause a frame rate
|
||||
* drop relative to the sensor's maximum capture rate (at that resolution).
|
||||
* * No CaptureRequest controls will be applicable when a request has an input target
|
||||
* with {@link android.graphics.ImageFormat#RAW_SENSOR } format.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_BINNING_FACTOR
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
* @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
|
||||
*/
|
||||
public static final int REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING = 17;
|
||||
|
||||
//
|
||||
// Enumeration values for CameraCharacteristics#SCALER_CROPPING_TYPE
|
||||
//
|
||||
@@ -2954,6 +3011,27 @@ public abstract class CameraMetadata<TKey> {
|
||||
*/
|
||||
public static final int SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256;
|
||||
|
||||
//
|
||||
// Enumeration values for CaptureRequest#SENSOR_PIXEL_MODE
|
||||
//
|
||||
|
||||
/**
|
||||
* <p>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 }.</p>
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
public static final int SENSOR_PIXEL_MODE_DEFAULT = 0;
|
||||
|
||||
/**
|
||||
* <p>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
|
||||
* image sizes.</p>
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
public static final int SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION = 1;
|
||||
|
||||
//
|
||||
// Enumeration values for CaptureRequest#SHADING_MODE
|
||||
//
|
||||
|
||||
@@ -1391,6 +1391,13 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* scene as they do before. See {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details. Whether to use
|
||||
* activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
|
||||
* mode.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates within {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on
|
||||
* distortion correction capability and mode</p>
|
||||
@@ -1405,7 +1412,10 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
|
||||
* @see CaptureRequest#SCALER_CROP_REGION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -1603,6 +1613,12 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* scene as they do before. See {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details. Whether to use
|
||||
* activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
|
||||
* mode.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates within {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on
|
||||
* distortion correction capability and mode</p>
|
||||
@@ -1617,7 +1633,10 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
|
||||
* @see CaptureRequest#SCALER_CROP_REGION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -1808,6 +1827,12 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* the scene as they do before. See {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details. Whether to use
|
||||
* activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
|
||||
* mode.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates within {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on
|
||||
* distortion correction capability and mode</p>
|
||||
@@ -1822,7 +1847,10 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
|
||||
* @see CaptureRequest#SCALER_CROP_REGION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -2896,6 +2924,12 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* coordinate system is post-zoom, meaning that the activeArraySize or
|
||||
* preCorrectionActiveArraySize covers the camera device's field of view "after" zoom. See
|
||||
* {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates relative to
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on distortion correction
|
||||
@@ -2908,7 +2942,10 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
* @see CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
|
||||
* @see CameraCharacteristics#SCALER_CROPPING_TYPE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -3213,6 +3250,53 @@ public final class CaptureRequest extends CameraMetadata<CaptureRequest.Key<?>>
|
||||
public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
|
||||
new Key<Integer>("android.sensor.testPatternMode", int.class);
|
||||
|
||||
/**
|
||||
* <p>Switches sensor pixel mode between maximum resolution mode and default mode.</p>
|
||||
* <p>This key controls whether the camera sensor operates in
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }
|
||||
* mode or not. By default, all camera devices operate in
|
||||
* {@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
|
||||
* 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.
|
||||
* The stream configurations supported in
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }
|
||||
* mode are also different from those of
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT } mode.
|
||||
* They can be queried through
|
||||
* {@link android.hardware.camera2.CameraCharacteristics#get } with
|
||||
* {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION) }.
|
||||
* Unless reported by both
|
||||
* {@link android.hardware.camera2.params.StreamConfigurationMap }s, the outputs from
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}</code> and
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap}</code>
|
||||
* 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.</p>
|
||||
* <p><b>Possible values:</b></p>
|
||||
* <ul>
|
||||
* <li>{@link #SENSOR_PIXEL_MODE_DEFAULT DEFAULT}</li>
|
||||
* <li>{@link #SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION MAXIMUM_RESOLUTION}</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION
|
||||
* @see #SENSOR_PIXEL_MODE_DEFAULT
|
||||
* @see #SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<Integer> SENSOR_PIXEL_MODE =
|
||||
new Key<Integer>("android.sensor.pixelMode", int.class);
|
||||
|
||||
/**
|
||||
* <p>Quality of lens shading correction applied
|
||||
* to the image data.</p>
|
||||
|
||||
@@ -812,6 +812,13 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* scene as they do before. See {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details. Whether to use
|
||||
* activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
|
||||
* mode.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates within {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on
|
||||
* distortion correction capability and mode</p>
|
||||
@@ -826,7 +833,10 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
|
||||
* @see CaptureRequest#SCALER_CROP_REGION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -1274,6 +1284,12 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* scene as they do before. See {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details. Whether to use
|
||||
* activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
|
||||
* mode.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates within {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on
|
||||
* distortion correction capability and mode</p>
|
||||
@@ -1288,7 +1304,10 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
|
||||
* @see CaptureRequest#SCALER_CROP_REGION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -1890,6 +1909,12 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* the scene as they do before. See {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details. Whether to use
|
||||
* activeArraySize or preCorrectionActiveArraySize still depends on distortion correction
|
||||
* mode.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates within {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on
|
||||
* distortion correction capability and mode</p>
|
||||
@@ -1904,7 +1929,10 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* @see CaptureRequest#DISTORTION_CORRECTION_MODE
|
||||
* @see CaptureRequest#SCALER_CROP_REGION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -3565,6 +3593,12 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* coordinate system is post-zoom, meaning that the activeArraySize or
|
||||
* preCorrectionActiveArraySize covers the camera device's field of view "after" zoom. See
|
||||
* {@link CaptureRequest#CONTROL_ZOOM_RATIO android.control.zoomRatio} for details.</p>
|
||||
* <p>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} /
|
||||
* {@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 }.</p>
|
||||
* <p><b>Units</b>: Pixel coordinates relative to
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} or
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE android.sensor.info.preCorrectionActiveArraySize} depending on distortion correction
|
||||
@@ -3577,7 +3611,10 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
* @see CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
|
||||
* @see CameraCharacteristics#SCALER_CROPPING_TYPE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
|
||||
* @see CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION
|
||||
* @see CaptureRequest#SENSOR_PIXEL_MODE
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
@@ -4106,6 +4143,69 @@ public class CaptureResult extends CameraMetadata<CaptureResult.Key<?>> {
|
||||
public static final Key<Integer> SENSOR_DYNAMIC_WHITE_LEVEL =
|
||||
new Key<Integer>("android.sensor.dynamicWhiteLevel", int.class);
|
||||
|
||||
/**
|
||||
* <p>Switches sensor pixel mode between maximum resolution mode and default mode.</p>
|
||||
* <p>This key controls whether the camera sensor operates in
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }
|
||||
* mode or not. By default, all camera devices operate in
|
||||
* {@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
|
||||
* 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.
|
||||
* The stream configurations supported in
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION }
|
||||
* mode are also different from those of
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT } mode.
|
||||
* They can be queried through
|
||||
* {@link android.hardware.camera2.CameraCharacteristics#get } with
|
||||
* {@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION) }.
|
||||
* Unless reported by both
|
||||
* {@link android.hardware.camera2.params.StreamConfigurationMap }s, the outputs from
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION android.scaler.streamConfigurationMapMaximumResolution}</code> and
|
||||
* <code>{@link CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP android.scaler.streamConfigurationMap}</code>
|
||||
* 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.</p>
|
||||
* <p><b>Possible values:</b></p>
|
||||
* <ul>
|
||||
* <li>{@link #SENSOR_PIXEL_MODE_DEFAULT DEFAULT}</li>
|
||||
* <li>{@link #SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION MAXIMUM_RESOLUTION}</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
|
||||
* @see CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION
|
||||
* @see #SENSOR_PIXEL_MODE_DEFAULT
|
||||
* @see #SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<Integer> SENSOR_PIXEL_MODE =
|
||||
new Key<Integer>("android.sensor.pixelMode", int.class);
|
||||
|
||||
/**
|
||||
* <p>Whether <code>RAW</code> images requested have their bayer pattern as described by
|
||||
* {@link CameraCharacteristics#SENSOR_INFO_BINNING_FACTOR android.sensor.info.binningFactor}.</p>
|
||||
* <p>This key will only be present in devices advertisting the
|
||||
* {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR }
|
||||
* capability which also advertise <code>REMOSAIC_REPROCESSING</code> capability. On all other devices
|
||||
* RAW targets will have a regular bayer pattern.</p>
|
||||
* <p><b>Optional</b> - The value for this key may be {@code null} on some devices.</p>
|
||||
*
|
||||
* @see CameraCharacteristics#SENSOR_INFO_BINNING_FACTOR
|
||||
*/
|
||||
@PublicKey
|
||||
@NonNull
|
||||
public static final Key<Boolean> SENSOR_RAW_BINNING_FACTOR_USED =
|
||||
new Key<Boolean>("android.sensor.rawBinningFactorUsed", boolean.class);
|
||||
|
||||
/**
|
||||
* <p>Quality of lens shading correction applied
|
||||
* to the image data.</p>
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.hardware.camera2.CameraCaptureSession;
|
||||
import android.hardware.camera2.CameraCharacteristics;
|
||||
import android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession;
|
||||
import android.hardware.camera2.CameraDevice;
|
||||
import android.hardware.camera2.CameraMetadata;
|
||||
import android.hardware.camera2.CameraOfflineSession;
|
||||
import android.hardware.camera2.CameraOfflineSession.CameraOfflineSessionCallback;
|
||||
import android.hardware.camera2.CaptureRequest;
|
||||
@@ -81,11 +82,17 @@ public class CameraConstrainedHighSpeedCaptureSessionImpl
|
||||
if (request == null) {
|
||||
throw new IllegalArgumentException("Input capture request must not be null");
|
||||
}
|
||||
CameraCharacteristics.Key<StreamConfigurationMap> ck =
|
||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP;
|
||||
Integer sensorPixelMode = request.get(CaptureRequest.SENSOR_PIXEL_MODE);
|
||||
if (sensorPixelMode != null && sensorPixelMode ==
|
||||
CameraMetadata.SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION) {
|
||||
ck = CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION;
|
||||
}
|
||||
Collection<Surface> outputSurfaces = request.getTargets();
|
||||
Range<Integer> fpsRange = request.get(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE);
|
||||
|
||||
StreamConfigurationMap config =
|
||||
mCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
||||
StreamConfigurationMap config = mCharacteristics.get(ck);
|
||||
SurfaceUtils.checkConstrainedHighSpeedSurfaces(outputSurfaces, fpsRange, config);
|
||||
|
||||
// Request list size: to limit the preview to 30fps, need use maxFps/30; to maximize
|
||||
|
||||
@@ -20,6 +20,7 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainRunna
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.graphics.ImageFormat;
|
||||
import android.hardware.ICameraService;
|
||||
import android.hardware.camera2.CameraAccessException;
|
||||
import android.hardware.camera2.CameraCaptureSession;
|
||||
@@ -62,6 +63,8 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -114,6 +117,7 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
|
||||
private final String mCameraId;
|
||||
private final CameraCharacteristics mCharacteristics;
|
||||
private final Map<String, CameraCharacteristics> mPhysicalIdsToChars;
|
||||
private final int mTotalPartialCount;
|
||||
private final Context mContext;
|
||||
|
||||
@@ -257,7 +261,9 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
};
|
||||
|
||||
public CameraDeviceImpl(String cameraId, StateCallback callback, Executor executor,
|
||||
CameraCharacteristics characteristics, int appTargetSdkVersion,
|
||||
CameraCharacteristics characteristics,
|
||||
Map<String, CameraCharacteristics> physicalIdsToChars,
|
||||
int appTargetSdkVersion,
|
||||
Context ctx) {
|
||||
if (cameraId == null || callback == null || executor == null || characteristics == null) {
|
||||
throw new IllegalArgumentException("Null argument given");
|
||||
@@ -266,6 +272,7 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
mDeviceCallback = callback;
|
||||
mDeviceExecutor = executor;
|
||||
mCharacteristics = characteristics;
|
||||
mPhysicalIdsToChars = physicalIdsToChars;
|
||||
mAppTargetSdkVersion = appTargetSdkVersion;
|
||||
mContext = ctx;
|
||||
|
||||
@@ -1357,11 +1364,71 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkInputConfigurationWithStreamConfigurationsAs(
|
||||
InputConfiguration inputConfig, StreamConfigurationMap configMap) {
|
||||
int[] inputFormats = configMap.getInputFormats();
|
||||
boolean validFormat = false;
|
||||
int inputFormat = inputConfig.getFormat();
|
||||
for (int format : inputFormats) {
|
||||
if (format == inputFormat) {
|
||||
validFormat = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (validFormat == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean validSize = false;
|
||||
Size[] inputSizes = configMap.getInputSizes(inputFormat);
|
||||
for (Size s : inputSizes) {
|
||||
if (inputConfig.getWidth() == s.getWidth() &&
|
||||
inputConfig.getHeight() == s.getHeight()) {
|
||||
validSize = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (validSize == false) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean checkInputConfigurationWithStreamConfigurations(
|
||||
InputConfiguration inputConfig, boolean maxResolution) {
|
||||
// Check if either this logical camera or any of its physical cameras support the
|
||||
// input config. If they do, the input config is valid.
|
||||
CameraCharacteristics.Key<StreamConfigurationMap> ck =
|
||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP;
|
||||
|
||||
if (maxResolution) {
|
||||
ck = CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION;
|
||||
}
|
||||
|
||||
StreamConfigurationMap configMap = mCharacteristics.get(ck);
|
||||
|
||||
if (configMap != null &&
|
||||
checkInputConfigurationWithStreamConfigurationsAs(inputConfig, configMap)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Map.Entry<String, CameraCharacteristics> entry : mPhysicalIdsToChars.entrySet()) {
|
||||
configMap = entry.getValue().get(ck);
|
||||
|
||||
if (configMap != null &&
|
||||
checkInputConfigurationWithStreamConfigurationsAs(inputConfig, configMap)) {
|
||||
// Input config supported.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void checkInputConfiguration(InputConfiguration inputConfig) {
|
||||
if (inputConfig == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
int inputFormat = inputConfig.getFormat();
|
||||
if (inputConfig.isMultiResolution()) {
|
||||
MultiResolutionStreamConfigurationMap configMap = mCharacteristics.get(
|
||||
CameraCharacteristics.SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP);
|
||||
@@ -1369,19 +1436,19 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
int[] inputFormats = configMap.getInputFormats();
|
||||
boolean validFormat = false;
|
||||
for (int format : inputFormats) {
|
||||
if (format == inputConfig.getFormat()) {
|
||||
if (format == inputFormat) {
|
||||
validFormat = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (validFormat == false) {
|
||||
throw new IllegalArgumentException("multi-resolution input format " +
|
||||
inputConfig.getFormat() + " is not valid");
|
||||
inputFormat + " is not valid");
|
||||
}
|
||||
|
||||
boolean validSize = false;
|
||||
Collection<MultiResolutionStreamInfo> inputStreamInfo =
|
||||
configMap.getInputInfo(inputConfig.getFormat());
|
||||
configMap.getInputInfo(inputFormat);
|
||||
for (MultiResolutionStreamInfo info : inputStreamInfo) {
|
||||
if (inputConfig.getWidth() == info.getWidth() &&
|
||||
inputConfig.getHeight() == info.getHeight()) {
|
||||
@@ -1394,34 +1461,11 @@ public class CameraDeviceImpl extends CameraDevice
|
||||
inputConfig.getWidth() + "x" + inputConfig.getHeight() + " is not valid");
|
||||
}
|
||||
} else {
|
||||
StreamConfigurationMap configMap = mCharacteristics.get(
|
||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
||||
|
||||
int[] inputFormats = configMap.getInputFormats();
|
||||
boolean validFormat = false;
|
||||
for (int format : inputFormats) {
|
||||
if (format == inputConfig.getFormat()) {
|
||||
validFormat = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (validFormat == false) {
|
||||
throw new IllegalArgumentException("input format " + inputConfig.getFormat() +
|
||||
" is not valid");
|
||||
}
|
||||
|
||||
boolean validSize = false;
|
||||
Size[] inputSizes = configMap.getInputSizes(inputConfig.getFormat());
|
||||
for (Size s : inputSizes) {
|
||||
if (inputConfig.getWidth() == s.getWidth() &&
|
||||
inputConfig.getHeight() == s.getHeight()) {
|
||||
validSize = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (validSize == false) {
|
||||
throw new IllegalArgumentException("input size " + inputConfig.getWidth() + "x" +
|
||||
inputConfig.getHeight() + " is not valid");
|
||||
if (!checkInputConfigurationWithStreamConfigurations(inputConfig, /*maxRes*/false) &&
|
||||
!checkInputConfigurationWithStreamConfigurations(inputConfig, /*maxRes*/true)) {
|
||||
throw new IllegalArgumentException("Input config with format " +
|
||||
inputFormat + " and size " + inputConfig.getWidth() + "x" +
|
||||
inputConfig.getHeight() + " not supported by camera id " + mCameraId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -327,6 +327,10 @@ public class CameraMetadataNative implements Parcelable {
|
||||
private static final String GPS_PROCESS = "GPS";
|
||||
private static final int FACE_LANDMARK_SIZE = 6;
|
||||
|
||||
private static final int MANDATORY_STREAM_CONFIGURATIONS_DEFAULT = 0;
|
||||
private static final int MANDATORY_STREAM_CONFIGURATIONS_MAX_RESOLUTION = 1;
|
||||
private static final int MANDATORY_STREAM_CONFIGURATIONS_CONCURRENT = 2;
|
||||
|
||||
private static String translateLocationProviderToProcess(final String provider) {
|
||||
if (provider == null) {
|
||||
return null;
|
||||
@@ -644,6 +648,15 @@ public class CameraMetadataNative implements Parcelable {
|
||||
return (T) metadata.getStreamConfigurationMap();
|
||||
}
|
||||
});
|
||||
sGetCommandMap.put(
|
||||
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION.getNativeKey(),
|
||||
new GetCommand() {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getValue(CameraMetadataNative metadata, Key<T> key) {
|
||||
return (T) metadata.getStreamConfigurationMapMaximumResolution();
|
||||
}
|
||||
});
|
||||
sGetCommandMap.put(
|
||||
CameraCharacteristics.SCALER_MANDATORY_STREAM_COMBINATIONS.getNativeKey(),
|
||||
new GetCommand() {
|
||||
@@ -663,6 +676,16 @@ public class CameraMetadataNative implements Parcelable {
|
||||
}
|
||||
});
|
||||
|
||||
sGetCommandMap.put(
|
||||
CameraCharacteristics.SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS.getNativeKey(),
|
||||
new GetCommand() {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getValue(CameraMetadataNative metadata, Key<T> key) {
|
||||
return (T) metadata.getMandatoryMaximumResolutionStreamCombinations();
|
||||
}
|
||||
});
|
||||
|
||||
sGetCommandMap.put(
|
||||
CameraCharacteristics.CONTROL_MAX_REGIONS_AE.getNativeKey(), new GetCommand() {
|
||||
@Override
|
||||
@@ -1285,12 +1308,12 @@ public class CameraMetadataNative implements Parcelable {
|
||||
return recommendedConfigurations;
|
||||
}
|
||||
|
||||
private boolean isBurstSupported() {
|
||||
private boolean isCapabilitySupported(int capabilityRequested) {
|
||||
boolean ret = false;
|
||||
|
||||
int[] capabilities = getBase(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
|
||||
for (int capability : capabilities) {
|
||||
if (capability == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE) {
|
||||
if (capabilityRequested == capability) {
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
@@ -1299,8 +1322,18 @@ public class CameraMetadataNative implements Parcelable {
|
||||
return ret;
|
||||
}
|
||||
|
||||
private boolean isUltraHighResolutionSensor() {
|
||||
return isCapabilitySupported(
|
||||
CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR);
|
||||
|
||||
}
|
||||
private boolean isBurstSupported() {
|
||||
return isCapabilitySupported(
|
||||
CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE);
|
||||
}
|
||||
|
||||
private MandatoryStreamCombination[] getMandatoryStreamCombinationsHelper(
|
||||
boolean getConcurrent) {
|
||||
int mandatoryStreamsType) {
|
||||
int[] capabilities = getBase(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES);
|
||||
ArrayList<Integer> caps = new ArrayList<Integer>();
|
||||
caps.ensureCapacity(capabilities.length);
|
||||
@@ -1309,20 +1342,25 @@ public class CameraMetadataNative implements Parcelable {
|
||||
}
|
||||
int hwLevel = getBase(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
|
||||
MandatoryStreamCombination.Builder build = new MandatoryStreamCombination.Builder(
|
||||
mCameraId, hwLevel, mDisplaySize, caps, getStreamConfigurationMap());
|
||||
mCameraId, hwLevel, mDisplaySize, caps, getStreamConfigurationMap(),
|
||||
getStreamConfigurationMapMaximumResolution());
|
||||
|
||||
List<MandatoryStreamCombination> combs = null;
|
||||
if (getConcurrent) {
|
||||
combs = build.getAvailableMandatoryConcurrentStreamCombinations();
|
||||
} else {
|
||||
combs = build.getAvailableMandatoryStreamCombinations();
|
||||
switch (mandatoryStreamsType) {
|
||||
case MANDATORY_STREAM_CONFIGURATIONS_CONCURRENT:
|
||||
combs = build.getAvailableMandatoryConcurrentStreamCombinations();
|
||||
break;
|
||||
case MANDATORY_STREAM_CONFIGURATIONS_MAX_RESOLUTION:
|
||||
combs = build.getAvailableMandatoryMaximumResolutionStreamCombinations();
|
||||
break;
|
||||
default:
|
||||
combs = build.getAvailableMandatoryStreamCombinations();
|
||||
}
|
||||
if ((combs != null) && (!combs.isEmpty())) {
|
||||
MandatoryStreamCombination[] combArray = new MandatoryStreamCombination[combs.size()];
|
||||
combArray = combs.toArray(combArray);
|
||||
return combArray;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1330,11 +1368,18 @@ public class CameraMetadataNative implements Parcelable {
|
||||
if (!mHasMandatoryConcurrentStreams) {
|
||||
return null;
|
||||
}
|
||||
return getMandatoryStreamCombinationsHelper(true);
|
||||
return getMandatoryStreamCombinationsHelper(MANDATORY_STREAM_CONFIGURATIONS_CONCURRENT);
|
||||
}
|
||||
|
||||
private MandatoryStreamCombination[] getMandatoryMaximumResolutionStreamCombinations() {
|
||||
if (!isUltraHighResolutionSensor()) {
|
||||
return null;
|
||||
}
|
||||
return getMandatoryStreamCombinationsHelper(MANDATORY_STREAM_CONFIGURATIONS_MAX_RESOLUTION);
|
||||
}
|
||||
|
||||
private MandatoryStreamCombination[] getMandatoryStreamCombinations() {
|
||||
return getMandatoryStreamCombinationsHelper(false);
|
||||
return getMandatoryStreamCombinationsHelper(MANDATORY_STREAM_CONFIGURATIONS_DEFAULT);
|
||||
}
|
||||
|
||||
private StreamConfigurationMap getStreamConfigurationMap() {
|
||||
@@ -1377,6 +1422,50 @@ public class CameraMetadataNative implements Parcelable {
|
||||
listHighResolution);
|
||||
}
|
||||
|
||||
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);
|
||||
StreamConfiguration[] depthConfigurations = getBase(
|
||||
CameraCharacteristics.DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfigurationDuration[] depthMinFrameDurations = getBase(
|
||||
CameraCharacteristics.DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfigurationDuration[] depthStallDurations = getBase(
|
||||
CameraCharacteristics.DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfiguration[] dynamicDepthConfigurations = getBase(
|
||||
CameraCharacteristics.DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfigurationDuration[] dynamicDepthMinFrameDurations = getBase(
|
||||
CameraCharacteristics.DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfigurationDuration[] dynamicDepthStallDurations = getBase(
|
||||
CameraCharacteristics.DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfiguration[] heicConfigurations = getBase(
|
||||
CameraCharacteristics.HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfigurationDuration[] heicMinFrameDurations = getBase(
|
||||
CameraCharacteristics.HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION);
|
||||
StreamConfigurationDuration[] heicStallDurations = getBase(
|
||||
CameraCharacteristics.HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION);
|
||||
HighSpeedVideoConfiguration[] highSpeedVideoConfigurations = getBase(
|
||||
CameraCharacteristics.CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS_MAXIMUM_RESOLUTION);
|
||||
ReprocessFormatsMap inputOutputFormatsMap = getBase(
|
||||
CameraCharacteristics.SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP_MAXIMUM_RESOLUTION);
|
||||
// TODO: Is this correct, burst capability shouldn't necessarily correspond to max res mode
|
||||
boolean listHighResolution = isBurstSupported();
|
||||
return new StreamConfigurationMap(
|
||||
configurations, minFrameDurations, stallDurations,
|
||||
depthConfigurations, depthMinFrameDurations, depthStallDurations,
|
||||
dynamicDepthConfigurations, dynamicDepthMinFrameDurations,
|
||||
dynamicDepthStallDurations, heicConfigurations,
|
||||
heicMinFrameDurations, heicStallDurations,
|
||||
highSpeedVideoConfigurations, inputOutputFormatsMap,
|
||||
listHighResolution, false);
|
||||
}
|
||||
|
||||
private <T> Integer getMaxRegions(Key<T> key) {
|
||||
final int AE = 0;
|
||||
final int AWB = 1;
|
||||
|
||||
@@ -267,8 +267,8 @@ public final class MandatoryStreamCombination {
|
||||
mStreamsInformation.hashCode());
|
||||
}
|
||||
|
||||
private static enum SizeThreshold { VGA, PREVIEW, RECORD, MAXIMUM, s720p, s1440p }
|
||||
private static enum ReprocessType { NONE, PRIVATE, YUV }
|
||||
private static enum SizeThreshold { VGA, PREVIEW, RECORD, MAXIMUM, s720p, s1440p, FULL_RES }
|
||||
private static enum ReprocessType { NONE, PRIVATE, YUV, REMOSAIC }
|
||||
private static final class StreamTemplate {
|
||||
public int mFormat;
|
||||
public SizeThreshold mSizeThreshold;
|
||||
@@ -691,6 +691,18 @@ public final class MandatoryStreamCombination {
|
||||
"Depth capture for mesh based object rendering"),
|
||||
};
|
||||
|
||||
private static StreamCombinationTemplate sUltraHighResolutionStreamCombinations[] = {
|
||||
new StreamCombinationTemplate(new StreamTemplate [] {
|
||||
new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES) },
|
||||
"Full res YUV image capture"),
|
||||
new StreamCombinationTemplate(new StreamTemplate [] {
|
||||
new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES) },
|
||||
"Full res RAW capture"),
|
||||
new StreamCombinationTemplate(new StreamTemplate [] {
|
||||
new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES) },
|
||||
"Full res JPEG still image capture"),
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper builder class to generate a list of available mandatory stream combinations.
|
||||
* @hide
|
||||
@@ -700,6 +712,7 @@ public final class MandatoryStreamCombination {
|
||||
private List<Integer> mCapabilities;
|
||||
private int mHwLevel, mCameraId;
|
||||
private StreamConfigurationMap mStreamConfigMap;
|
||||
private StreamConfigurationMap mStreamConfigMapMaximumResolution;
|
||||
private boolean mIsHiddenPhysicalCamera;
|
||||
|
||||
private final Size kPreviewSizeBound = new Size(1920, 1088);
|
||||
@@ -712,13 +725,17 @@ public final class MandatoryStreamCombination {
|
||||
* @param displaySize The device display size.
|
||||
* @param capabilities The camera device capabilities.
|
||||
* @param sm The camera device stream configuration map.
|
||||
* @param smMaxResolution The camera device stream configuration map when it runs in max
|
||||
* resolution mode.
|
||||
*/
|
||||
public Builder(int cameraId, int hwLevel, @NonNull Size displaySize,
|
||||
@NonNull List<Integer> capabilities, @NonNull StreamConfigurationMap sm) {
|
||||
@NonNull List<Integer> capabilities, @NonNull StreamConfigurationMap sm,
|
||||
StreamConfigurationMap smMaxResolution) {
|
||||
mCameraId = cameraId;
|
||||
mDisplaySize = displaySize;
|
||||
mCapabilities = capabilities;
|
||||
mStreamConfigMap = sm;
|
||||
mStreamConfigMapMaximumResolution = smMaxResolution;
|
||||
mHwLevel = hwLevel;
|
||||
mIsHiddenPhysicalCamera =
|
||||
CameraManager.isHiddenPhysicalCamera(Integer.toString(mCameraId));
|
||||
@@ -796,6 +813,97 @@ public final class MandatoryStreamCombination {
|
||||
return Collections.unmodifiableList(availableConcurrentStreamCombinations);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a list of all available mandatory stream combinations supported when
|
||||
* {@link CaptureRequest#ANDROID_SENSOR_PIXEL_MODE} is set to
|
||||
* {@link CameraMetadata#ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION}.
|
||||
*
|
||||
* @return a non-modifiable list of supported mandatory stream combinations or
|
||||
* null in case device is not backward compatible or the method encounters
|
||||
* an error.
|
||||
*/
|
||||
public @NonNull List<MandatoryStreamCombination>
|
||||
getAvailableMandatoryMaximumResolutionStreamCombinations() {
|
||||
|
||||
ArrayList<StreamCombinationTemplate> chosenStreamCombinations =
|
||||
new ArrayList<StreamCombinationTemplate>();
|
||||
|
||||
chosenStreamCombinations.addAll(Arrays.asList(sUltraHighResolutionStreamCombinations));
|
||||
|
||||
ArrayList<MandatoryStreamCombination> availableStreamCombinations =
|
||||
new ArrayList<MandatoryStreamCombination>();
|
||||
boolean addRemosaicReprocessing = isRemosaicReprocessingSupported();
|
||||
int remosaicSize = 0;
|
||||
if (addRemosaicReprocessing) {
|
||||
remosaicSize = 1;
|
||||
}
|
||||
availableStreamCombinations.ensureCapacity(
|
||||
chosenStreamCombinations.size() + remosaicSize);
|
||||
fillMandatoryOutputStreamCombinations(availableStreamCombinations,
|
||||
chosenStreamCombinations, mStreamConfigMapMaximumResolution);
|
||||
if (isRemosaicReprocessingSupported()) {
|
||||
// Add reprocess mandatory streams
|
||||
ArrayList<MandatoryStreamInformation> streamsInfo =
|
||||
new ArrayList<MandatoryStreamInformation>();
|
||||
|
||||
ArrayList<Size> inputSize = new ArrayList<Size>();
|
||||
Size maxRawInputSize = getMaxSize(mStreamConfigMapMaximumResolution.getInputSizes(
|
||||
ImageFormat.RAW_SENSOR));
|
||||
inputSize.add(maxRawInputSize);
|
||||
|
||||
streamsInfo.add(new MandatoryStreamInformation(inputSize,
|
||||
ImageFormat.RAW_SENSOR, /*isInput*/true));
|
||||
streamsInfo.add(new MandatoryStreamInformation(inputSize,
|
||||
ImageFormat.RAW_SENSOR));
|
||||
MandatoryStreamCombination streamCombination;
|
||||
streamCombination = new MandatoryStreamCombination(streamsInfo,
|
||||
"Remosaic reprocessing", true);
|
||||
availableStreamCombinations.add(streamCombination);
|
||||
}
|
||||
return Collections.unmodifiableList(availableStreamCombinations);
|
||||
}
|
||||
|
||||
private void fillMandatoryOutputStreamCombinations(
|
||||
ArrayList<MandatoryStreamCombination> availableStreamCombinations,
|
||||
ArrayList<StreamCombinationTemplate> chosenStreamCombinations,
|
||||
StreamConfigurationMap streamConfigMap) {
|
||||
|
||||
for (StreamCombinationTemplate combTemplate : chosenStreamCombinations) {
|
||||
ArrayList<MandatoryStreamInformation> streamsInfo =
|
||||
new ArrayList<MandatoryStreamInformation>();
|
||||
streamsInfo.ensureCapacity(combTemplate.mStreamTemplates.length);
|
||||
|
||||
for (StreamTemplate template : combTemplate.mStreamTemplates) {
|
||||
MandatoryStreamInformation streamInfo;
|
||||
List<Size> sizes = new ArrayList<Size>();
|
||||
Size sizeChosen =
|
||||
getMaxSize(streamConfigMap.getOutputSizes(
|
||||
template.mFormat));
|
||||
sizes.add(sizeChosen);
|
||||
try {
|
||||
streamInfo = new MandatoryStreamInformation(sizes, template.mFormat);
|
||||
} catch (IllegalArgumentException e) {
|
||||
String cause = "No available sizes found for format: " + template.mFormat
|
||||
+ " size threshold: " + template.mSizeThreshold + " combination: "
|
||||
+ combTemplate.mDescription;
|
||||
throw new RuntimeException(cause, e);
|
||||
}
|
||||
streamsInfo.add(streamInfo);
|
||||
}
|
||||
|
||||
MandatoryStreamCombination streamCombination;
|
||||
try {
|
||||
streamCombination = new MandatoryStreamCombination(streamsInfo,
|
||||
combTemplate.mDescription, /*isReprocess*/false);
|
||||
} catch (IllegalArgumentException e) {
|
||||
String cause = "No stream information for mandatory combination: "
|
||||
+ combTemplate.mDescription;
|
||||
throw new RuntimeException(cause, e);
|
||||
}
|
||||
availableStreamCombinations.add(streamCombination);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve a list of all available mandatory stream combinations.
|
||||
*
|
||||
@@ -948,7 +1056,6 @@ public final class MandatoryStreamCombination {
|
||||
inputSize.add(maxYUVInputSize);
|
||||
format = ImageFormat.YUV_420_888;
|
||||
}
|
||||
|
||||
streamsInfo.add(new MandatoryStreamInformation(inputSize, format,
|
||||
/*isInput*/true));
|
||||
streamsInfo.add(new MandatoryStreamInformation(inputSize, format));
|
||||
@@ -974,7 +1081,6 @@ public final class MandatoryStreamCombination {
|
||||
combTemplate.mDescription);
|
||||
return null;
|
||||
}
|
||||
|
||||
streamsInfo.add(streamInfo);
|
||||
}
|
||||
|
||||
@@ -1219,6 +1325,14 @@ public final class MandatoryStreamCombination {
|
||||
CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current device supports YUV reprocessing.
|
||||
*/
|
||||
private boolean isRemosaicReprocessingSupported() {
|
||||
return isCapabilitySupported(
|
||||
CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the maximum supported video size using the camcorder profile information.
|
||||
*
|
||||
|
||||
@@ -19,6 +19,7 @@ package android.hardware.camera2.params;
|
||||
|
||||
import static com.android.internal.util.Preconditions.*;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SystemApi;
|
||||
@@ -26,6 +27,7 @@ import android.graphics.ImageFormat;
|
||||
import android.hardware.camera2.CameraCaptureSession;
|
||||
import android.hardware.camera2.CameraCharacteristics;
|
||||
import android.hardware.camera2.CameraDevice;
|
||||
import android.hardware.camera2.CameraMetadata;
|
||||
import android.hardware.camera2.MultiResolutionImageReader;
|
||||
import android.hardware.camera2.params.MultiResolutionStreamInfo;
|
||||
import android.hardware.camera2.utils.HashCodeHelpers;
|
||||
@@ -33,10 +35,13 @@ import android.hardware.camera2.utils.SurfaceUtils;
|
||||
import android.media.ImageReader;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.ArraySet;
|
||||
import android.util.Log;
|
||||
import android.util.Size;
|
||||
import android.view.Surface;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -145,6 +150,13 @@ public final class OutputConfiguration implements Parcelable {
|
||||
*/
|
||||
public static final int SURFACE_GROUP_ID_NONE = -1;
|
||||
|
||||
/** @hide */
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(prefix = {"SENSOR_PIXEL_MODE_"}, value =
|
||||
{CameraMetadata.SENSOR_PIXEL_MODE_DEFAULT,
|
||||
CameraMetadata.SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION})
|
||||
public @interface SensorPixelMode {};
|
||||
|
||||
/**
|
||||
* Create a new {@link OutputConfiguration} instance with a {@link Surface}.
|
||||
*
|
||||
@@ -306,6 +318,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
mIsShared = false;
|
||||
mPhysicalCameraId = null;
|
||||
mIsMultiResolution = false;
|
||||
mSensorPixelModesUsed = new ArrayList<Integer>();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -399,6 +412,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
mIsShared = false;
|
||||
mPhysicalCameraId = null;
|
||||
mIsMultiResolution = false;
|
||||
mSensorPixelModesUsed = new ArrayList<Integer>();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -484,6 +498,81 @@ public final class OutputConfiguration implements Parcelable {
|
||||
mPhysicalCameraId = physicalCameraId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a sensor pixel mode that this OutputConfiguration will be used in.
|
||||
*
|
||||
* <p> In the case that this output stream configuration (format, width, height) is
|
||||
* available through {@link android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP}
|
||||
* configurations and
|
||||
* {@link android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION},
|
||||
* configurations, the camera sub-system will assume that this {@link OutputConfiguration} will
|
||||
* be used only with {@link android.hardware.camera2.CaptureRequest}s which has
|
||||
* {@link android.hardware.camera2.CaptureRequest#SENSOR_PIXEL_MODE} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT}.
|
||||
* In such cases, if clients intend to use the
|
||||
* {@link OutputConfiguration}(s) in a {@link android.hardware.camera2.CaptureRequest} with
|
||||
* other sensor pixel modes, they must specify which
|
||||
* {@link android.hardware.camera2.CaptureRequest#SENSOR_PIXEL_MODE}(s) they will use this
|
||||
* {@link OutputConfiguration} with, by calling this method.
|
||||
*
|
||||
* In case this output stream configuration (format, width, height) is only in
|
||||
* {@link android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION},
|
||||
* configurations, this output target must only be used with
|
||||
* {@link android.hardware.camera2.CaptureRequest}s which has
|
||||
* {@link android.hardware.camera2.CaptureRequest#SENSOR_PIXEL_MODE} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION} and that
|
||||
* is what the camera sub-system will assume. If clients add
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT} in this
|
||||
* case, session configuration will fail, if this {@link OutputConfiguration} is included.
|
||||
*
|
||||
* In case this output stream configuration (format, width, height) is only in
|
||||
* {@link android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP},
|
||||
* configurations, this output target must only be used with
|
||||
* {@link android.hardware.camera2.CaptureRequest}s which has
|
||||
* {@link android.hardware.camera2.CaptureRequest#SENSOR_PIXEL_MODE} set to
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_DEFAULT} and that is what
|
||||
* the camera sub-system will assume. If clients add
|
||||
* {@link android.hardware.camera2.CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION} in this
|
||||
* case, session configuration will fail, if this {@link OutputConfiguration} is included.
|
||||
*
|
||||
* @param sensorPixelModeUsed The sensor pixel mode this OutputConfiguration will be used with
|
||||
* </p>
|
||||
*
|
||||
*/
|
||||
public void addSensorPixelModeUsed(@SensorPixelMode int sensorPixelModeUsed) {
|
||||
// Verify that the values are in range.
|
||||
if (sensorPixelModeUsed != CameraMetadata.SENSOR_PIXEL_MODE_DEFAULT &&
|
||||
sensorPixelModeUsed != CameraMetadata.SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION) {
|
||||
throw new IllegalArgumentException("Not a valid sensor pixel mode " +
|
||||
sensorPixelModeUsed);
|
||||
}
|
||||
|
||||
if (mSensorPixelModesUsed.contains(sensorPixelModeUsed)) {
|
||||
// Already added, ignore;
|
||||
return;
|
||||
}
|
||||
mSensorPixelModesUsed.add(sensorPixelModeUsed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a sensor pixel mode, previously added through addSensorPixelModeUsed, from this
|
||||
* OutputConfiguration.
|
||||
*
|
||||
* <p> Sensor pixel modes added via calls to {@link #addSensorPixelModeUsed} can also be removed
|
||||
* from the OutputConfiguration.</p>
|
||||
*
|
||||
* @param sensorPixelModeUsed The sensor pixel mode to be removed.
|
||||
*
|
||||
* @throws IllegalArgumentException If the sensor pixel mode wasn't previously added
|
||||
* through {@link #addSensorPixelModeUsed}.
|
||||
*/
|
||||
public void removeSensorPixelModeUsed(@SensorPixelMode int sensorPixelModeUsed) {
|
||||
if (!mSensorPixelModesUsed.remove(Integer.valueOf(sensorPixelModeUsed))) {
|
||||
throw new IllegalArgumentException("sensorPixelMode " + sensorPixelModeUsed +
|
||||
"is not part of this output configuration");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this configuration is for a physical camera.
|
||||
*
|
||||
@@ -625,6 +714,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
this.mIsShared = other.mIsShared;
|
||||
this.mPhysicalCameraId = other.mPhysicalCameraId;
|
||||
this.mIsMultiResolution = other.mIsMultiResolution;
|
||||
this.mSensorPixelModesUsed = other.mSensorPixelModesUsed;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -642,7 +732,8 @@ public final class OutputConfiguration implements Parcelable {
|
||||
source.readTypedList(surfaces, Surface.CREATOR);
|
||||
String physicalCameraId = source.readString();
|
||||
boolean isMultiResolutionOutput = source.readInt() == 1;
|
||||
|
||||
ArrayList<Integer> sensorPixelModesUsed = new ArrayList<Integer>();
|
||||
source.readList(sensorPixelModesUsed, Integer.class.getClassLoader());
|
||||
checkArgumentInRange(rotation, ROTATION_0, ROTATION_270, "Rotation constant");
|
||||
|
||||
mSurfaceGroupId = surfaceSetId;
|
||||
@@ -666,6 +757,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
}
|
||||
mPhysicalCameraId = physicalCameraId;
|
||||
mIsMultiResolution = isMultiResolutionOutput;
|
||||
mSensorPixelModesUsed = sensorPixelModesUsed;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -766,6 +858,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
dest.writeTypedList(mSurfaces);
|
||||
dest.writeString(mPhysicalCameraId);
|
||||
dest.writeInt(mIsMultiResolution ? 1 : 0);
|
||||
dest.writeList(mSensorPixelModesUsed);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -798,7 +891,14 @@ public final class OutputConfiguration implements Parcelable {
|
||||
!Objects.equals(mPhysicalCameraId, other.mPhysicalCameraId) ||
|
||||
mIsMultiResolution != other.mIsMultiResolution)
|
||||
return false;
|
||||
|
||||
if (mSensorPixelModesUsed.size() != other.mSensorPixelModesUsed.size()) {
|
||||
return false;
|
||||
}
|
||||
for (int j = 0; j < mSensorPixelModesUsed.size(); j++) {
|
||||
if (mSensorPixelModesUsed.get(j) != other.mSensorPixelModesUsed.get(j)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
int minLen = Math.min(mSurfaces.size(), other.mSurfaces.size());
|
||||
for (int i = 0; i < minLen; i++) {
|
||||
if (mSurfaces.get(i) != other.mSurfaces.get(i))
|
||||
@@ -823,7 +923,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
mRotation, mConfiguredSize.hashCode(), mConfiguredFormat, mConfiguredDataspace,
|
||||
mSurfaceGroupId, mSurfaceType, mIsShared ? 1 : 0,
|
||||
mPhysicalCameraId == null ? 0 : mPhysicalCameraId.hashCode(),
|
||||
mIsMultiResolution ? 1 : 0);
|
||||
mIsMultiResolution ? 1 : 0, mSensorPixelModesUsed.hashCode());
|
||||
}
|
||||
|
||||
return HashCodeHelpers.hashCode(
|
||||
@@ -831,7 +931,7 @@ public final class OutputConfiguration implements Parcelable {
|
||||
mConfiguredSize.hashCode(), mConfiguredFormat,
|
||||
mConfiguredDataspace, mSurfaceGroupId, mIsShared ? 1 : 0,
|
||||
mPhysicalCameraId == null ? 0 : mPhysicalCameraId.hashCode(),
|
||||
mIsMultiResolution ? 1 : 0);
|
||||
mIsMultiResolution ? 1 : 0, mSensorPixelModesUsed.hashCode());
|
||||
}
|
||||
|
||||
private static final String TAG = "OutputConfiguration";
|
||||
@@ -861,4 +961,6 @@ public final class OutputConfiguration implements Parcelable {
|
||||
// Flag indicating if this config is for a multi-resolution output with a
|
||||
// MultiResolutionImageReader
|
||||
private boolean mIsMultiResolution;
|
||||
// The sensor pixel modes that this OutputConfiguration will use
|
||||
private ArrayList<Integer> mSensorPixelModesUsed;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user