Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ab616bf authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Android (Google) Code Review
Browse files

Merge "Camera: Add support for isSessionConfigurationWithParametersSupported" into main

parents 30d2ad21 41fb710d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -18827,6 +18827,7 @@ package android.hardware.camera2 {
    field @FlaggedApi("com.android.internal.camera.flags.camera_manual_flash_strength_control") @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> FLASH_TORCH_STRENGTH_MAX_LEVEL;
    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.DeviceStateSensorOrientationMap> INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP;
    field @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SESSION_CONFIGURATION_QUERY_VERSION;
    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
    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;
@@ -18937,7 +18938,7 @@ package android.hardware.camera2 {
    method @Deprecated public abstract void createReprocessableCaptureSessionByConfigurations(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
    method public int getCameraAudioRestriction() throws android.hardware.camera2.CameraAccessException;
    method @NonNull public abstract String getId();
    method public boolean isSessionConfigurationSupported(@NonNull android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
    method @Deprecated public boolean isSessionConfigurationSupported(@NonNull android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
    method public void setCameraAudioRestriction(int) throws android.hardware.camera2.CameraAccessException;
    field public static final int AUDIO_RESTRICTION_NONE = 0; // 0x0
    field public static final int AUDIO_RESTRICTION_VIBRATION = 1; // 0x1
@@ -19015,12 +19016,14 @@ package android.hardware.camera2 {
  }
  public final class CameraManager {
    method @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @NonNull @RequiresPermission(android.Manifest.permission.CAMERA) public android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(@NonNull String, int) throws android.hardware.camera2.CameraAccessException;
    method @NonNull public android.hardware.camera2.CameraCharacteristics getCameraCharacteristics(@NonNull String) throws android.hardware.camera2.CameraAccessException;
    method @NonNull public android.hardware.camera2.CameraExtensionCharacteristics getCameraExtensionCharacteristics(@NonNull String) throws android.hardware.camera2.CameraAccessException;
    method @NonNull public String[] getCameraIdList() throws android.hardware.camera2.CameraAccessException;
    method @NonNull public java.util.Set<java.util.Set<java.lang.String>> getConcurrentCameraIds() throws android.hardware.camera2.CameraAccessException;
    method public int getTorchStrengthLevel(@NonNull String) throws android.hardware.camera2.CameraAccessException;
    method @RequiresPermission(android.Manifest.permission.CAMERA) public boolean isConcurrentSessionConfigurationSupported(@NonNull java.util.Map<java.lang.String,android.hardware.camera2.params.SessionConfiguration>) throws android.hardware.camera2.CameraAccessException;
    method @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @RequiresPermission(android.Manifest.permission.CAMERA) public boolean isSessionConfigurationWithParametersSupported(@NonNull String, @NonNull android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
    method @RequiresPermission(android.Manifest.permission.CAMERA) public void openCamera(@NonNull String, @NonNull android.hardware.camera2.CameraDevice.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
    method @RequiresPermission(android.Manifest.permission.CAMERA) public void openCamera(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
    method public void registerAvailabilityCallback(@NonNull android.hardware.camera2.CameraManager.AvailabilityCallback, @Nullable android.os.Handler);
+285 −1
Original line number Diff line number Diff line
@@ -3469,7 +3469,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
     * <p>When the key is present, only a PRIVATE/YUV output of the specified size is guaranteed
     * to be supported by the camera HAL in the secure camera mode. Any other format or
     * resolutions might not be supported. Use
     * {@link CameraDevice#isSessionConfigurationSupported }
     * {@link CameraManager#isSessionConfigurationWithParametersSupported }
     * API to query if a secure session configuration is supported if the device supports this
     * API.</p>
     * <p>If this key returns null on a device with SECURE_IMAGE_DATA capability, the application
@@ -4987,6 +4987,290 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
    public static final Key<long[]> INFO_DEVICE_STATE_ORIENTATIONS =
            new Key<long[]>("android.info.deviceStateOrientations", long[].class);

    /**
     * <p>The version of the session configuration query
     * {@link android.hardware.camera2.CameraManager#isSessionConfigurationWithParametersSupported }
     * API</p>
     * <p>The possible values in this key correspond to the values defined in
     * android.os.Build.VERSION_CODES. Each version defines a set of feature combinations the
     * camera device must reliably report whether they are supported via
     * {@link android.hardware.camera2.CameraManager#isSessionConfigurationWithParametersSupported }
     * API. And the version is always less or equal to android.os.Build.VERSION.SDK_INT.</p>
     * <p>If set to UPSIDE_DOWN_CAKE, this camera device doesn't support
     * {@link android.hardware.camera2.CameraManager#isSessionConfigurationWithParametersSupported }.
     * Calling the method for this camera ID throws an UnsupportedOperationException.</p>
     * <p>If set to VANILLA_ICE_CREAM, the application can call
     * {@link android.hardware.camera2.CameraManager#isSessionConfigurationWithParametersSupported }
     * to check if the combinations of below features are supported.</p>
     * <ul>
     * <li>A subset of LIMITED-level device stream combinations.</li>
     * </ul>
     * <table>
     * <thead>
     * <tr>
     * <th style="text-align: center;">Target 1</th>
     * <th style="text-align: center;">Size</th>
     * <th style="text-align: center;">Target 2</th>
     * <th style="text-align: center;">Size</th>
     * <th style="text-align: center;">Sample use case(s)</th>
     * </tr>
     * </thead>
     * <tbody>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;">Simple preview, GPU video processing, or no-preview video recording.</td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;">In-application video/image processing.</td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;">Standard still imaging.</td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;">In-app processing plus still capture.</td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">MAXIMUM</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;">JPEG</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;">Standard recording.</td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">PREVIEW</td>
     * <td style="text-align: center;">Preview plus in-app processing.</td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1440P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S1080P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * <tr>
     * <td style="text-align: center;">PRIV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;">YUV</td>
     * <td style="text-align: center;">S720P</td>
     * <td style="text-align: center;"></td>
     * </tr>
     * </tbody>
     * </table>
     * <pre><code>- {@code MAXIMUM} size refers to the camera device's maximum output resolution for
     *   that format from {@code StreamConfigurationMap#getOutputSizes}. {@code PREVIEW} size
     *   refers to the best size match to the device's screen resolution, or to 1080p
     *   (@code 1920x1080}, whichever is smaller. Both sizes are guaranteed to be supported.
     *
     * - {@code S1440P} refers to {@code 1920x1440 (4:3)} and {@code 2560x1440 (16:9)}.
     *   {@code S1080P} refers to {@code 1440x1080 (4:3)} and {@code 1920x1080 (16:9)}.
     *   And {@code S720P} refers to {@code 960x720 (4:3)} and {@code 1280x720 (16:9)}.
     *
     * - If a combination contains a S1440P, S1080P, or S720P stream,
     *   both 4:3 and 16:9 aspect ratio sizes can be queried. For example, for the
     *   stream combination of {PRIV, S1440P, JPEG, MAXIMUM}, and if MAXIMUM ==
     *   4032 x 3024, the application will be able to query both
     *   {PRIV, 1920 x 1440, JPEG, 4032 x 3024} and {PRIV, 2560 x 1440, JPEG, 4032 x 2268}
     *   without an exception being thrown.
     * </code></pre>
     * <ul>
     * <li>VIDEO_STABILIZATION_MODES: {OFF, PREVIEW}</li>
     * <li>AE_TARGET_FPS_RANGE: {{<em>, 30}, {</em>, 60}}</li>
     * <li>DYNAMIC_RANGE_PROFILE: {STANDARD, HLG10}</li>
     * </ul>
     * <p>This key is available on all devices.</p>
     */
    @PublicKey
    @NonNull
    @FlaggedApi(Flags.FLAG_FEATURE_COMBINATION_QUERY)
    public static final Key<Integer> INFO_SESSION_CONFIGURATION_QUERY_VERSION =
            new Key<Integer>("android.info.sessionConfigurationQueryVersion", int.class);

    /**
     * <p>The maximum number of frames that can occur after a request
     * (different than the previous) has been submitted, and before the
+6 −3
Original line number Diff line number Diff line
@@ -894,7 +894,7 @@ public abstract class CameraDevice implements AutoCloseable {
     * supported sizes.
     * Camera clients that register a Jpeg/R output within a stream combination that doesn't fit
     * in the mandatory stream table above can call
     * {@link CameraDevice#isSessionConfigurationSupported} to ensure that this particular
     * {@link CameraManager#isSessionConfigurationWithParametersSupported} to ensure that this particular
     * configuration is supported.</p>
     *
     * <h5>STREAM_USE_CASE capability additional guaranteed configurations</h5>
@@ -967,8 +967,8 @@ public abstract class CameraDevice implements AutoCloseable {
     *
     * <p>Since the capabilities of camera devices vary greatly, a given camera device may support
     * target combinations with sizes outside of these guarantees, but this can only be tested for
     * by calling {@link #isSessionConfigurationSupported} or attempting to create a session with
     * such targets.</p>
     * by calling {@link CameraManager#isSessionConfigurationWithParametersSupported} or attempting
     * to create a session with such targets.</p>
     *
     * <p>Exception on 176x144 (QCIF) resolution:
     * Camera devices usually have a fixed capability for downscaling from larger resolution to
@@ -1403,7 +1403,10 @@ public abstract class CameraDevice implements AutoCloseable {
     * @throws CameraAccessException if the camera device is no longer connected or has
     *                               encountered a fatal error
     * @throws IllegalStateException if the camera device has been closed
     * @deprecated Please use {@link CameraManager#isSessionConfigurationWithParametersSupported}
     * to check whether a SessionConfiguration is supported by the device.
     */
    @Deprecated
    public boolean isSessionConfigurationSupported(
            @NonNull SessionConfiguration sessionConfig) throws CameraAccessException {
        throw new UnsupportedOperationException("Subclasses must override this method");
+169 −0

File changed.

Preview size limit exceeded, changes collapsed.

+2 −2
Original line number Diff line number Diff line
@@ -907,10 +907,10 @@ public abstract class CameraMetadata<TKey> {
     * </ul>
     * <p>Combinations of logical and physical streams, or physical streams from different
     * physical cameras are not guaranteed. However, if the camera device supports
     * {@link CameraDevice#isSessionConfigurationSupported },
     * {@link CameraManager#isSessionConfigurationWithParametersSupported },
     * application must be able to query whether a stream combination involving physical
     * streams is supported by calling
     * {@link CameraDevice#isSessionConfigurationSupported }.</p>
     * {@link CameraManager#isSessionConfigurationWithParametersSupported }.</p>
     * <p>Camera application shouldn't assume that there are at most 1 rear camera and 1 front
     * camera in the system. For an application that switches between front and back cameras,
     * the recommendation is to switch between the first rear camera and the first front
Loading