/**@class android.hardware.camera2.CameraDevice implements java.lang.AutoCloseable @extends java.lang.Object <p>The CameraDevice class is a representation of a single camera connected to an Android device, allowing for fine-grain control of image capture and post-processing at high frame rates.</p> <p>Your application must declare the {@link android.Manifest.permission#CAMERA Camera} permission in its manifest in order to access camera devices.</p> <p>A given camera device may provide support at one of several levels defined in {@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL}. If a device supports {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY} level, the camera device is running in backward compatibility mode and has minimum camera2 API support. If a device supports the {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} level, then Camera2 exposes a feature set that is roughly equivalent to the older {@link android.hardware.Camera Camera} API, although with a cleaner and more efficient interface. If a device supports the {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL EXTERNAL} level, then the device is a removable camera that provides similar but slightly less features as the {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} level. Devices that implement the {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL} or {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_3 LEVEL3} level of support provide substantially improved capabilities over the older camera API. If your application requires a full-level device for proper operation, declare the "android.hardware.camera.level.full" feature in your manifest.</p> @see CameraManager#openCamera @see android.Manifest.permission#CAMERA @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL */ var CameraDevice = { /** Create a request suitable for a camera preview window. Specifically, this means that high frame rate is given priority over the highest-quality post-processing. These requests would normally be used with the {@link android.hardware.camera2.CameraCaptureSession#setRepeatingRequest} method. This template is guaranteed to be supported on all camera devices. @see #createCaptureRequest */ TEMPLATE_PREVIEW : "1", /** Create a request suitable for still image capture. Specifically, this means prioritizing image quality over frame rate. These requests would commonly be used with the {@link android.hardware.camera2.CameraCaptureSession#capture} method. This template is guaranteed to be supported on all camera devices except {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT DEPTH_OUTPUT} devices that are not {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE BACKWARD_COMPATIBLE}. @see #createCaptureRequest */ TEMPLATE_STILL_CAPTURE : "2", /** Create a request suitable for video recording. Specifically, this means that a stable frame rate is used, and post-processing is set for recording quality. These requests would commonly be used with the {@link android.hardware.camera2.CameraCaptureSession#setRepeatingRequest} method. This template is guaranteed to be supported on all camera devices except {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT DEPTH_OUTPUT} devices that are not {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE BACKWARD_COMPATIBLE}. @see #createCaptureRequest */ TEMPLATE_RECORD : "3", /** Create a request suitable for still image capture while recording video. Specifically, this means maximizing image quality without disrupting the ongoing recording. These requests would commonly be used with the {@link android.hardware.camera2.CameraCaptureSession#capture} method while a request based on {@link #TEMPLATE_RECORD} is is in use with {@link android.hardware.camera2.CameraCaptureSession#setRepeatingRequest}. This template is guaranteed to be supported on all camera devices except legacy devices ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY}) and {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT DEPTH_OUTPUT} devices that are not {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE BACKWARD_COMPATIBLE}. @see #createCaptureRequest */ TEMPLATE_VIDEO_SNAPSHOT : "4", /** Create a request suitable for zero shutter lag still capture. This means means maximizing image quality without compromising preview frame rate. AE/AWB/AF should be on auto mode. This is intended for application-operated ZSL. For device-operated ZSL, use {@link android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL} if available. This template is guaranteed to be supported on camera devices that support the {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING PRIVATE_REPROCESSING} capability or the {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING YUV_REPROCESSING} capability. @see #createCaptureRequest @see CaptureRequest#CONTROL_ENABLE_ZSL */ TEMPLATE_ZERO_SHUTTER_LAG : "5", /** A basic template for direct application control of capture parameters. All automatic control is disabled (auto-exposure, auto-white balance, auto-focus), and post-processing parameters are set to preview quality. The manual capture parameters (exposure, sensitivity, and so on) are set to reasonable defaults, but should be overriden by the application depending on the intended use case. This template is guaranteed to be supported on camera devices that support the {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR MANUAL_SENSOR} capability. @see #createCaptureRequest */ TEMPLATE_MANUAL : "6", /** Standard camera operation mode. @see #createCustomCaptureSession @hide */ SESSION_OPERATION_MODE_NORMAL : "0", /** Constrained high-speed operation mode. @see #createCustomCaptureSession @hide */ SESSION_OPERATION_MODE_CONSTRAINED_HIGH_SPEED : "1", /** First vendor-specific operating mode @see #createCustomCaptureSession @hide */ SESSION_OPERATION_MODE_VENDOR_START : "32768", /**Get the ID of this camera device. <p>This matches the ID given to {@link android.hardware.camera2.CameraManager#openCamera} to instantiate this this camera device.</p> <p>This ID can be used to query the camera device's {@link android.hardware.camera2.CameraCharacteristics fixed properties} with {@link android.hardware.camera2.CameraManager#getCameraCharacteristics}.</p> <p>This method can be called even if the device has been closed or has encountered a serious error.</p> @return {String} the ID for this camera device @see CameraManager#getCameraCharacteristics @see CameraManager#getCameraIdList */ getId : function( ) {}, /**<p>Create a new camera capture session by providing the target output set of Surfaces to the camera device.</p> <p>The active capture session determines the set of potential output Surfaces for the camera device for each capture request. A given request may use all or only some of the outputs. Once the CameraCaptureSession is created, requests can be submitted with {@link android.hardware.camera2.CameraCaptureSession#capture capture}, {@link android.hardware.camera2.CameraCaptureSession#captureBurst captureBurst}, {@link android.hardware.camera2.CameraCaptureSession#setRepeatingRequest setRepeatingRequest}, or {@link android.hardware.camera2.CameraCaptureSession#setRepeatingBurst setRepeatingBurst}.</p> <p>Surfaces suitable for inclusion as a camera output can be created for various use cases and targets:</p> <ul> <li>For drawing to a {@link android.view.SurfaceView SurfaceView}: Once the SurfaceView's Surface is {@link android.view.SurfaceHolder.Callback#surfaceCreated created}, set the size of the Surface with {@link android.view.SurfaceHolder#setFixedSize} to be one of the sizes returned by {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(SurfaceHolder.class)} and then obtain the Surface by calling {@link android.view.SurfaceHolder#getSurface}. If the size is not set by the application, it will be rounded to the nearest supported size less than 1080p, by the camera device.</li> <li>For accessing through an OpenGL texture via a {@link android.graphics.SurfaceTexture SurfaceTexture}: Set the size of the SurfaceTexture with {@link android.graphics.SurfaceTexture#setDefaultBufferSize} to be one of the sizes returned by {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(SurfaceTexture.class)} before creating a Surface from the SurfaceTexture with {@link Surface#Surface}. If the size is not set by the application, it will be set to be the smallest supported size less than 1080p, by the camera device.</li> <li>For recording with {@link android.media.MediaCodec}: Call {@link android.media.MediaCodec#createInputSurface} after configuring the media codec to use one of the sizes returned by {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(MediaCodec.class)} </li> <li>For recording with {@link android.media.MediaRecorder}: Call {@link android.media.MediaRecorder#getSurface} after configuring the media recorder to use one of the sizes returned by {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(MediaRecorder.class)}, or configuring it to use one of the supported {@link android.media.CamcorderProfile CamcorderProfiles}.</li> <li>For efficient YUV processing with {@link android.renderscript}: Create a RenderScript {@link android.renderscript.Allocation Allocation} with a supported YUV type, the IO_INPUT flag, and one of the sizes returned by {@link StreamConfigurationMap#getOutputSizes(Class) getOutputSizes(Allocation.class)}, Then obtain the Surface with {@link android.renderscript.Allocation#getSurface}.</li> <li>For access to RAW, uncompressed YUV, or compressed JPEG data in the application: Create an {@link android.media.ImageReader} object with one of the supported output formats given by {@link StreamConfigurationMap#getOutputFormats()}, setting its size to one of the corresponding supported sizes by passing the chosen output format into {@link StreamConfigurationMap#getOutputSizes(int)}. Then obtain a {@link android.view.Surface} from it with {@link android.media.ImageReader#getSurface()}. If the ImageReader size is not set to a supported size, it will be rounded to a supported size less than 1080p by the camera device. </li> </ul> <p>The camera device will query each Surface's size and formats upon this call, so they must be set to a valid setting at this time.</p> <p>It can take several hundred milliseconds for the session's configuration to complete, since camera hardware may need to be powered on or reconfigured. Once the configuration is complete and the session is ready to actually capture data, the provided {@link android.hardware.camera2.CameraCaptureSession.StateCallback}'s {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onConfigured} callback will be called.</p> <p>If a prior CameraCaptureSession already exists when this method is called, the previous session will no longer be able to accept new capture requests and will be closed. Any in-progress capture requests made on the prior session will be completed before it's closed. {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onConfigured} for the new session may be invoked before {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onClosed} is invoked for the prior session. Once the new session is {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onConfigured configured}, it is able to start capturing its own requests. To minimize the transition time, the {@link android.hardware.camera2.CameraCaptureSession#abortCaptures} call can be used to discard the remaining requests for the prior capture session before a new one is created. Note that once the new session is created, the old one can no longer have its captures aborted.</p> <p>Using larger resolution outputs, or more outputs, can result in slower output rate from the device.</p> <p>Configuring a session with an empty or null list will close the current session, if any. This can be used to release the current session's target surfaces for another use.</p> <p>While any of the sizes from {@link StreamConfigurationMap#getOutputSizes} can be used when a single output stream is configured, a given camera device may not be able to support all combination of sizes, formats, and targets when multiple outputs are configured at once. The tables below list the maximum guaranteed resolutions for combinations of streams and targets, given the capabilities of the camera device.</p> <p>If an application tries to create a session using a set of targets that exceed the limits described in the below tables, one of three possibilities may occur. First, the session may be successfully created and work normally. Second, the session may be successfully created, but the camera device won't meet the frame rate guarantees as described in {@link StreamConfigurationMap#getOutputMinFrameDuration}. Or third, if the output set cannot be used at all, session creation will fail entirely, with {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onConfigureFailed} being invoked.</p> <p>For the type column, {@code PRIV} refers to any target whose available sizes are found using {@link StreamConfigurationMap#getOutputSizes(Class)} with no direct application-visible format, {@code YUV} refers to a target Surface using the {@link android.graphics.ImageFormat#YUV_420_888} format, {@code JPEG} refers to the {@link android.graphics.ImageFormat#JPEG} format, and {@code RAW} refers to the {@link android.graphics.ImageFormat#RAW_SENSOR} format.</p> <p>For the maximum size column, {@code PREVIEW} refers to the best size match to the device's screen resolution, or to 1080p ({@code 1920x1080}), whichever is smaller. {@code RECORD} refers to the camera device's maximum supported recording resolution, as determined by {@link android.media.CamcorderProfile}. And {@code MAXIMUM} refers to the camera device's maximum output resolution for that format or target from {@link StreamConfigurationMap#getOutputSizes}.</p> <p>To use these tables, determine the number and the formats/targets of outputs needed, and find the row(s) of the table with those targets. The sizes indicate the maximum set of sizes that can be used; it is guaranteed that for those targets, the listed sizes and anything smaller from the list given by {@link StreamConfigurationMap#getOutputSizes} can be successfully used to create a session. For example, if a row indicates that a 8 megapixel (MP) YUV_420_888 output can be used together with a 2 MP {@code PRIV} output, then a session can be created with targets {@code [8 MP YUV, 2 MP PRIV]} or targets {@code [2 MP YUV, 2 MP PRIV]}; but a session with targets {@code [8 MP YUV, 4 MP PRIV]}, targets {@code [4 MP YUV, 4 MP PRIV]}, or targets {@code [8 MP PRIV, 2 MP YUV]} would not be guaranteed to work, unless some other row of the table lists such a combination.</p> <style scoped> #rb { border-right-width: thick; } </style> <p>Legacy devices ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY}) support at least the following stream combinations: <table> <tr><th colspan="7">LEGACY-level guaranteed configurations</th></tr> <tr> <th colspan="2" id="rb">Target 1</th> <th colspan="2" id="rb">Target 2</th> <th colspan="2" id="rb">Target 3</th> <th rowspan="2">Sample use case(s)</th> </tr> <tr> <th>Type</th><th id="rb">Max size</th> <th>Type</th><th id="rb">Max size</th> <th>Type</th><th id="rb">Max size</th></tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td colspan="2" id="rb"></td> <td>Simple preview, GPU video processing, or no-preview video recording.</td> </tr> <tr> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td colspan="2" id="rb"></td> <td>No-viewfinder still image capture.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td colspan="2" id="rb"></td> <td>In-application video/image processing.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>Standard still imaging.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>In-app processing plus still capture.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td colspan="2" id="rb"></td> <td>Standard recording.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td colspan="2" id="rb"></td> <td>Preview plus in-app processing.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>Still capture plus in-app processing.</td> </tr> </table><br> </p> <p>Limited-level ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED}) devices support at least the following stream combinations in addition to those for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY LEGACY} devices: <table> <tr><th colspan="7">LIMITED-level additional guaranteed configurations</th></tr> <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th> <th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th></tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code RECORD }</td> <td colspan="2" id="rb"></td> <td>High-resolution video recording with preview.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code RECORD }</td> <td colspan="2" id="rb"></td> <td>High-resolution in-app video processing with preview.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code RECORD }</td> <td colspan="2" id="rb"></td> <td>Two-input in-app video processing.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code RECORD }</td> <td>{@code JPEG}</td><td id="rb">{@code RECORD }</td> <td>High-resolution recording with video snapshot.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code RECORD }</td> <td>{@code JPEG}</td><td id="rb">{@code RECORD }</td> <td>High-resolution in-app processing with video snapshot.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>Two-input in-app processing with still capture.</td> </tr> </table><br> </p> <p>FULL-level ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL}) devices support at least the following stream combinations in addition to those for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices: <table> <tr><th colspan="7">FULL-level additional guaranteed configurations</th></tr> <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th> <th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>Maximum-resolution GPU processing with preview.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>Maximum-resolution in-app processing with preview.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>Maximum-resolution two-input in-app processsing.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>Video recording with maximum-size video snapshot</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code 640x480}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td>Standard video recording plus maximum-resolution in-app processing.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code 640x480}</td> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td>Preview plus two-input maximum-resolution in-app processing.</td> </tr> </table><br> </p> <p>RAW-capability ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}) devices additionally support at least the following stream combinations on both {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL} and {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices: <table> <tr><th colspan="7">RAW-capability additional guaranteed configurations</th></tr> <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th> <th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th> </tr> <tr> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td colspan="2" id="rb"></td> <td>No-preview DNG capture.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>Standard DNG capture.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>In-app processing plus DNG capture.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td>Video recording with DNG capture.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td>Preview with in-app processing and DNG capture.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td>Two-input in-app processing plus DNG capture.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td>Still capture with simultaneous JPEG and DNG.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code RAW }</td><td id="rb">{@code MAXIMUM}</td> <td>In-app processing with simultaneous JPEG and DNG.</td> </tr> </table><br> </p> <p>BURST-capability ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE BURST_CAPTURE}) devices support at least the below stream combinations in addition to those for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices. Note that all FULL-level devices support the BURST capability, and the below list is a strict subset of the list for FULL-level devices, so this table is only relevant for LIMITED-level devices that support the BURST_CAPTURE capability. <table> <tr><th colspan="5">BURST-capability additional guaranteed configurations</th></tr> <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>Maximum-resolution GPU processing with preview.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td>Maximum-resolution in-app processing with preview.</td> </tr> <tr> <td>{@code YUV }</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td>Maximum-resolution two-input in-app processsing.</td> </tr> </table><br> </p> <p>LEVEL-3 ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_3 LEVEL_3}) support at least the following stream combinations in addition to the combinations for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL} and for RAW capability ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}): <table> <tr><th colspan="11">LEVEL-3 additional guaranteed configurations</th></tr> <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th><th colspan="2" id="rb">Target 4</th><th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code 640x480}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>In-app viewfinder analysis with dynamic selection of output format.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code 640x480}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>In-app viewfinder analysis with dynamic selection of output format.</td> </tr> </table><br> </p> <p>MONOCHROME-capability ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME MONOCHROME}) devices supporting {@link android.graphics.ImageFormat#Y8 Y8} support substituting {@code YUV} streams with {@code Y8} in all guaranteed stream combinations for the device's hardware level and capabilities.</p> <p>Devices capable of outputting HEIC formats ({@link StreamConfigurationMap#getOutputFormats} contains {@link android.graphics.ImageFormat#HEIC}) will support substituting {@code JPEG} streams with {@code HEIC} in all guaranteed stream combinations for the device's hardware level and capabilities. Calling createCaptureSession with both JPEG and HEIC outputs is not supported.</p> <p>Clients can access the above mandatory stream combination tables via {@link android.hardware.camera2.params.MandatoryStreamCombination}.</p> <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> <p>Exception on 176x144 (QCIF) resolution: Camera devices usually have a fixed capability for downscaling from larger resolution to smaller, and the QCIF resolution sometimes is not fully supported due to this limitation on devices with high-resolution image sensors. Therefore, trying to configure a QCIF resolution stream together with any other stream larger than 1920x1080 resolution (either width or height) might not be supported, and capture session creation will fail if it is not.</p> @param {Object {java.util.List}} outputs The new set of Surfaces that should be made available as targets for captured image data. @param {Object {CameraCaptureSession.StateCallback}} callback The callback to notify about the status of the new capture session. @param {Object {Handler}} handler The handler on which the callback should be invoked, or {@code null} to use the current thread's {@link android.os.Looper looper}. @throws IllegalArgumentException if the set of output Surfaces do not meet the requirements, the callback is null, or the handler is null but the current thread has no looper. @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 CameraCaptureSession @see StreamConfigurationMap#getOutputFormats() @see StreamConfigurationMap#getOutputSizes(int) @see StreamConfigurationMap#getOutputSizes(Class) */ createCaptureSession : function( ) {}, /**<p>Create a new camera capture session by providing the target output set of Surfaces and its corresponding surface configuration to the camera device.</p> @see #createCaptureSession @see OutputConfiguration */ createCaptureSessionByOutputConfigurations : function( ) {}, /**Create a new reprocessable camera capture session by providing the desired reprocessing input Surface configuration and the target output set of Surfaces to the camera device. <p>If a camera device supports YUV reprocessing ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING}) or PRIVATE reprocessing ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING}), besides the capture session created via {@link #createCaptureSession createCaptureSession}, the application can also create a reprocessable capture session to submit reprocess capture requests in addition to regular capture requests. A reprocess capture request takes the next available buffer from the session's input Surface, and sends it through the camera device's processing pipeline again, to produce buffers for the request's target output Surfaces. No new image data is captured for a reprocess request. However the input buffer provided by the application must be captured previously by the same camera device in the same session directly (e.g. for Zero-Shutter-Lag use case) or indirectly (e.g. combining multiple output images).</p> <p>The active reprocessable capture session determines an input {@link Surface} and the set of potential output Surfaces for the camera devices for each capture request. The application can use {@link #createCaptureRequest createCaptureRequest} to create regular capture requests to capture new images from the camera device, and use {@link #createReprocessCaptureRequest createReprocessCaptureRequest} to create reprocess capture requests to process buffers from the input {@link Surface}. Some combinations of output Surfaces in a session may not be used in a request simultaneously. The guaranteed combinations of output Surfaces that can be used in a request simultaneously are listed in the tables under {@link #createCaptureSession createCaptureSession}. All the output Surfaces in one capture request will come from the same source, either from a new capture by the camera device, or from the input Surface depending on if the request is a reprocess capture request.</p> <p>Input formats and sizes supported by the camera device can be queried via {@link StreamConfigurationMap#getInputFormats} and {@link StreamConfigurationMap#getInputSizes}. For each supported input format, the camera device supports a set of output formats and sizes for reprocessing that can be queried via {@link StreamConfigurationMap#getValidOutputFormatsForInput} and {@link StreamConfigurationMap#getOutputSizes}. While output Surfaces with formats that aren't valid reprocess output targets for the input configuration can be part of a session, they cannot be used as targets for a reprocessing request.</p> <p>Since the application cannot access {@link android.graphics.ImageFormat#PRIVATE} images directly, an output Surface created by {@link android.media.ImageReader#newInstance} with {@link android.graphics.ImageFormat#PRIVATE} as the format will be considered as intended to be used for reprocessing input and thus the {@link android.media.ImageReader} size must match one of the supported input sizes for {@link android.graphics.ImageFormat#PRIVATE} format. Otherwise, creating a reprocessable capture session will fail.</p> <p>The guaranteed stream configurations listed in {@link #createCaptureSession createCaptureSession} are also guaranteed to work for {@link #createReprocessableCaptureSession createReprocessableCaptureSession}. In addition, the configurations in the tables below are also guaranteed for creating a reprocessable capture session if the camera device supports YUV reprocessing or PRIVATE reprocessing. However, not all output targets used to create a reprocessable session may be used in a {@link android.hardware.camera2.CaptureRequest} simultaneously. For devices that support only 1 output target in a reprocess {@link android.hardware.camera2.CaptureRequest}, submitting a reprocess {@link android.hardware.camera2.CaptureRequest} with multiple output targets will result in a {@link android.hardware.camera2.CaptureFailure}. For devices that support multiple output targets in a reprocess {@link android.hardware.camera2.CaptureRequest}, the guaranteed output targets that can be included in a {@link android.hardware.camera2.CaptureRequest} simultaneously are listed in the tables under {@link #createCaptureSession createCaptureSession}. For example, with a FULL-capability ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == } {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL}) device that supports PRIVATE reprocessing, an application can create a reprocessable capture session with 1 input, ({@code PRIV}, {@code MAXIMUM}), and 3 outputs, ({@code PRIV}, {@code MAXIMUM}), ({@code PRIV}, {@code PREVIEW}), and ({@code YUV}, {@code MAXIMUM}). However, it's not guaranteed that an application can submit a regular or reprocess capture with ({@code PRIV}, {@code MAXIMUM}) and ({@code YUV}, {@code MAXIMUM}) outputs based on the table listed under {@link #createCaptureSession createCaptureSession}. In other words, use the tables below to determine the guaranteed stream configurations for creating a reprocessable capture session, and use the tables under {@link #createCaptureSession createCaptureSession} to determine the guaranteed output targets that can be submitted in a regular or reprocess {@link android.hardware.camera2.CaptureRequest} simultaneously.</p> <style scoped> #rb { border-right-width: thick; } </style> <p>LIMITED-level ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED}) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those listed in {@link #createCaptureSession createCaptureSession} for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices: <table> <tr><th colspan="11">LIMITED-level additional guaranteed configurations for creating a reprocessable capture session<br>({@code PRIV} input is guaranteed only if PRIVATE reprocessing is supported. {@code YUV} input is guaranteed only if YUV reprocessing is supported)</th></tr> <tr><th colspan="2" id="rb">Input</th><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th><th colspan="2" id="rb">Target 4</th><th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th></tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td></td><td id="rb"></td> <td>No-viewfinder still image reprocessing.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>ZSL(Zero-Shutter-Lag) still imaging.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>ZSL still and in-app processing imaging.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>ZSL in-app processing with still capture.</td> </tr> </table><br> </p> <p>FULL-level ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL}) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices: <table> <tr><th colspan="11">FULL-level additional guaranteed configurations for creating a reprocessable capture session<br>({@code PRIV} input is guaranteed only if PRIVATE reprocessing is supported. {@code YUV} input is guaranteed only if YUV reprocessing is supported)</th></tr> <tr><th colspan="2" id="rb">Input</th><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th><th colspan="2" id="rb">Target 4</th><th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th></tr> <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td></td><td id="rb"></td> <td></td><td id="rb"></td> <td>Maximum-resolution multi-frame image fusion in-app processing with regular preview.</td> </tr> <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td></td><td id="rb"></td> <td></td><td id="rb"></td> <td>Maximum-resolution multi-frame image fusion two-input in-app processing.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code RECORD}</td> <td></td><td id="rb"></td> <td>High-resolution ZSL in-app video processing with regular preview.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>Maximum-resolution ZSL in-app processing with regular preview.</td> </tr> <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>Maximum-resolution two-input ZSL in-app processing.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>ZSL still capture and in-app processing.</td> </tr> </table><br> </p> <p>RAW-capability ({@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} includes {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW RAW}) devices additionally support at least the following stream combinations for creating a reprocessable capture session on both {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL} and {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED LIMITED} devices <table> <tr><th colspan="11">RAW-capability additional guaranteed configurations for creating a reprocessable capture session<br>({@code PRIV} input is guaranteed only if PRIVATE reprocessing is supported. {@code YUV} input is guaranteed only if YUV reprocessing is supported)</th></tr> <tr><th colspan="2" id="rb">Input</th><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th><th colspan="2" id="rb">Target 4</th><th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th></tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>Mutually exclusive ZSL in-app processing and DNG capture.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>Mutually exclusive ZSL in-app processing and preview with DNG capture.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>Mutually exclusive ZSL two-input in-app processing and DNG capture.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>Mutually exclusive ZSL still capture and preview with DNG capture.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>Mutually exclusive ZSL in-app processing with still capture and DNG capture.</td> </tr> </table><br> </p> <p>LEVEL-3 ({@link android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL} {@code == }{@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_3 LEVEL_3}) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those for {@link android.hardware.camera2.CameraMetadata#INFO_SUPPORTED_HARDWARE_LEVEL_FULL FULL} devices. Note that while the second configuration allows for configuring {@code MAXIMUM} {@code YUV} and {@code JPEG} outputs at the same time, that configuration is not listed for regular capture sessions, and therefore simultaneous output to both targets is not allowed. <table> <tr><th colspan="13">LEVEL-3 additional guaranteed configurations for creating a reprocessable capture session<br>({@code PRIV} input is guaranteed only if PRIVATE reprocessing is supported. {@code YUV} input is always guaranteed.</th></tr> <tr><th colspan="2" id="rb">Input</th><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th colspan="2" id="rb">Target 3</th><th colspan="2" id="rb">Target 4</th><th colspan="2" id="rb">Target 5</th><th rowspan="2">Sample use case(s)</th> </tr> <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th></tr> <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code 640x480}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td></td><td id="rb"></td> <td>In-app viewfinder analysis with ZSL and RAW.</td> </tr> <tr> <td>{@code PRIV}/{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>Same as input</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV}</td><td id="rb">{@code PREVIEW}</td> <td>{@code PRIV}</td><td id="rb">{@code 640x480}</td> <td>{@code RAW}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code JPEG}</td><td id="rb">{@code MAXIMUM}</td><td>In-app viewfinder analysis with ZSL, RAW, and JPEG reprocessing output.</td> </tr> </table><br> </p> <p>Clients can access the above mandatory stream combination tables via {@link android.hardware.camera2.params.MandatoryStreamCombination}.</p> @param {Object {InputConfiguration}} inputConfig The configuration for the input {@link Surface} @param {Object {java.util.List}} outputs The new set of Surfaces that should be made available as targets for captured image data. @param {Object {CameraCaptureSession.StateCallback}} callback The callback to notify about the status of the new capture session. @param {Object {Handler}} handler The handler on which the callback should be invoked, or {@code null} to use the current thread's {@link android.os.Looper looper}. @throws IllegalArgumentException if the input configuration is null or not supported, the set of output Surfaces do not meet the requirements, the callback is null, or the handler is null but the current thread has no looper. @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 #createCaptureSession @see CameraCaptureSession @see StreamConfigurationMap#getInputFormats @see StreamConfigurationMap#getInputSizes @see StreamConfigurationMap#getValidOutputFormatsForInput @see StreamConfigurationMap#getOutputSizes @see android.media.ImageWriter @see android.media.ImageReader */ createReprocessableCaptureSession : function( ) {}, /**Create a new reprocessable camera capture session by providing the desired reprocessing input configuration and output {@link OutputConfiguration} to the camera device. @see #createReprocessableCaptureSession @see OutputConfiguration */ createReprocessableCaptureSessionByConfigurations : function( ) {}, /**<p>Create a new constrained high speed capture session.</p> <p>The application can use normal capture session (created via {@link #createCaptureSession}) for high speed capture if the desired high speed FPS ranges are advertised by {@link android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES}, in which case all API semantics associated with normal capture sessions applies.</p> <p>The method creates a specialized capture session that is only targeted at high speed video recording (>=120fps) use case if the camera device supports high speed video capability (i.e., {@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} contains {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO}). Therefore, it has special characteristics compared with a normal capture session:</p> <ul> <li>In addition to the output target Surface requirements specified by the {@link #createCaptureSession} method, an active high speed capture session will support up to 2 output Surfaces, though the application might choose to configure just one Surface (e.g., preview only). All Surfaces must be either video encoder surfaces (acquired by {@link android.media.MediaRecorder#getSurface} or {@link android.media.MediaCodec#createInputSurface}) or preview surfaces (obtained from {@link android.view.SurfaceView}, {@link android.graphics.SurfaceTexture} via {@link android.view.Surface#Surface(android.graphics.SurfaceTexture)}). The Surface sizes must be one of the sizes reported by {@link StreamConfigurationMap#getHighSpeedVideoSizes}. When multiple Surfaces are configured, their size must be same.</li> <li>An active high speed capture session only accepts request lists created via {@link android.hardware.camera2.CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList}, and the request list can only be submitted to this session via {@link android.hardware.camera2.CameraCaptureSession#captureBurst captureBurst}, or {@link android.hardware.camera2.CameraCaptureSession#setRepeatingBurst setRepeatingBurst}.</li> <li>The FPS ranges being requested to this session must be selected from {@link StreamConfigurationMap#getHighSpeedVideoFpsRangesFor}. The application can still use {@link android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE} to control the desired FPS range. Switching to an FPS range that has different {@link android.util.Range#getUpper() maximum FPS} may trigger some camera device reconfigurations, which may introduce extra latency. It is recommended that the application avoids unnecessary maximum target FPS changes as much as possible during high speed streaming.</li> <li>For the request lists submitted to this session, the camera device will override the {@link android.hardware.camera2.CaptureRequest#CONTROL_MODE control mode}, auto-exposure (AE), auto-white balance (AWB) and auto-focus (AF) to {@link android.hardware.camera2.CameraMetadata#CONTROL_MODE_AUTO}, {@link android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON}, {@link android.hardware.camera2.CameraMetadata#CONTROL_AWB_MODE_AUTO} and {@link android.hardware.camera2.CameraMetadata#CONTROL_AF_MODE_CONTINUOUS_VIDEO}, respectively. All post-processing block mode controls will be overridden to be FAST. Therefore, no manual control of capture and post-processing parameters is possible. Beside these, only a subset of controls will work, see {@link android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO} for more details.</li> </ul> @param {Object {java.util.List}} outputs The new set of Surfaces that should be made available as targets for captured high speed image data. @param {Object {CameraCaptureSession.StateCallback}} callback The callback to notify about the status of the new capture session. @param {Object {Handler}} handler The handler on which the callback should be invoked, or {@code null} to use the current thread's {@link android.os.Looper looper}. @throws IllegalArgumentException if the set of output Surfaces do not meet the requirements, the callback is null, or the handler is null but the current thread has no looper, or the camera device doesn't support high speed video capability. @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 #createCaptureSession @see CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE @see StreamConfigurationMap#getHighSpeedVideoSizes @see StreamConfigurationMap#getHighSpeedVideoFpsRangesFor @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES @see CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO @see CameraCaptureSession#captureBurst @see CameraCaptureSession#setRepeatingBurst @see CameraConstrainedHighSpeedCaptureSession#createHighSpeedRequestList */ createConstrainedHighSpeedCaptureSession : function( ) {}, /**Create a new camera capture session with a custom operating mode. @param {Object {InputConfiguration}} inputConfig The configuration for the input {@link Surface} if a reprocessing session is desired, or {@code null} otherwise. @param {Object {java.util.List}} outputs The new set of {@link OutputConfiguration OutputConfigurations} that should be made available as targets for captured image data. @param {Number} operatingMode The custom operating mode to use; a nonnegative value, either a custom vendor value or one of the SESSION_OPERATION_MODE_* values. @param {Object {CameraCaptureSession.StateCallback}} callback The callback to notify about the status of the new capture session. @param {Object {Handler}} handler The handler on which the callback should be invoked, or {@code null} to use the current thread's {@link android.os.Looper looper}. @throws IllegalArgumentException if the input configuration is null or not supported, the set of output Surfaces do not meet the requirements, the callback is null, or the handler is null but the current thread has no looper. @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 #createCaptureSession @see #createReprocessableCaptureSession @see CameraCaptureSession @see OutputConfiguration @hide */ createCustomCaptureSession : function( ) {}, /**<p>Create a new {@link android.hardware.camera2.CameraCaptureSession} using a {@link SessionConfiguration} helper object that aggregates all supported parameters.</p> @param {Object {SessionConfiguration}} config A session configuration (see {@link SessionConfiguration}). @throws IllegalArgumentException In case the session configuration is invalid; or the output configurations are empty; or the session configuration executor is invalid. @throws CameraAccessException In case the camera device is no longer connected or has encountered a fatal error. @see #createCaptureSession(List, CameraCaptureSession.StateCallback, Handler) @see #createCaptureSessionByOutputConfigurations @see #createReprocessableCaptureSession @see #createConstrainedHighSpeedCaptureSession */ createCaptureSession : function( ) {}, /**<p>Create a {@link android.hardware.camera2.CaptureRequest.Builder} for new capture requests, initialized with template for a target use case. The settings are chosen to be the best options for the specific camera device, so it is not recommended to reuse the same request for a different camera device; create a builder specific for that device and template and override the settings as desired, instead.</p> @param {Number} templateType An enumeration selecting the use case for this request. Not all template types are supported on every device. See the documentation for each template type for details. @return {Object {android.hardware.camera2.CaptureRequest.Builder}} a builder for a capture request, initialized with default settings for that template, and no output streams @throws IllegalArgumentException if the templateType is not supported by this device. @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 */ createCaptureRequest : function( ) {}, /**<p>Create a {@link android.hardware.camera2.CaptureRequest.Builder} for new capture requests, initialized with template for a target use case. This methods allows clients to pass physical camera ids which can be used to customize the request for a specific physical camera. The settings are chosen to be the best options for the specific logical camera device. If additional physical camera ids are passed, then they will also use the same settings template. Clients can further modify individual camera settings by calling {@link android.hardware.camera2.CaptureRequest.Builder#setPhysicalCameraKey}.</p> <p>Individual physical camera settings will only be honored for camera session that was initialiazed with corresponding physical camera id output configuration {@link OutputConfiguration#setPhysicalCameraId} and the same output targets are also attached in the request by {@link android.hardware.camera2.CaptureRequest.Builder#addTarget}.</p> <p>The output is undefined for any logical camera streams in case valid physical camera settings are attached.</p> @param {Number} templateType An enumeration selecting the use case for this request. Not all template types are supported on every device. See the documentation for each template type for details. @param {Object {java.util.Set}} physicalCameraIdSet A set of physical camera ids that can be used to customize the request for a specific physical camera. @return {Object {android.hardware.camera2.CaptureRequest.Builder}} a builder for a capture request, initialized with default settings for that template, and no output streams @throws IllegalArgumentException if the templateType is not supported by this device, or one of the physical id arguments matches with logical camera id. @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 #TEMPLATE_PREVIEW @see #TEMPLATE_RECORD @see #TEMPLATE_STILL_CAPTURE @see #TEMPLATE_VIDEO_SNAPSHOT @see #TEMPLATE_MANUAL @see CaptureRequest.Builder#setPhysicalCameraKey @see CaptureRequest.Builder#getPhysicalCameraKey */ createCaptureRequest : function( ) {}, /**<p>Create a {@link android.hardware.camera2.CaptureRequest.Builder} for a new reprocess {@link android.hardware.camera2.CaptureRequest} from a {@link android.hardware.camera2.TotalCaptureResult}. <p>Each reprocess {@link android.hardware.camera2.CaptureRequest} processes one buffer from {@link android.hardware.camera2.CameraCaptureSession}'s input {@link Surface} to all output {@link Surface Surfaces} included in the reprocess capture request. The reprocess input images must be generated from one or multiple output images captured from the same camera device. The application can provide input images to camera device via {@link android.media.ImageWriter#queueInputImage}. The application must use the capture result of one of those output images to create a reprocess capture request so that the camera device can use the information to achieve optimal reprocess image quality. For camera devices that support only 1 output {@link Surface}, submitting a reprocess {@link android.hardware.camera2.CaptureRequest} with multiple output targets will result in a {@link android.hardware.camera2.CaptureFailure}. @param {Object {TotalCaptureResult}} inputResult The capture result of the output image or one of the output images used to generate the reprocess input image for this capture request. @throws IllegalArgumentException if inputResult is null. @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 CaptureRequest.Builder @see TotalCaptureResult @see CameraDevice#createReprocessableCaptureSession @see android.media.ImageWriter */ createReprocessCaptureRequest : function( ) {}, /**Close the connection to this camera device as quickly as possible. <p>Immediately after this call, all calls to the camera device or active session interface will throw a {@link IllegalStateException}, except for calls to close(). Once the device has fully shut down, the {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onClosed} callback will be called, and the camera is free to be re-opened.</p> <p>Immediately after this call, besides the final {@link android.hardware.camera2.CameraCaptureSession.StateCallback#onClosed} calls, no further callbacks from the device or the active session will occur, and any remaining submitted capture requests will be discarded, as if {@link android.hardware.camera2.CameraCaptureSession#abortCaptures} had been called, except that no success or failure callbacks will be invoked.</p> */ close : function( ) {}, /**Checks whether a particular {@link SessionConfiguration} is supported by the camera device. <p>This method performs a runtime check of a given {@link SessionConfiguration}. The result confirms whether or not the passed session configuration can be successfully used to create a camera capture session using {@link android.hardware.camera2.CameraDevice#createCaptureSession(SessionConfiguration)}. </p> <p>The method can be called at any point before, during and after active capture session. It must not impact normal camera behavior in any way and must complete significantly faster than creating a regular or constrained capture session.</p> <p>Although this method is faster than creating a new capture session, it is not intended to be used for exploring the entire space of supported stream combinations. The available mandatory stream combinations {@link android.hardware.camera2.params.MandatoryStreamCombination} are better suited for this purpose.</p> <p>Note that session parameters will be ignored and calls to {@link SessionConfiguration#setSessionParameters} are not required.</p> @return {Boolean} {@code true} if the given session configuration is supported by the camera device {@code false} otherwise. @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 */ isSessionConfigurationSupported : function( ) {}, };