Loading core/java/android/hardware/camera2/CameraExtensionCharacteristics.java +33 −18 Original line number Original line Diff line number Diff line Loading @@ -824,21 +824,31 @@ public final class CameraExtensionCharacteristics { if (!isExtensionSupported(mCameraId, extension, mChars)) { if (!isExtensionSupported(mCameraId, extension, mChars)) { throw new IllegalArgumentException("Unsupported extension"); throw new IllegalArgumentException("Unsupported extension"); } } CameraMetadataNative captureRequestMeta = null; if (areAdvancedExtensionsSupported()) { IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension); extender.init(mCameraId); captureRequestMeta = extender.getAvailableCaptureRequestKeys(mCameraId); } else { Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = initializeExtension(extension); initializeExtension(extension); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); CameraMetadataNative captureRequestMeta = captureRequestMeta = extenders.second.getAvailableCaptureRequestKeys(); extenders.second.getAvailableCaptureRequestKeys(); extenders.second.onDeInit(); } if (captureRequestMeta != null) { if (captureRequestMeta != null) { int[] requestKeys = captureRequestMeta.get( int[] requestKeys = captureRequestMeta.get( CameraCharacteristics.REQUEST_AVAILABLE_REQUEST_KEYS); CameraCharacteristics.REQUEST_AVAILABLE_REQUEST_KEYS); if (requestKeys == null) { if (requestKeys == null) { throw new AssertionError("android.request.availableRequestKeys must be non-null" throw new AssertionError( "android.request.availableRequestKeys must be non-null" + " in the characteristics"); + " in the characteristics"); } } CameraCharacteristics requestChars = new CameraCharacteristics(captureRequestMeta); CameraCharacteristics requestChars = new CameraCharacteristics( captureRequestMeta); Object crKey = CaptureRequest.Key.class; Object crKey = CaptureRequest.Key.class; Class<CaptureRequest.Key<?>> crKeyTyped = (Class<CaptureRequest.Key<?>>) crKey; Class<CaptureRequest.Key<?>> crKeyTyped = (Class<CaptureRequest.Key<?>>) crKey; Loading @@ -854,7 +864,6 @@ public final class CameraExtensionCharacteristics { if (!ret.contains(CaptureRequest.JPEG_ORIENTATION)) { if (!ret.contains(CaptureRequest.JPEG_ORIENTATION)) { ret.add(CaptureRequest.JPEG_ORIENTATION); ret.add(CaptureRequest.JPEG_ORIENTATION); } } extenders.second.onDeInit(); } catch (RemoteException e) { } catch (RemoteException e) { throw new IllegalStateException("Failed to query the available capture request keys!"); throw new IllegalStateException("Failed to query the available capture request keys!"); } finally { } finally { Loading Loading @@ -894,12 +903,19 @@ public final class CameraExtensionCharacteristics { throw new IllegalArgumentException("Unsupported extension"); throw new IllegalArgumentException("Unsupported extension"); } } CameraMetadataNative captureResultMeta = null; if (areAdvancedExtensionsSupported()) { IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension); extender.init(mCameraId); captureResultMeta = extender.getAvailableCaptureResultKeys(mCameraId); } else { Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = initializeExtension(extension); initializeExtension(extension); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); CameraMetadataNative captureResultMeta = captureResultMeta = extenders.second.getAvailableCaptureResultKeys(); extenders.second.getAvailableCaptureResultKeys(); extenders.second.onDeInit(); } if (captureResultMeta != null) { if (captureResultMeta != null) { int[] resultKeys = captureResultMeta.get( int[] resultKeys = captureResultMeta.get( Loading @@ -926,7 +942,6 @@ public final class CameraExtensionCharacteristics { ret.add(CaptureResult.SENSOR_TIMESTAMP); ret.add(CaptureResult.SENSOR_TIMESTAMP); } } } } extenders.second.onDeInit(); } catch (RemoteException e) { } catch (RemoteException e) { throw new IllegalStateException("Failed to query the available capture result keys!"); throw new IllegalStateException("Failed to query the available capture result keys!"); } finally { } finally { Loading core/java/android/hardware/camera2/CameraExtensionSession.java +11 −4 Original line number Original line Diff line number Diff line Loading @@ -265,8 +265,8 @@ public abstract class CameraExtensionSession implements AutoCloseable { * from the camera device, to produce a single high-quality output result. * from the camera device, to produce a single high-quality output result. * * * <p>Note that single capture requests currently do not support * <p>Note that single capture requests currently do not support * client parameters except for {@link CaptureRequest#JPEG_ORIENTATION orientation} and * client parameters except for controls advertised in * {@link CaptureRequest#JPEG_QUALITY quality} in case of ImageFormat.JPEG output target. * {@link CameraExtensionCharacteristics#getAvailableCaptureRequestKeys}. * The rest of the settings included in the request will be entirely overridden by * The rest of the settings included in the request will be entirely overridden by * the device-specific extension. </p> * the device-specific extension. </p> * * Loading @@ -275,6 +275,11 @@ public abstract class CameraExtensionSession implements AutoCloseable { * arguments that include further targets will cause * arguments that include further targets will cause * IllegalArgumentException to be thrown. </p> * IllegalArgumentException to be thrown. </p> * * * <p>Starting with Android {@link android.os.Build.VERSION_CODES#TIRAMISU} single capture * requests will also support the preview {@link android.graphics.ImageFormat#PRIVATE} target * surface. These can typically be used for enabling AF/AE triggers. Do note, that single * capture requests referencing both output surfaces remain unsupported.</p> * * <p>Each request will produce one new frame for one target Surface, set * <p>Each request will produce one new frame for one target Surface, set * with the CaptureRequest builder's * with the CaptureRequest builder's * {@link CaptureRequest.Builder#addTarget} method.</p> * {@link CaptureRequest.Builder#addTarget} method.</p> Loading Loading @@ -319,8 +324,10 @@ public abstract class CameraExtensionSession implements AutoCloseable { * rate possible.</p> * rate possible.</p> * * * <p>Note that repeating capture requests currently do not support * <p>Note that repeating capture requests currently do not support * client parameters. Settings included in the request will * client parameters except for controls advertised in * be completely overridden by the device-specific extension.</p> * {@link CameraExtensionCharacteristics#getAvailableCaptureRequestKeys}. * The rest of the settings included in the request will be entirely overridden by * the device-specific extension. </p> * * * <p>The {@link CaptureRequest.Builder#addTarget} supports only one * <p>The {@link CaptureRequest.Builder#addTarget} supports only one * target surface. {@link CaptureRequest} arguments that include further * target surface. {@link CaptureRequest} arguments that include further Loading core/java/android/hardware/camera2/extension/IAdvancedExtenderImpl.aidl +3 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.hardware.camera2.extension.ISessionProcessorImpl; import android.hardware.camera2.extension.LatencyRange; import android.hardware.camera2.extension.LatencyRange; import android.hardware.camera2.extension.Size; import android.hardware.camera2.extension.Size; import android.hardware.camera2.extension.SizeList; import android.hardware.camera2.extension.SizeList; import android.hardware.camera2.impl.CameraMetadataNative; /** @hide */ /** @hide */ interface IAdvancedExtenderImpl interface IAdvancedExtenderImpl Loading @@ -30,4 +31,6 @@ interface IAdvancedExtenderImpl @nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId); @nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId); @nullable List<SizeList> getSupportedCaptureOutputResolutions(in String cameraId); @nullable List<SizeList> getSupportedCaptureOutputResolutions(in String cameraId); ISessionProcessorImpl getSessionProcessor(); ISessionProcessorImpl getSessionProcessor(); CameraMetadataNative getAvailableCaptureRequestKeys(in String cameraId); CameraMetadataNative getAvailableCaptureResultKeys(in String cameraId); } } core/java/android/hardware/camera2/extension/ICaptureCallback.aidl +2 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.hardware.camera2.extension; package android.hardware.camera2.extension; import android.hardware.camera2.extension.Request; import android.hardware.camera2.extension.Request; import android.hardware.camera2.impl.CameraMetadataNative; /** @hide */ /** @hide */ interface ICaptureCallback interface ICaptureCallback Loading @@ -25,4 +26,5 @@ interface ICaptureCallback void onCaptureFailed(int captureSequenceId); void onCaptureFailed(int captureSequenceId); void onCaptureSequenceCompleted(int captureSequenceId); void onCaptureSequenceCompleted(int captureSequenceId); void onCaptureSequenceAborted(int captureSequenceId); void onCaptureSequenceAborted(int captureSequenceId); void onCaptureCompleted(long shutterTimestamp, int requestId, in CameraMetadataNative results); } } core/java/android/hardware/camera2/extension/ISessionProcessorImpl.aidl +4 −1 Original line number Original line Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ */ package android.hardware.camera2.extension; package android.hardware.camera2.extension; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.extension.CameraSessionConfig; import android.hardware.camera2.extension.CameraSessionConfig; import android.hardware.camera2.extension.ICaptureCallback; import android.hardware.camera2.extension.ICaptureCallback; import android.hardware.camera2.extension.IRequestProcessorImpl; import android.hardware.camera2.extension.IRequestProcessorImpl; Loading @@ -30,5 +31,7 @@ interface ISessionProcessorImpl void onCaptureSessionEnd(); void onCaptureSessionEnd(); int startRepeating(in ICaptureCallback callback); int startRepeating(in ICaptureCallback callback); void stopRepeating(); void stopRepeating(); int startCapture(in ICaptureCallback callback, int jpegRotation, int jpegQuality); int startCapture(in ICaptureCallback callback); void setParameters(in CaptureRequest captureRequest); int startTrigger(in CaptureRequest captureRequest, in ICaptureCallback callback); } } Loading
core/java/android/hardware/camera2/CameraExtensionCharacteristics.java +33 −18 Original line number Original line Diff line number Diff line Loading @@ -824,21 +824,31 @@ public final class CameraExtensionCharacteristics { if (!isExtensionSupported(mCameraId, extension, mChars)) { if (!isExtensionSupported(mCameraId, extension, mChars)) { throw new IllegalArgumentException("Unsupported extension"); throw new IllegalArgumentException("Unsupported extension"); } } CameraMetadataNative captureRequestMeta = null; if (areAdvancedExtensionsSupported()) { IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension); extender.init(mCameraId); captureRequestMeta = extender.getAvailableCaptureRequestKeys(mCameraId); } else { Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = initializeExtension(extension); initializeExtension(extension); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); CameraMetadataNative captureRequestMeta = captureRequestMeta = extenders.second.getAvailableCaptureRequestKeys(); extenders.second.getAvailableCaptureRequestKeys(); extenders.second.onDeInit(); } if (captureRequestMeta != null) { if (captureRequestMeta != null) { int[] requestKeys = captureRequestMeta.get( int[] requestKeys = captureRequestMeta.get( CameraCharacteristics.REQUEST_AVAILABLE_REQUEST_KEYS); CameraCharacteristics.REQUEST_AVAILABLE_REQUEST_KEYS); if (requestKeys == null) { if (requestKeys == null) { throw new AssertionError("android.request.availableRequestKeys must be non-null" throw new AssertionError( "android.request.availableRequestKeys must be non-null" + " in the characteristics"); + " in the characteristics"); } } CameraCharacteristics requestChars = new CameraCharacteristics(captureRequestMeta); CameraCharacteristics requestChars = new CameraCharacteristics( captureRequestMeta); Object crKey = CaptureRequest.Key.class; Object crKey = CaptureRequest.Key.class; Class<CaptureRequest.Key<?>> crKeyTyped = (Class<CaptureRequest.Key<?>>) crKey; Class<CaptureRequest.Key<?>> crKeyTyped = (Class<CaptureRequest.Key<?>>) crKey; Loading @@ -854,7 +864,6 @@ public final class CameraExtensionCharacteristics { if (!ret.contains(CaptureRequest.JPEG_ORIENTATION)) { if (!ret.contains(CaptureRequest.JPEG_ORIENTATION)) { ret.add(CaptureRequest.JPEG_ORIENTATION); ret.add(CaptureRequest.JPEG_ORIENTATION); } } extenders.second.onDeInit(); } catch (RemoteException e) { } catch (RemoteException e) { throw new IllegalStateException("Failed to query the available capture request keys!"); throw new IllegalStateException("Failed to query the available capture request keys!"); } finally { } finally { Loading Loading @@ -894,12 +903,19 @@ public final class CameraExtensionCharacteristics { throw new IllegalArgumentException("Unsupported extension"); throw new IllegalArgumentException("Unsupported extension"); } } CameraMetadataNative captureResultMeta = null; if (areAdvancedExtensionsSupported()) { IAdvancedExtenderImpl extender = initializeAdvancedExtension(extension); extender.init(mCameraId); captureResultMeta = extender.getAvailableCaptureResultKeys(mCameraId); } else { Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = Pair<IPreviewExtenderImpl, IImageCaptureExtenderImpl> extenders = initializeExtension(extension); initializeExtension(extension); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.onInit(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); extenders.second.init(mCameraId, mChars.getNativeMetadata()); CameraMetadataNative captureResultMeta = captureResultMeta = extenders.second.getAvailableCaptureResultKeys(); extenders.second.getAvailableCaptureResultKeys(); extenders.second.onDeInit(); } if (captureResultMeta != null) { if (captureResultMeta != null) { int[] resultKeys = captureResultMeta.get( int[] resultKeys = captureResultMeta.get( Loading @@ -926,7 +942,6 @@ public final class CameraExtensionCharacteristics { ret.add(CaptureResult.SENSOR_TIMESTAMP); ret.add(CaptureResult.SENSOR_TIMESTAMP); } } } } extenders.second.onDeInit(); } catch (RemoteException e) { } catch (RemoteException e) { throw new IllegalStateException("Failed to query the available capture result keys!"); throw new IllegalStateException("Failed to query the available capture result keys!"); } finally { } finally { Loading
core/java/android/hardware/camera2/CameraExtensionSession.java +11 −4 Original line number Original line Diff line number Diff line Loading @@ -265,8 +265,8 @@ public abstract class CameraExtensionSession implements AutoCloseable { * from the camera device, to produce a single high-quality output result. * from the camera device, to produce a single high-quality output result. * * * <p>Note that single capture requests currently do not support * <p>Note that single capture requests currently do not support * client parameters except for {@link CaptureRequest#JPEG_ORIENTATION orientation} and * client parameters except for controls advertised in * {@link CaptureRequest#JPEG_QUALITY quality} in case of ImageFormat.JPEG output target. * {@link CameraExtensionCharacteristics#getAvailableCaptureRequestKeys}. * The rest of the settings included in the request will be entirely overridden by * The rest of the settings included in the request will be entirely overridden by * the device-specific extension. </p> * the device-specific extension. </p> * * Loading @@ -275,6 +275,11 @@ public abstract class CameraExtensionSession implements AutoCloseable { * arguments that include further targets will cause * arguments that include further targets will cause * IllegalArgumentException to be thrown. </p> * IllegalArgumentException to be thrown. </p> * * * <p>Starting with Android {@link android.os.Build.VERSION_CODES#TIRAMISU} single capture * requests will also support the preview {@link android.graphics.ImageFormat#PRIVATE} target * surface. These can typically be used for enabling AF/AE triggers. Do note, that single * capture requests referencing both output surfaces remain unsupported.</p> * * <p>Each request will produce one new frame for one target Surface, set * <p>Each request will produce one new frame for one target Surface, set * with the CaptureRequest builder's * with the CaptureRequest builder's * {@link CaptureRequest.Builder#addTarget} method.</p> * {@link CaptureRequest.Builder#addTarget} method.</p> Loading Loading @@ -319,8 +324,10 @@ public abstract class CameraExtensionSession implements AutoCloseable { * rate possible.</p> * rate possible.</p> * * * <p>Note that repeating capture requests currently do not support * <p>Note that repeating capture requests currently do not support * client parameters. Settings included in the request will * client parameters except for controls advertised in * be completely overridden by the device-specific extension.</p> * {@link CameraExtensionCharacteristics#getAvailableCaptureRequestKeys}. * The rest of the settings included in the request will be entirely overridden by * the device-specific extension. </p> * * * <p>The {@link CaptureRequest.Builder#addTarget} supports only one * <p>The {@link CaptureRequest.Builder#addTarget} supports only one * target surface. {@link CaptureRequest} arguments that include further * target surface. {@link CaptureRequest} arguments that include further Loading
core/java/android/hardware/camera2/extension/IAdvancedExtenderImpl.aidl +3 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.hardware.camera2.extension.ISessionProcessorImpl; import android.hardware.camera2.extension.LatencyRange; import android.hardware.camera2.extension.LatencyRange; import android.hardware.camera2.extension.Size; import android.hardware.camera2.extension.Size; import android.hardware.camera2.extension.SizeList; import android.hardware.camera2.extension.SizeList; import android.hardware.camera2.impl.CameraMetadataNative; /** @hide */ /** @hide */ interface IAdvancedExtenderImpl interface IAdvancedExtenderImpl Loading @@ -30,4 +31,6 @@ interface IAdvancedExtenderImpl @nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId); @nullable List<SizeList> getSupportedPreviewOutputResolutions(in String cameraId); @nullable List<SizeList> getSupportedCaptureOutputResolutions(in String cameraId); @nullable List<SizeList> getSupportedCaptureOutputResolutions(in String cameraId); ISessionProcessorImpl getSessionProcessor(); ISessionProcessorImpl getSessionProcessor(); CameraMetadataNative getAvailableCaptureRequestKeys(in String cameraId); CameraMetadataNative getAvailableCaptureResultKeys(in String cameraId); } }
core/java/android/hardware/camera2/extension/ICaptureCallback.aidl +2 −0 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.hardware.camera2.extension; package android.hardware.camera2.extension; import android.hardware.camera2.extension.Request; import android.hardware.camera2.extension.Request; import android.hardware.camera2.impl.CameraMetadataNative; /** @hide */ /** @hide */ interface ICaptureCallback interface ICaptureCallback Loading @@ -25,4 +26,5 @@ interface ICaptureCallback void onCaptureFailed(int captureSequenceId); void onCaptureFailed(int captureSequenceId); void onCaptureSequenceCompleted(int captureSequenceId); void onCaptureSequenceCompleted(int captureSequenceId); void onCaptureSequenceAborted(int captureSequenceId); void onCaptureSequenceAborted(int captureSequenceId); void onCaptureCompleted(long shutterTimestamp, int requestId, in CameraMetadataNative results); } }
core/java/android/hardware/camera2/extension/ISessionProcessorImpl.aidl +4 −1 Original line number Original line Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ */ package android.hardware.camera2.extension; package android.hardware.camera2.extension; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.extension.CameraSessionConfig; import android.hardware.camera2.extension.CameraSessionConfig; import android.hardware.camera2.extension.ICaptureCallback; import android.hardware.camera2.extension.ICaptureCallback; import android.hardware.camera2.extension.IRequestProcessorImpl; import android.hardware.camera2.extension.IRequestProcessorImpl; Loading @@ -30,5 +31,7 @@ interface ISessionProcessorImpl void onCaptureSessionEnd(); void onCaptureSessionEnd(); int startRepeating(in ICaptureCallback callback); int startRepeating(in ICaptureCallback callback); void stopRepeating(); void stopRepeating(); int startCapture(in ICaptureCallback callback, int jpegRotation, int jpegQuality); int startCapture(in ICaptureCallback callback); void setParameters(in CaptureRequest captureRequest); int startTrigger(in CaptureRequest captureRequest, in ICaptureCallback callback); } }