Loading core/api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -18787,6 +18787,7 @@ package android.hardware.camera2 { method @NonNull public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys(); method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys(); method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailablePhysicalCameraRequestKeys(); method @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getAvailableSessionCharacteristicsKeys(); method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableSessionKeys(); method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys(); method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeysNeedingPermission(); Loading Loading @@ -18939,6 +18940,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 @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @NonNull public android.hardware.camera2.CameraCharacteristics getSessionCharacteristics(@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 core/java/android/hardware/camera2/CameraCharacteristics.java +23 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.camera.flags.Flags; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; Loading Loading @@ -206,6 +207,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri private List<CameraCharacteristics.Key<?>> mKeysNeedingPermission; private List<CaptureRequest.Key<?>> mAvailableRequestKeys; private List<CaptureRequest.Key<?>> mAvailableSessionKeys; private List<CameraCharacteristics.Key<?>> mAvailableSessionCharacteristicsKeys; private List<CaptureRequest.Key<?>> mAvailablePhysicalRequestKeys; private List<CaptureResult.Key<?>> mAvailableResultKeys; private ArrayList<RecommendedStreamConfigurationMap> mRecommendedConfigurations; Loading Loading @@ -545,6 +547,27 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri return mAvailableSessionKeys; } /** * <p>Get the keys in Camera Characteristics whose values are capture session specific. * The session specific characteristics can be acquired by calling * CameraDevice.getSessionCharacteristics(). </p> * * <p>Note that getAvailableSessionKeys returns the CaptureRequest keys that are difficult to * apply per-frame, whereas this function returns CameraCharacteristics keys that are dependent * on a particular SessionConfiguration.</p> * * @return List of CameraCharacteristic keys containing characterisitics specific to a session * configuration. For Android 15, this list only contains CONTROL_ZOOM_RATIO_RANGE. */ @NonNull @FlaggedApi(Flags.FLAG_FEATURE_COMBINATION_QUERY) public List<CameraCharacteristics.Key<?>> getAvailableSessionCharacteristicsKeys() { if (mAvailableSessionCharacteristicsKeys == null) { mAvailableSessionCharacteristicsKeys = Arrays.asList(CONTROL_ZOOM_RATIO_RANGE); } return mAvailableSessionCharacteristicsKeys; } /** * <p>Returns a subset of {@link #getAvailableCaptureRequestKeys} keys that can * be overridden for physical devices backing a logical multi-camera.</p> Loading core/java/android/hardware/camera2/CameraDevice.java +32 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.hardware.camera2; import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -28,6 +29,8 @@ import android.hardware.camera2.params.StreamConfigurationMap; import android.os.Handler; import android.view.Surface; import com.android.internal.camera.flags.Flags; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; Loading Loading @@ -1412,6 +1415,34 @@ public abstract class CameraDevice implements AutoCloseable { throw new UnsupportedOperationException("Subclasses must override this method"); } /** * <p>Get camera characteristics for a particular session configuration by the camera device.</p> * * <p>The camera characteristics returned here is typically more limited than the characteristics * returned from {@link CameraManager#getCameraCharacteristics}. The keys that have more limited * values are listed in * {@link CameraCharacteristics#getAvailableSessionCharacteristicsKeys}. </p> * * <p>Other than that, the characteristics returned here can be used in the same way as those * returned from {@link CameraManager#getCameraCharacteristics}.</p> * * @param sessionConfig : The session configuration for which characteristics are fetched. * @return CameraCharacteristics specific to a given session configuration. * @throws UnsupportedOperationException if the query operation is not supported by the camera * device * @throws IllegalArgumentException if the session configuration is invalid * @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 * @see android.hardware.camera2.CameraCharacteristics#getAvailableSessionCharacteristicsKeys */ @NonNull @FlaggedApi(Flags.FLAG_FEATURE_COMBINATION_QUERY) public CameraCharacteristics getSessionCharacteristics( @NonNull SessionConfiguration sessionConfig) throws CameraAccessException { throw new UnsupportedOperationException("Subclasses must override this method"); } /** * A callback objects for receiving updates about the state of a camera device. * Loading core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +12 −0 Original line number Diff line number Diff line Loading @@ -786,6 +786,18 @@ public class CameraDeviceImpl extends CameraDevice } } @Override public CameraCharacteristics getSessionCharacteristics( @NonNull SessionConfiguration sessionConfig) throws CameraAccessException, UnsupportedOperationException, IllegalArgumentException { synchronized (mInterfaceLock) { checkIfCameraClosedOrInError(); CameraMetadataNative info = mRemoteDevice.getSessionCharacteristics(sessionConfig); return new CameraCharacteristics(info); } } /** * For use by backwards-compatibility code only. */ Loading core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java +24 −9 Original line number Diff line number Diff line Loading @@ -16,19 +16,12 @@ package android.hardware.camera2.impl; import static android.hardware.camera2.CameraAccessException.CAMERA_DISABLED; import static android.hardware.camera2.CameraAccessException.CAMERA_DISCONNECTED; import static android.hardware.camera2.CameraAccessException.CAMERA_IN_USE; import static android.hardware.camera2.CameraAccessException.CAMERA_ERROR; import static android.hardware.camera2.CameraAccessException.MAX_CAMERAS_IN_USE; import static android.hardware.camera2.CameraAccessException.CAMERA_DEPRECATED_HAL; import android.hardware.ICameraService; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraDeviceCallbacks; import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraOfflineSession; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.params.OutputConfiguration; Loading Loading @@ -205,6 +198,28 @@ public class ICameraDeviceUserWrapper { } } /** * Fetches the CameraCharacteristics for a given session configuration. */ public CameraMetadataNative getSessionCharacteristics(SessionConfiguration sessionConfig) throws CameraAccessException { try { return mRemoteDevice.getSessionCharacteristics(sessionConfig); } catch (ServiceSpecificException e) { if (e.errorCode == ICameraService.ERROR_INVALID_OPERATION) { throw new UnsupportedOperationException("Session characteristics query not " + "supported"); } else if (e.errorCode == ICameraService.ERROR_ILLEGAL_ARGUMENT) { throw new IllegalArgumentException("Invalid session configuration"); } throw e; } catch (Throwable t) { CameraManager.throwAsPublicException(t); throw new UnsupportedOperationException("Unexpected exception", t); } } public long flush() throws CameraAccessException { try { return mRemoteDevice.flush(); Loading Loading
core/api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -18787,6 +18787,7 @@ package android.hardware.camera2 { method @NonNull public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys(); method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys(); method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailablePhysicalCameraRequestKeys(); method @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getAvailableSessionCharacteristicsKeys(); method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableSessionKeys(); method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys(); method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeysNeedingPermission(); Loading Loading @@ -18939,6 +18940,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 @FlaggedApi("com.android.internal.camera.flags.feature_combination_query") @NonNull public android.hardware.camera2.CameraCharacteristics getSessionCharacteristics(@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
core/java/android/hardware/camera2/CameraCharacteristics.java +23 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.camera.flags.Flags; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; Loading Loading @@ -206,6 +207,7 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri private List<CameraCharacteristics.Key<?>> mKeysNeedingPermission; private List<CaptureRequest.Key<?>> mAvailableRequestKeys; private List<CaptureRequest.Key<?>> mAvailableSessionKeys; private List<CameraCharacteristics.Key<?>> mAvailableSessionCharacteristicsKeys; private List<CaptureRequest.Key<?>> mAvailablePhysicalRequestKeys; private List<CaptureResult.Key<?>> mAvailableResultKeys; private ArrayList<RecommendedStreamConfigurationMap> mRecommendedConfigurations; Loading Loading @@ -545,6 +547,27 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri return mAvailableSessionKeys; } /** * <p>Get the keys in Camera Characteristics whose values are capture session specific. * The session specific characteristics can be acquired by calling * CameraDevice.getSessionCharacteristics(). </p> * * <p>Note that getAvailableSessionKeys returns the CaptureRequest keys that are difficult to * apply per-frame, whereas this function returns CameraCharacteristics keys that are dependent * on a particular SessionConfiguration.</p> * * @return List of CameraCharacteristic keys containing characterisitics specific to a session * configuration. For Android 15, this list only contains CONTROL_ZOOM_RATIO_RANGE. */ @NonNull @FlaggedApi(Flags.FLAG_FEATURE_COMBINATION_QUERY) public List<CameraCharacteristics.Key<?>> getAvailableSessionCharacteristicsKeys() { if (mAvailableSessionCharacteristicsKeys == null) { mAvailableSessionCharacteristicsKeys = Arrays.asList(CONTROL_ZOOM_RATIO_RANGE); } return mAvailableSessionCharacteristicsKeys; } /** * <p>Returns a subset of {@link #getAvailableCaptureRequestKeys} keys that can * be overridden for physical devices backing a logical multi-camera.</p> Loading
core/java/android/hardware/camera2/CameraDevice.java +32 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.hardware.camera2; import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading @@ -28,6 +29,8 @@ import android.hardware.camera2.params.StreamConfigurationMap; import android.os.Handler; import android.view.Surface; import com.android.internal.camera.flags.Flags; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.List; Loading Loading @@ -1412,6 +1415,34 @@ public abstract class CameraDevice implements AutoCloseable { throw new UnsupportedOperationException("Subclasses must override this method"); } /** * <p>Get camera characteristics for a particular session configuration by the camera device.</p> * * <p>The camera characteristics returned here is typically more limited than the characteristics * returned from {@link CameraManager#getCameraCharacteristics}. The keys that have more limited * values are listed in * {@link CameraCharacteristics#getAvailableSessionCharacteristicsKeys}. </p> * * <p>Other than that, the characteristics returned here can be used in the same way as those * returned from {@link CameraManager#getCameraCharacteristics}.</p> * * @param sessionConfig : The session configuration for which characteristics are fetched. * @return CameraCharacteristics specific to a given session configuration. * @throws UnsupportedOperationException if the query operation is not supported by the camera * device * @throws IllegalArgumentException if the session configuration is invalid * @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 * @see android.hardware.camera2.CameraCharacteristics#getAvailableSessionCharacteristicsKeys */ @NonNull @FlaggedApi(Flags.FLAG_FEATURE_COMBINATION_QUERY) public CameraCharacteristics getSessionCharacteristics( @NonNull SessionConfiguration sessionConfig) throws CameraAccessException { throw new UnsupportedOperationException("Subclasses must override this method"); } /** * A callback objects for receiving updates about the state of a camera device. * Loading
core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +12 −0 Original line number Diff line number Diff line Loading @@ -786,6 +786,18 @@ public class CameraDeviceImpl extends CameraDevice } } @Override public CameraCharacteristics getSessionCharacteristics( @NonNull SessionConfiguration sessionConfig) throws CameraAccessException, UnsupportedOperationException, IllegalArgumentException { synchronized (mInterfaceLock) { checkIfCameraClosedOrInError(); CameraMetadataNative info = mRemoteDevice.getSessionCharacteristics(sessionConfig); return new CameraCharacteristics(info); } } /** * For use by backwards-compatibility code only. */ Loading
core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java +24 −9 Original line number Diff line number Diff line Loading @@ -16,19 +16,12 @@ package android.hardware.camera2.impl; import static android.hardware.camera2.CameraAccessException.CAMERA_DISABLED; import static android.hardware.camera2.CameraAccessException.CAMERA_DISCONNECTED; import static android.hardware.camera2.CameraAccessException.CAMERA_IN_USE; import static android.hardware.camera2.CameraAccessException.CAMERA_ERROR; import static android.hardware.camera2.CameraAccessException.MAX_CAMERAS_IN_USE; import static android.hardware.camera2.CameraAccessException.CAMERA_DEPRECATED_HAL; import android.hardware.ICameraService; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraDeviceCallbacks; import android.hardware.camera2.ICameraDeviceUser; import android.hardware.camera2.ICameraOfflineSession; import android.hardware.camera2.impl.CameraMetadataNative; import android.hardware.camera2.params.OutputConfiguration; Loading Loading @@ -205,6 +198,28 @@ public class ICameraDeviceUserWrapper { } } /** * Fetches the CameraCharacteristics for a given session configuration. */ public CameraMetadataNative getSessionCharacteristics(SessionConfiguration sessionConfig) throws CameraAccessException { try { return mRemoteDevice.getSessionCharacteristics(sessionConfig); } catch (ServiceSpecificException e) { if (e.errorCode == ICameraService.ERROR_INVALID_OPERATION) { throw new UnsupportedOperationException("Session characteristics query not " + "supported"); } else if (e.errorCode == ICameraService.ERROR_ILLEGAL_ARGUMENT) { throw new IllegalArgumentException("Invalid session configuration"); } throw e; } catch (Throwable t) { CameraManager.throwAsPublicException(t); throw new UnsupportedOperationException("Unexpected exception", t); } } public long flush() throws CameraAccessException { try { return mRemoteDevice.flush(); Loading