diff options
| author | 2023-12-08 08:52:28 +0000 | |
|---|---|---|
| committer | 2023-12-08 08:52:28 +0000 | |
| commit | bfe3e4333330d215f4ff2ac27b10033ab321eaab (patch) | |
| tree | a59d28ddecda4d300e04c9d6ab49761186685d80 | |
| parent | 19bd703426c6943ffbb4471c955e7cfb9c762a85 (diff) | |
| parent | 483a178a9f890b24ef259e685f880202e6f7282c (diff) | |
Merge "Introduce injectSessionParams API in CameraManager" into main
| -rw-r--r-- | core/java/android/hardware/camera2/CameraManager.java | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 002c0b207506..bcce4b65be18 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -1844,7 +1844,7 @@ public final class CameraManager { * Remaps Camera Ids in the CameraService. * * @hide - */ + */ @RequiresPermission(android.Manifest.permission.CAMERA_INJECT_EXTERNAL_CAMERA) public void remapCameraIds(@NonNull CameraIdRemapping cameraIdRemapping) throws CameraAccessException, SecurityException, IllegalArgumentException { @@ -1852,6 +1852,29 @@ public final class CameraManager { } /** + * Injects session params into existing clients in the CameraService. + * + * @param cameraId The camera id of client to inject session params into. + * If no such client exists for cameraId, no injection will + * take place. + * @param sessionParams A {@link CaptureRequest} object containing the + * the sessionParams to inject into the existing client. + * + * @throws CameraAccessException {@link CameraAccessException#CAMERA_DISCONNECTED} will be + * thrown if camera service is not available. Further, if + * if no such client exists for cameraId, + * {@link CameraAccessException#CAMERA_ERROR} will be thrown. + * @throws SecurityException If the caller does not have permission to inject session + * params + * @hide + */ + @RequiresPermission(android.Manifest.permission.CAMERA_INJECT_EXTERNAL_CAMERA) + public void injectSessionParams(@NonNull String cameraId, @NonNull CaptureRequest sessionParams) + throws CameraAccessException, SecurityException { + CameraManagerGlobal.get().injectSessionParams(cameraId, sessionParams); + } + + /** * Reports {@link CameraExtensionSessionStats} to the {@link ICameraService} to be logged for * currently active session. Validation is done downstream. * @@ -2110,6 +2133,30 @@ public final class CameraManager { } } + /** Injects session params into an existing client for cameraid. */ + public void injectSessionParams(@NonNull String cameraId, + @NonNull CaptureRequest sessionParams) + throws CameraAccessException, SecurityException { + synchronized (mLock) { + ICameraService cameraService = getCameraService(); + if (cameraService == null) { + throw new CameraAccessException( + CameraAccessException.CAMERA_DISCONNECTED, + "Camera service is currently unavailable."); + } + + try { + cameraService.injectSessionParams(cameraId, sessionParams.getNativeMetadata()); + } catch (ServiceSpecificException e) { + throwAsPublicException(e); + } catch (RemoteException e) { + throw new CameraAccessException( + CameraAccessException.CAMERA_DISCONNECTED, + "Camera service is currently unavailable."); + } + } + } + private String[] extractCameraIdListLocked() { String[] cameraIds = null; int idCount = 0; |