Added in API level 21

CameraDevice


abstract class CameraDevice : AutoCloseable
kotlin.Any
   ↳ android.hardware.camera2.CameraDevice

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.

Your application must declare the Camera permission in its manifest in order to access camera devices.

A given camera device may provide support at one of several levels defined in CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL. If a device supports LEGACY level, the camera device is running in backward compatibility mode and has minimum camera2 API support. If a device supports the LIMITED level, then Camera2 exposes a feature set that is roughly equivalent to the older Camera API, although with a cleaner and more efficient interface. If a device supports the EXTERNAL level, then the device is a removable camera that provides similar but slightly less features as the LIMITED level. Devices that implement the FULL or 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.

Summary

Nested classes
abstract

CameraDeviceSetup is a limited representation of CameraDevice that can be used to query device specific information which would otherwise need a CameraDevice instance.

abstract

A callback objects for receiving updates about the state of a camera device.

Constants
static Int

No vibration or sound muting for this camera device.

static Int

Mute vibration from ringtones, alarms or notifications while this camera device is in use.

static Int

Mute vibration and sound from ringtones, alarms or notifications while this camera device is in use.

static Int

A basic template for direct application control of capture parameters.

static Int

Create a request suitable for a camera preview window.

static Int

Create a request suitable for video recording.

static Int

Create a request suitable for still image capture.

static Int

Create a request suitable for still image capture while recording video.

static Int

Create a request suitable for zero shutter lag still capture.

Public methods
abstract Unit

Close the connection to this camera device as quickly as possible.

abstract CaptureRequest.Builder
createCaptureRequest(templateType: Int)

Create a CaptureRequest.Builder for new capture requests, initialized with template for a target use case.

open CaptureRequest.Builder
createCaptureRequest(templateType: Int, physicalCameraIdSet: MutableSet<String!>!)

Create a CaptureRequest.Builder for new capture requests, initialized with template for a target use case.

abstract Unit

Create a new camera capture session by providing the target output set of Surfaces to the camera device.

open Unit

Create a new CameraCaptureSession using a SessionConfiguration helper object that aggregates all supported parameters.

abstract Unit

Create a new camera capture session by providing the target output set of Surfaces and its corresponding surface configuration to the camera device.

abstract Unit

Create a new constrained high speed capture session.

open Unit

Initialize a specific device-specific extension augmented camera capture session.

abstract CaptureRequest.Builder

Create a CaptureRequest.Builder for a new reprocess CaptureRequest from a TotalCaptureResult.

abstract Unit

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.

abstract Unit

Create a new reprocessable camera capture session by providing the desired reprocessing input configuration and output OutputConfiguration to the camera device.

open Int

Get currently applied global camera audio restriction mode.

abstract String

Get the ID of this camera device.

open Boolean

Checks whether a particular SessionConfiguration is supported by the camera device.

open Unit

Set audio restriction mode when this CameraDevice is being used.

Constants

AUDIO_RESTRICTION_NONE

Added in API level 30
static val AUDIO_RESTRICTION_NONE: Int

No vibration or sound muting for this camera device. This is the default mode for all camera devices.

Value: 0

AUDIO_RESTRICTION_VIBRATION

Added in API level 30
static val AUDIO_RESTRICTION_VIBRATION: Int

Mute vibration from ringtones, alarms or notifications while this camera device is in use.

Value: 1

AUDIO_RESTRICTION_VIBRATION_SOUND

Added in API level 30
static val AUDIO_RESTRICTION_VIBRATION_SOUND: Int

Mute vibration and sound from ringtones, alarms or notifications while this camera device is in use.

Value: 3

TEMPLATE_MANUAL

Added in API level 21
static val TEMPLATE_MANUAL: Int

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 overridden by the application depending on the intended use case. This template is guaranteed to be supported on camera devices that support the MANUAL_SENSOR capability.

Value: 6

See Also

    TEMPLATE_PREVIEW

    Added in API level 21
    static val TEMPLATE_PREVIEW: Int

    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 CameraCaptureSession#setRepeatingRequest method. This template is guaranteed to be supported on all camera devices.

    Value: 1

    See Also

      TEMPLATE_RECORD

      Added in API level 21
      static val TEMPLATE_RECORD: Int

      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 CameraCaptureSession#setRepeatingRequest method. This template is guaranteed to be supported on all camera devices except DEPTH_OUTPUT devices that are not BACKWARD_COMPATIBLE.

      Value: 3

      See Also

        TEMPLATE_STILL_CAPTURE

        Added in API level 21
        static val TEMPLATE_STILL_CAPTURE: Int

        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 CameraCaptureSession#capture method. This template is guaranteed to be supported on all camera devices except DEPTH_OUTPUT devices that are not BACKWARD_COMPATIBLE.

        Value: 2

        See Also

          TEMPLATE_VIDEO_SNAPSHOT

          Added in API level 21
          static val TEMPLATE_VIDEO_SNAPSHOT: Int

          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 CameraCaptureSession#capture method while a request based on TEMPLATE_RECORD is is in use with CameraCaptureSession#setRepeatingRequest. This template is guaranteed to be supported on all camera devices except legacy devices (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == LEGACY) and DEPTH_OUTPUT devices that are not BACKWARD_COMPATIBLE.

          Value: 4

          See Also

            TEMPLATE_ZERO_SHUTTER_LAG

            Added in API level 21
            static val TEMPLATE_ZERO_SHUTTER_LAG: Int

            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 CaptureRequest#CONTROL_ENABLE_ZSL if available. This template is guaranteed to be supported on camera devices that support the PRIVATE_REPROCESSING capability or the YUV_REPROCESSING capability.

            Value: 5

            Public methods

            close

            Added in API level 21
            abstract fun close(): Unit

            Close the connection to this camera device as quickly as possible.

            Immediately after this call, all calls to the camera device or active session interface will throw a IllegalStateException, except for calls to close(). Once the device has fully shut down, the StateCallback#onClosed callback will be called, and the camera is free to be re-opened.

            Immediately after this call, besides the final 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 CameraCaptureSession#abortCaptures had been called, except that no success or failure callbacks will be invoked.

            Exceptions
            java.lang.Exception if this resource cannot be closed

            createCaptureRequest

            Added in API level 21
            abstract fun createCaptureRequest(templateType: Int): CaptureRequest.Builder

            Create a 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.

            Parameters
            templateType Int: 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. Value is android.hardware.camera2.CameraDevice#TEMPLATE_PREVIEW, android.hardware.camera2.CameraDevice#TEMPLATE_STILL_CAPTURE, android.hardware.camera2.CameraDevice#TEMPLATE_RECORD, android.hardware.camera2.CameraDevice#TEMPLATE_VIDEO_SNAPSHOT, android.hardware.camera2.CameraDevice#TEMPLATE_ZERO_SHUTTER_LAG, or android.hardware.camera2.CameraDevice#TEMPLATE_MANUAL
            Return
            CaptureRequest.Builder a builder for a capture request, initialized with default settings for that template, and no output streams This value cannot be null.
            Exceptions
            java.lang.IllegalArgumentException if the templateType is not supported by this device.
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            createCaptureRequest

            Added in API level 28
            open fun createCaptureRequest(
                templateType: Int,
                physicalCameraIdSet: MutableSet<String!>!
            ): CaptureRequest.Builder

            Create a 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 CaptureRequest.Builder#setPhysicalCameraKey.

            Individual physical camera settings will only be honored for camera session that was initialized with corresponding physical camera id output configuration OutputConfiguration#setPhysicalCameraId and the same output targets are also attached in the request by CaptureRequest.Builder#addTarget.

            The output is undefined for any logical camera streams in case valid physical camera settings are attached.

            Parameters
            templateType Int: 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. Value is android.hardware.camera2.CameraDevice#TEMPLATE_PREVIEW, android.hardware.camera2.CameraDevice#TEMPLATE_STILL_CAPTURE, android.hardware.camera2.CameraDevice#TEMPLATE_RECORD, android.hardware.camera2.CameraDevice#TEMPLATE_VIDEO_SNAPSHOT, android.hardware.camera2.CameraDevice#TEMPLATE_ZERO_SHUTTER_LAG, or android.hardware.camera2.CameraDevice#TEMPLATE_MANUAL
            physicalCameraIdSet MutableSet<String!>!: A set of physical camera ids that can be used to customize the request for a specific physical camera.
            Return
            CaptureRequest.Builder a builder for a capture request, initialized with default settings for that template, and no output streams This value cannot be null.
            Exceptions
            java.lang.IllegalArgumentException if the templateType is not supported by this device, or one of the physical id arguments matches with logical camera id.
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            createCaptureSession

            Added in API level 21
            Deprecated in API level 30
            abstract fun createCaptureSession(
                outputs: MutableList<Surface!>,
                callback: CameraCaptureSession.StateCallback,
                handler: Handler?
            ): Unit

            Deprecated: Please use createCaptureSession(android.hardware.camera2.params.SessionConfiguration) for the full set of configuration options available.

            Create a new camera capture session by providing the target output set of Surfaces to the camera device.

            Parameters
            outputs MutableList<Surface!>: The new set of Surfaces that should be made available as targets for captured image data. This value cannot be null.
            callback CameraCaptureSession.StateCallback: The callback to notify about the status of the new capture session. This value cannot be null.
            handler Handler?: The handler on which the callback should be invoked, or null to use the current thread's looper.
            Exceptions
            java.lang.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.
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            createCaptureSession

            Added in API level 28
            open fun createCaptureSession(config: SessionConfiguration!): Unit

            Create a new CameraCaptureSession using a SessionConfiguration helper object that aggregates all supported parameters.

            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 capture, captureBurst, setRepeatingRequest, or setRepeatingBurst.

            Surfaces suitable for inclusion as a camera output can be created for various use cases and targets:

            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.

            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 CameraCaptureSession.StateCallback's CameraCaptureSession.StateCallback#onConfigured callback will be called.

            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. CameraCaptureSession.StateCallback#onConfigured for the new session may be invoked before CameraCaptureSession.StateCallback#onClosed is invoked for the prior session. Once the new session is configured, it is able to start capturing its own requests. To minimize the transition time, the 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.

            Using larger resolution outputs, or more outputs, can result in slower output rate from the device.

            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.

            This function throws an IllegalArgumentException if called with a SessionConfiguration lacking state callbacks or valid output surfaces. The only exceptions are deferred SurfaceView or SurfaceTexture outputs. See android.hardware.camera2.params.OutputConfiguration#OutputConfiguration(android.util.Size,java.lang.Class) for details.

            Regular capture

            While any of the sizes from android.hardware.camera2.params.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. These are valid for when the input configuration is not set and therefore no reprocessing is active.

            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 android.hardware.camera2.params.StreamConfigurationMap#getOutputMinFrameDuration. Or third, if the output set cannot be used at all, session creation will fail entirely, with CameraCaptureSession.StateCallback#onConfigureFailed being invoked.

            For the type column, PRIV refers to any target whose available sizes are found using StreamConfigurationMap#getOutputSizes(Class) with no direct application-visible format, YUV refers to a target Surface using the android.graphics.ImageFormat#YUV_420_888 format, JPEG refers to the android.graphics.ImageFormat#JPEG format, and RAW refers to the android.graphics.ImageFormat#RAW_SENSOR format.

            For the maximum size column, PREVIEW refers to the best size match to the device's screen resolution, or to 1080p (1920x1080), whichever is smaller. RECORD refers to the camera device's maximum supported recording resolution, as determined by android.media.CamcorderProfile. And MAXIMUM refers to the camera device's maximum output resolution for that format or target from android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes.

            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 android.hardware.camera2.params.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 PRIV output, then a session can be created with targets [8 MP YUV, 2 MP PRIV] or targets [2 MP YUV, 2 MP PRIV]; but a session with targets [8 MP YUV, 4 MP PRIV], targets [4 MP YUV, 4 MP PRIV], or targets [8 MP PRIV, 2 MP YUV] would not be guaranteed to work, unless some other row of the table lists such a combination.

            LEGACY-level guaranteed configurations

            Legacy devices (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == LEGACY) support at least the following stream combinations:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            PRIV MAXIMUM Simple preview, GPU video processing, or no-preview video recording.
            JPEG MAXIMUM No-viewfinder still image capture.
            YUV MAXIMUM In-application video/image processing.
            PRIV PREVIEW JPEG MAXIMUM Standard still imaging.
            YUV PREVIEW JPEG MAXIMUM In-app processing plus still capture.
            PRIV PREVIEW PRIV PREVIEW Standard recording.
            PRIV PREVIEW YUV PREVIEW Preview plus in-app processing.
            PRIV PREVIEW YUV PREVIEW JPEG MAXIMUM Still capture plus in-app processing.

            LIMITED-level additional guaranteed configurations

            Limited-level (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == LIMITED) devices support at least the following stream combinations in addition to those for LEGACY devices:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            PRIV PREVIEW PRIV RECORD High-resolution video recording with preview.
            PRIV PREVIEW YUV RECORD High-resolution in-app video processing with preview.
            YUV PREVIEW YUV RECORD Two-input in-app video processing.
            PRIV PREVIEW PRIV RECORD JPEG RECORD High-resolution recording with video snapshot.
            PRIV PREVIEW YUV RECORD JPEG RECORD High-resolution in-app processing with video snapshot.
            YUV PREVIEW YUV PREVIEW JPEG MAXIMUM Two-input in-app processing with still capture.

            FULL-level additional guaranteed configurations

            FULL-level (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == FULL) devices support at least the following stream combinations in addition to those for LIMITED devices:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            PRIV PREVIEW PRIV MAXIMUM Maximum-resolution GPU processing with preview.
            PRIV PREVIEW YUV MAXIMUM Maximum-resolution in-app processing with preview.
            YUV PREVIEW YUV MAXIMUM Maximum-resolution two-input in-app processing.
            PRIV PREVIEW PRIV PREVIEW JPEG MAXIMUM Video recording with maximum-size video snapshot
            YUV 640x480 PRIV PREVIEW YUV MAXIMUM Standard video recording plus maximum-resolution in-app processing.
            YUV 640x480 YUV PREVIEW YUV MAXIMUM Preview plus two-input maximum-resolution in-app processing.

            RAW-capability additional guaranteed configurations

            RAW-capability (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes RAW) devices additionally support at least the following stream combinations on both FULL and LIMITED devices:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            RAW MAXIMUM No-preview DNG capture.
            PRIV PREVIEW RAW MAXIMUM Standard DNG capture.
            YUV PREVIEW RAW MAXIMUM In-app processing plus DNG capture.
            PRIV PREVIEW PRIV PREVIEW RAW MAXIMUM Video recording with DNG capture.
            PRIV PREVIEW YUV PREVIEW RAW MAXIMUM Preview with in-app processing and DNG capture.
            YUV PREVIEW YUV PREVIEW RAW MAXIMUM Two-input in-app processing plus DNG capture.
            PRIV PREVIEW JPEG MAXIMUM RAW MAXIMUM Still capture with simultaneous JPEG and DNG.
            YUV PREVIEW JPEG MAXIMUM RAW MAXIMUM In-app processing with simultaneous JPEG and DNG.

            BURST-capability additional guaranteed configurations

            BURST-capability (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes BURST_CAPTURE) devices support at least the below stream combinations in addition to those for 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.

            Target 1 Target 2 Sample use case(s)
            Type Max size Type Max size
            PRIV PREVIEW PRIV MAXIMUM Maximum-resolution GPU processing with preview.
            PRIV PREVIEW YUV MAXIMUM Maximum-resolution in-app processing with preview.
            YUV PREVIEW YUV MAXIMUM Maximum-resolution two-input in-app processing.

            LEVEL-3 additional guaranteed configurations

            LEVEL-3 (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == LEVEL_3) support at least the following stream combinations in addition to the combinations for FULL and for RAW capability (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes RAW):

            Target 1 Target 2 Target 3 Target 4 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size
            PRIV PREVIEW PRIV 640x480 YUV MAXIMUM RAW MAXIMUM In-app viewfinder analysis with dynamic selection of output format.
            PRIV PREVIEW PRIV 640x480 JPEG MAXIMUM RAW MAXIMUM In-app viewfinder analysis with dynamic selection of output format.

            Concurrent stream guaranteed configurations

            BACKWARD_COMPATIBLE devices capable of streaming concurrently with other devices as described by android.hardware.camera2.CameraManager#getConcurrentCameraIds have the following guaranteed streams (when streaming concurrently with other devices)

            Note: The sizes mentioned for these concurrent streams are the maximum sizes guaranteed to be supported. Sizes smaller than these, obtained by android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes for a particular format, are supported as well.

            Target 1 Target 2 Sample use case(s)
            Type Max size Type Max size
            YUV s1440p In-app video / image processing.
            PRIV s1440p In-app viewfinder analysis.
            JPEG s1440p No viewfinder still image capture.
            YUV / PRIV s720p JPEG s1440p Standard still imaging.
            YUV / PRIV s720p YUV / PRIV s1440p In-app video / processing with preview.

            Devices which are not backwards-compatible, support a mandatory single stream of size sVGA with image format DEPTH16 during concurrent operation.

            For guaranteed concurrent stream configurations:

            sVGA refers to the camera device's maximum resolution for that format from android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes or VGA resolution (640X480) whichever is lower.

            s720p refers to the camera device's maximum resolution for that format from android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes or 720p(1280X720) whichever is lower.

            s1440p refers to the camera device's maximum resolution for that format from android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes or 1440p(1920X1440) whichever is lower.

            MONOCHROME-capability (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes MONOCHROME) devices supporting Y8 support substituting YUV streams with Y8 in all guaranteed stream combinations for the device's hardware level and capabilities.

            Clients can access the above mandatory stream combination tables via android.hardware.camera2.params.MandatoryStreamCombination.

            Devices capable of outputting HEIC formats (StreamConfigurationMap#getOutputFormats contains android.graphics.ImageFormat#HEIC) will support substituting JPEG streams with 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.

            LEGACY-level additional guaranteed combinations with multi-resolution outputs

            Devices capable of multi-resolution output for a particular format ( android.hardware.camera2.params.MultiResolutionStreamConfigurationMap#getOutputInfo returns a non-empty list) support using MultiResolutionImageReader for MAXIMUM resolution streams of that format for all mandatory stream combinations. For example, if a LIMITED camera device supports multi-resolution output streams for both JPEG and PRIVATE, in addition to the stream configurations in the LIMITED and Legacy table above, the camera device supports the following guaranteed stream combinations (MULTI_RES in the Max size column refers to a MultiResolutionImageReader created based on the variable max resolutions supported):

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            PRIV MULTI_RES Simple preview, GPU video processing, or no-preview video recording.
            JPEG MULTI_RES No-viewfinder still image capture.
            PRIV PREVIEW JPEG MULTI_RES Standard still imaging.
            PRIV PREVIEW YUV PREVIEW JPEG MULTI_RES Still capture plus in-app processing.

            LIMITED-level additional guaranteed configurations with multi-resolution outputs

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            YUV PREVIEW YUV PREVIEW JPEG MULTI_RES Two-input in-app processing with still capture.

            The same logic applies to other hardware levels and capabilities.

            Additional guaranteed combinations for ULTRA_HIGH_RESOLUTION sensors

            Devices with the ULTRA_HIGH_RESOLUTION_SENSOR capability have some additional guarantees which clients can take advantage of:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type SC Map Max size Type SC Map Max size Type SC Map Max size
            YUV / JPEG / RAW MAX_RES MAX PRIV / YUV DEFAULT PREVIEW Ultra high res still image capture with preview
            YUV / JPEG / RAW MAX_RES MAX PRIV DEFAULT PREVIEW PRIV / YUV DEFAULT RECORD Ultra high res still capture with preview + app based RECORD size analysis
            YUV / JPEG / RAW MAX_RES MAX PRIV DEFAULT PREVIEW JPEG / YUV / RAW DEFAULT MAX Ultra high res still image capture with preview + default sensor pixel mode analysis stream

            Here, SC Map, refers to the StreamConfigurationMap, the target stream sizes must be chosen from. DEFAULT refers to the default sensor pixel mode StreamConfigurationMap and MAX_RES refers to the maximum resolution StreamConfigurationMap. For MAX_RES streams, MAX in the Max size column refers to the maximum size from android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes and StreamConfigurationMap#getHighResolutionOutputSizes. Note: The same capture request must not mix targets from StreamConfigurationMaps corresponding to different sensor pixel modes.

            10-bit output additional guaranteed configurations

            10-bit output capable CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT devices support at least the following stream combinations:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Type Max size Type Max size
            PRIV MAXIMUM Simple preview, GPU video processing, or no-preview video recording.
            YUV MAXIMUM In-application video/image processing.
            PRIV PREVIEW JPEG MAXIMUM Standard still imaging.
            PRIV PREVIEW YUV MAXIMUM Maximum-resolution in-app processing with preview.
            YUV PREVIEW YUV MAXIMUM Maximum-resolution two-input in-app processing.
            PRIV PREVIEW PRIV RECORD High-resolution video recording with preview.
            PRIV PREVIEW PRIV RECORD YUV RECORD High-resolution recording with in-app snapshot.
            PRIV PREVIEW PRIV RECORD JPEG RECORD High-resolution recording with video snapshot.

            Here PRIV can be either 8 or 10-bit android.graphics.ImageFormat#PRIVATE pixel format. YUV can be either android.graphics.ImageFormat#YUV_420_888 or android.graphics.ImageFormat#YCBCR_P010. For the maximum size column, PREVIEW refers to the best size match to the device's screen resolution, or to 1080p (1920x1080), whichever is smaller. RECORD refers to the camera device's maximum supported recording resolution, as determined by android.media.CamcorderProfile. MAXIMUM refers to the camera device's maximum output resolution for that format or target from StreamConfigurationMap#getOutputSizes(int). Do note that invalid combinations such as having a camera surface configured to use pixel format android.graphics.ImageFormat#YUV_420_888 with a 10-bit profile will cause a capture session initialization failure.

            android.graphics.ImageFormat#JPEG_R may also be supported if advertised by android.hardware.camera2.params.StreamConfigurationMap. When initializing a capture session that includes a Jpeg/R camera output clients must consider the following items w.r.t. the 10-bit mandatory stream combination table:

            Jpeg/R camera outputs will typically be able to support the MAXIMUM device resolution. Clients can also call StreamConfigurationMap#getOutputSizes(int) for a complete list supported sizes. Camera clients that register a Jpeg/R output within a stream combination that doesn't fit in the mandatory stream table above can call isSessionConfigurationSupported to ensure that this particular configuration is supported.

            STREAM_USE_CASE capability additional guaranteed configurations

            Devices with the STREAM_USE_CASE capability (android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE) support below additional stream combinations:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Usecase Type Max size Usecase Type Max size Usecase
            YUV / PRIV PREVIEW PREVIEW Simple preview or in-app image processing
            YUV / PRIV RECORD VIDEO_RECORD Simple video recording or in-app video processing
            YUV / JPEG MAXIMUM STILL_CAPTURE Simple JPEG or YUV still image capture
            YUV / PRIV s1440p PREVIEW_VIDEO_STILL Multi-purpose stream for preview, video and still image capture
            YUV / PRIV s1440p VIDEO_CALL Simple video call
            PRIV PREVIEW PREVIEW YUV / JPEG MAXIMUM STILL_CAPTURE Preview with JPEG or YUV still image capture
            PRIV PREVIEW PREVIEW YUV / PRIV RECORD VIDEO_RECORD Preview with video recording or in-app video processing
            PRIV PREVIEW PREVIEW YUV PREVIEW PREVIEW Preview with in-application image processing
            PRIV PREVIEW PREVIEW YUV / PRIV s1440p VIDEO_CALL Preview with video call
            YUV / PRIV s1440p PREVIEW_VIDEO_STILL YUV / JPEG MAXIMUM STILL_CAPTURE MultI-purpose stream with JPEG or YUV still capture
            YUV PREVIEW STILL_CAPTURE JPEG MAXIMUM STILL_CAPTURE YUV and JPEG concurrent still image capture (for testing)
            PRIV PREVIEW PREVIEW YUV / PRIV RECORD VIDEO_RECORD JPEG RECORD STILL_CAPTURE Preview, video record and JPEG video snapshot
            PRIV PREVIEW PREVIEW YUV PREVIEW PREVIEW JPEG MAXIMUM STILL_CAPTURE Preview, in-application image processing, and JPEG still image capture

            STREAM_USE_CASE_CROPPED_RAW capability additional guaranteed configurations

            Devices that include the CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW stream use-case in CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES, support the additional stream combinations below:

            Target 1 Target 2 Target 3 Sample use case(s)
            Type Max size Usecase Type Max size Usecase Type Max size Usecase
            RAW MAXIMUM CROPPED_RAW Cropped RAW still capture without preview
            PRIV / YUV PREVIEW PREVIEW RAW MAXIMUM CROPPED_RAW Preview with cropped RAW still capture
            PRIV / YUV PREVIEW PREVIEW YUV / JPEG MAXIMUM STILL_CAPTURE RAW MAXIMUM CROPPED_RAW Preview with YUV / JPEG and cropped RAW still capture
            PRIV / YUV PREVIEW PREVIEW PRIV / YUV PREVIEW VIDEO_RECORD / PREVIEW RAW MAXIMUM CROPPED_RAW Video recording with preview and cropped RAW still capture

            Preview stabilization guaranteed stream configurations

            For devices where CameraCharacteristics#CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES includes CameraMetadata#CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION, the following stream combinations are guaranteed, for CaptureRequests where CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE is set to CameraMetadata#CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION

            Target 1 Target 2 Sample use case(s)
            Type Max size Type Max size
            PRIV / YUV s1440p Stabilized preview, GPU video processing, or no-preview stabilized video recording.
            PRIV / YUV s1440p JPEG / YUV MAXIMUM Standard still imaging with stabilized preview.
            PRIV / YUV PREVIEW PRIV / YUV s1440p High-resolution recording with stabilized preview and recording stream.

            For the maximum size column, PREVIEW refers to the best size match to the device's screen resolution, or to 1080p (1920x1080), whichever is smaller. RECORD refers to the camera device's maximum supported recording resolution, as determined by android.media.CamcorderProfile. MAXIMUM refers to the camera device's maximum output resolution for that format or target from StreamConfigurationMap#getOutputSizes(int).

            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 isSessionConfigurationSupported or attempting to create a session with such targets.

            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.

            Reprocessing

            If a camera device supports YUV reprocessing (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING) or PRIVATE reprocessing (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING), the application can also create a reprocessable capture session to submit reprocess capture requests in addition to regular capture requests, by setting an input configuration for the session. 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).

            The active reprocessable capture session determines an input Surface and the set of potential output Surfaces for the camera devices for each capture request. The application can use #createCaptureRequest to create regular capture requests to capture new images from the camera device, and use createReprocessCaptureRequest to create reprocess capture requests to process buffers from the input 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 #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.

            Input formats and sizes supported by the camera device can be queried via StreamConfigurationMap#getInputFormats and 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 StreamConfigurationMap#getValidOutputFormatsForInput and android.hardware.camera2.params.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.

            Since the application cannot access android.graphics.ImageFormat#PRIVATE images directly, an output Surface created by android.media.ImageReader#newInstance with android.graphics.ImageFormat#PRIVATE as the format will be considered as intended to be used for reprocessing input and thus the android.media.ImageReader size must match one of the supported input sizes for android.graphics.ImageFormat#PRIVATE format. Otherwise, creating a reprocessable capture session will fail.

            Starting from API level 30, recreating a reprocessable capture session will flush all the queued but not yet processed buffers from the input surface.

            The configurations in the tables below are 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 CaptureRequest simultaneously. For devices that support only 1 output target in a reprocess CaptureRequest, submitting a reprocess CaptureRequest with multiple output targets will result in a CaptureFailure. For devices that support multiple output targets in a reprocess CaptureRequest, the guaranteed output targets that can be included in a CaptureRequest simultaneously are listed in the tables under #createCaptureSession. For example, with a FULL-capability (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == FULL) device that supports PRIVATE reprocessing, an application can create a reprocessable capture session with 1 input, (PRIV, MAXIMUM), and 3 outputs, (PRIV, MAXIMUM), (PRIV, PREVIEW), and (YUV, MAXIMUM). However, it's not guaranteed that an application can submit a regular or reprocess capture with (PRIV, MAXIMUM) and (YUV, MAXIMUM) outputs based on the table listed under #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 #createCaptureSession to determine the guaranteed output targets that can be submitted in a regular or reprocess CaptureRequest simultaneously.

            Reprocessing with 10-bit output targets on 10-bit capable CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT devices is not supported. Trying to initialize a repreocessable capture session with one ore more output configurations set OutputConfiguration#setDynamicRangeProfile to use a 10-bit dynamic range profile android.hardware.camera2.params.DynamicRangeProfiles will trigger IllegalArgumentException.

            LIMITED-level (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == LIMITED) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those listed earlier for regular captures for LIMITED devices:

            LIMITED-level additional guaranteed configurations for creating a reprocessable capture session
            (PRIV input is guaranteed only if PRIVATE reprocessing is supported. YUV input is guaranteed only if YUV reprocessing is supported)
            Input Target 1 Target 2 Target 3 Target 4 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size Type Max size
            PRIV/YUV MAXIMUM Same as input MAXIMUM JPEG MAXIMUM No-viewfinder still image reprocessing.
            PRIV/YUV MAXIMUM Same as input MAXIMUM PRIV PREVIEW JPEG MAXIMUM ZSL(Zero-Shutter-Lag) still imaging.
            PRIV/YUV MAXIMUM Same as input MAXIMUM YUV PREVIEW JPEG MAXIMUM ZSL still and in-app processing imaging.
            PRIV/YUV MAXIMUM Same as input MAXIMUM YUV PREVIEW YUV PREVIEW JPEG MAXIMUM ZSL in-app processing with still capture.

            FULL-level (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == FULL) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those for LIMITED devices:

            FULL-level additional guaranteed configurations for creating a reprocessable capture session
            (PRIV input is guaranteed only if PRIVATE reprocessing is supported. YUV input is guaranteed only if YUV reprocessing is supported)
            Input Target 1 Target 2 Target 3 Target 4 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size Type Max size
            YUV MAXIMUM YUV MAXIMUM PRIV PREVIEW Maximum-resolution multi-frame image fusion in-app processing with regular preview.
            YUV MAXIMUM YUV MAXIMUM YUV PREVIEW Maximum-resolution multi-frame image fusion two-input in-app processing.
            PRIV/YUV MAXIMUM Same as input MAXIMUM PRIV PREVIEW YUV RECORD High-resolution ZSL in-app video processing with regular preview.
            PRIV MAXIMUM PRIV MAXIMUM PRIV PREVIEW YUV MAXIMUM Maximum-resolution ZSL in-app processing with regular preview.
            PRIV MAXIMUM PRIV MAXIMUM YUV PREVIEW YUV MAXIMUM Maximum-resolution two-input ZSL in-app processing.
            PRIV/YUV MAXIMUM Same as input MAXIMUM PRIV PREVIEW YUV PREVIEW JPEG MAXIMUM ZSL still capture and in-app processing.

            RAW-capability (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes RAW) devices additionally support at least the following stream combinations for creating a reprocessable capture session on both FULL and LIMITED devices

            RAW-capability additional guaranteed configurations for creating a reprocessable capture session
            (PRIV input is guaranteed only if PRIVATE reprocessing is supported. YUV input is guaranteed only if YUV reprocessing is supported)
            Input Target 1 Target 2 Target 3 Target 4 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size Type Max size
            PRIV/YUV MAXIMUM Same as input MAXIMUM YUV PREVIEW RAW MAXIMUM Mutually exclusive ZSL in-app processing and DNG capture.
            PRIV/YUV MAXIMUM Same as input MAXIMUM PRIV PREVIEW YUV PREVIEW RAW MAXIMUM Mutually exclusive ZSL in-app processing and preview with DNG capture.
            PRIV/YUV MAXIMUM Same as input MAXIMUM YUV PREVIEW YUV PREVIEW RAW MAXIMUM Mutually exclusive ZSL two-input in-app processing and DNG capture.
            PRIV/YUV MAXIMUM Same as input MAXIMUM PRIV PREVIEW JPEG MAXIMUM RAW MAXIMUM Mutually exclusive ZSL still capture and preview with DNG capture.
            PRIV/YUV MAXIMUM Same as input MAXIMUM YUV PREVIEW JPEG MAXIMUM RAW MAXIMUM Mutually exclusive ZSL in-app processing with still capture and DNG capture.

            LEVEL-3 (CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL == LEVEL_3) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those for FULL devices. Note that while the second configuration allows for configuring MAXIMUM YUV and 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.

            LEVEL-3 additional guaranteed configurations for creating a reprocessable capture session
            (PRIV input is guaranteed only if PRIVATE reprocessing is supported. YUV input is always guaranteed.
            Input Target 1 Target 2 Target 3 Target 4 Target 5 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size Type Max size Type Max size
            YUV MAXIMUM YUV MAXIMUM PRIV PREVIEW PRIV 640x480 RAW MAXIMUM In-app viewfinder analysis with ZSL and RAW.
            PRIV/YUV MAXIMUM Same as input MAXIMUM PRIV PREVIEW PRIV 640x480 RAW MAXIMUM JPEG MAXIMUM In-app viewfinder analysis with ZSL, RAW, and JPEG reprocessing output.

            If a camera device supports multi-resolution YUV input and multi-resolution YUV output or supports multi-resolution PRIVATE input and multi-resolution PRIVATE output, the additional mandatory stream combinations for LIMITED and FULL devices are listed below (MULTI_RES in the Max size column refers to a MultiResolutionImageReader for output, and a multi-resolution InputConfiguration for input):

            LIMITED-level additional guaranteed configurations for creating a reprocessable capture session with multi-resolution input and multi-resolution outputs
            (PRIV input is guaranteed only if PRIVATE reprocessing is supported. YUV input is guaranteed only if YUV reprocessing is supported)
            Input Target 1 Target 2 Target 3 Target 4 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size Type Max size
            PRIV/YUV MULTI_RES Same as input MULTI_RES JPEG MULTI_RES No-viewfinder still image reprocessing.
            PRIV/YUV MULTI_RES Same as input MULTI_RES PRIV PREVIEW JPEG MULTI_RES ZSL(Zero-Shutter-Lag) still imaging.
            PRIV/YUV MULTI_RES Same as input MULTI_RES YUV PREVIEW JPEG MULTI_RES ZSL still and in-app processing imaging.
            PRIV/YUV MULTI_RES Same as input MULTI_RES YUV PREVIEW YUV PREVIEW JPEG MULTI_RES ZSL in-app processing with still capture.

            FULL-level additional guaranteed configurations for creating a reprocessable capture session with multi-resolution input and multi-resolution outputs
            (PRIV input is guaranteed only if PRIVATE reprocessing is supported. YUV input is guaranteed only if YUV reprocessing is supported)
            Input Target 1 Target 2 Target 3 Target 4 Sample use case(s)
            Type Max size Type Max size Type Max size Type Max size Type Max size
            PRIV MULTI_RES PRIV MULTI_RES PRIV PREVIEW YUV MULTI_RES Maximum-resolution ZSL in-app processing with regular preview.
            PRIV MULTI_RES PRIV MULTI_RES YUV PREVIEW YUV MULTI_RES Maximum-resolution two-input ZSL in-app processing.
            PRIV/YUV MULTI_RES Same as input MULTI_RES PRIV PREVIEW YUV PREVIEW JPEG MULTI_RES ZSL still capture and in-app processing.

            Devices with the ULTRA_HIGH_RESOLUTION_SENSOR capability have some additional guarantees which clients can take advantage of :

            Additional guaranteed combinations for ULTRA_HIGH_RESOLUTION sensors (YUV / PRIV inputs are guaranteed only if YUV / PRIVATE reprocessing are supported)
            Input Target 1 Target 2 Target 3 Sample use case(s)
            Type SC Map Max size Type SC Map Max size Type SC Map Max size Type SC Map Max size
            RAW MAX_RES MAX RAW MAX_RES MAX PRIV / YUV DEFAULT PREVIEW RAW remosaic reprocessing with separate preview
            RAW MAX_RES MAX RAW MAX_RES MAX PRIV / YUV DEFAULT PREVIEW JPEG / YUV MAX_RES MAX Ultra high res RAW -> JPEG / YUV with seperate preview
            YUV / PRIV MAX_RES MAX YUV / PRIV MAX_RES MAX YUV / PRIV DEFAULT PREVIEW JPEG MAX_RES MAX Ultra high res PRIV / YUV -> YUV / JPEG reprocessing with seperate preview

            No additional mandatory stream combinations for RAW capability and LEVEL-3 hardware level.

            Constrained high-speed recording

            The application can use a normal capture session for high speed capture if the desired high speed FPS ranges are advertised by CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, in which case all API semantics associated with normal capture sessions applies.

            A high-speed capture session can be use for high speed video recording (>=120fps) when the camera device supports high speed video capability (i.e., CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES contains CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO). A constrained high-speed capture session has special limitations compared with a normal capture session:

            Parameters
            config SessionConfiguration!: A session configuration (see SessionConfiguration).
            Exceptions
            java.lang.IllegalArgumentException In case the session configuration is invalid; or the output configurations are empty; or the session configuration executor is invalid; or the output dynamic range combination is invalid/unsupported.
            android.hardware.camera2.CameraAccessException In case the camera device is no longer connected or has encountered a fatal error.

            createCaptureSessionByOutputConfigurations

            Added in API level 24
            Deprecated in API level 30
            abstract fun createCaptureSessionByOutputConfigurations(
                outputConfigurations: MutableList<OutputConfiguration!>!,
                callback: CameraCaptureSession.StateCallback!,
                handler: Handler?
            ): Unit

            Deprecated: Please use createCaptureSession(android.hardware.camera2.params.SessionConfiguration) for the full set of configuration options available.

            Create a new camera capture session by providing the target output set of Surfaces and its corresponding surface configuration to the camera device.

            Parameters
            handler Handler?: This value may be null.

            createConstrainedHighSpeedCaptureSession

            Added in API level 23
            Deprecated in API level 30
            abstract fun createConstrainedHighSpeedCaptureSession(
                outputs: MutableList<Surface!>,
                callback: CameraCaptureSession.StateCallback,
                handler: Handler?
            ): Unit

            Deprecated: Please use createCaptureSession(android.hardware.camera2.params.SessionConfiguration) for the full set of configuration options available.

            Create a new constrained high speed capture session.

            Parameters
            outputs MutableList<Surface!>: The new set of Surfaces that should be made available as targets for captured high speed image data. This value cannot be null.
            callback CameraCaptureSession.StateCallback: The callback to notify about the status of the new capture session. This value cannot be null.
            handler Handler?: The handler on which the callback should be invoked, or null to use the current thread's looper.
            Exceptions
            java.lang.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.
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            createExtensionSession

            Added in API level 31
            open fun createExtensionSession(extensionConfiguration: ExtensionSessionConfiguration): Unit

            Initialize a specific device-specific extension augmented camera capture session.

            Extension sessions can be used to enable device-specific operation modes like CameraExtensionCharacteristics#EXTENSION_NIGHT or CameraExtensionCharacteristics#EXTENSION_HDR. These modes are less flexible than the full camera API, but enable access to more sophisticated processing algorithms that can capture multi-frame bursts to generate single output images. To query for available extensions on this device call CameraExtensionCharacteristics#getSupportedExtensions().

            This method will also trigger the setup of the internal processing pipeline for extension augmented preview and multi-frame still capture.

            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.

            The CameraExtensionSession will be active until the client either calls CameraExtensionSession.close() or creates a new camera capture session. In both cases all internal resources will be released, continuous repeating requests stopped and any pending multi-frame capture requests flushed.

            Note that the CameraExtensionSession currently supports at most wo multi frame capture surface formats: ImageFormat.JPEG will be supported by all extensions and ImageFormat.YUV_420_888 may or may not be supported. Clients must query the multi-frame capture format support using CameraExtensionCharacteristics#getExtensionSupportedSizes(int, int). For repeating requests CameraExtensionSession supports only android.graphics.SurfaceTexture as output. Clients can query the supported resolution for the repeating request output using getExtensionSupportedSizes(..., Class).

            At the very minimum the initialization expects either one valid output surface for repeating or one valid output for high-quality single requests registered in the outputs argument of the extension configuration argument. At the maximum the initialization will accept two valid output surfaces, one for repeating and the other for single requests. Additional unsupported surfaces passed to ExtensionSessionConfiguration will cause an IllegalArgumentException to be thrown.

            Parameters
            extensionConfiguration ExtensionSessionConfiguration: extension configuration This value cannot be null.
            Exceptions
            java.lang.IllegalArgumentException If both the preview and still capture surfaces are not set or invalid, or if any of the registered surfaces do not meet the device-specific extension requirements such as dimensions and/or (output format)/(surface type), or if the extension is not supported, or if any of the output configurations select a dynamic range different from android.hardware.camera2.params.DynamicRangeProfiles#STANDARD, or if any of the output configurations sets a stream use case different from android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT.

            createReprocessCaptureRequest

            Added in API level 23
            abstract fun createReprocessCaptureRequest(inputResult: TotalCaptureResult): CaptureRequest.Builder

            Create a CaptureRequest.Builder for a new reprocess CaptureRequest from a TotalCaptureResult.

            Each reprocess CaptureRequest processes one buffer from CameraCaptureSession's input Surface to all output 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 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 Surface, submitting a reprocess CaptureRequest with multiple output targets will result in a CaptureFailure. From Android 14 onward, CaptureRequest#CONTROL_CAPTURE_INTENT will be set to CameraMetadata#CONTROL_CAPTURE_INTENT_STILL_CAPTURE by default. Prior to Android 14, apps will need to explicitly set this key themselves.

            Parameters
            inputResult TotalCaptureResult: The capture result of the output image or one of the output images used to generate the reprocess input image for this capture request. This value cannot be null.
            Return
            CaptureRequest.Builder This value cannot be null.
            Exceptions
            java.lang.IllegalArgumentException if inputResult is null.
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            createReprocessableCaptureSession

            Added in API level 23
            Deprecated in API level 30
            abstract fun createReprocessableCaptureSession(
                inputConfig: InputConfiguration,
                outputs: MutableList<Surface!>,
                callback: CameraCaptureSession.StateCallback,
                handler: Handler?
            ): Unit

            Deprecated: Please use createCaptureSession(android.hardware.camera2.params.SessionConfiguration) for the full set of configuration options available.

            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.

            Parameters
            inputConfig InputConfiguration: The configuration for the input Surface This value cannot be null.
            outputs MutableList<Surface!>: The new set of Surfaces that should be made available as targets for captured image data. This value cannot be null.
            callback CameraCaptureSession.StateCallback: The callback to notify about the status of the new capture session. This value cannot be null.
            handler Handler?: The handler on which the callback should be invoked, or null to use the current thread's looper.
            Exceptions
            java.lang.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.
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            createReprocessableCaptureSessionByConfigurations

            Added in API level 24
            Deprecated in API level 30
            abstract fun createReprocessableCaptureSessionByConfigurations(
                inputConfig: InputConfiguration,
                outputs: MutableList<OutputConfiguration!>,
                callback: CameraCaptureSession.StateCallback,
                handler: Handler?
            ): Unit

            Deprecated: Please use createCaptureSession(android.hardware.camera2.params.SessionConfiguration) for the full set of configuration options available.

            Create a new reprocessable camera capture session by providing the desired reprocessing input configuration and output OutputConfiguration to the camera device.

            Parameters
            inputConfig InputConfiguration: This value cannot be null.
            outputs MutableList<OutputConfiguration!>: This value cannot be null.
            callback CameraCaptureSession.StateCallback: This value cannot be null.
            handler Handler?: This value may be null.

            getCameraAudioRestriction

            Added in API level 30
            open fun getCameraAudioRestriction(): Int

            Get currently applied global camera audio restriction mode.

            Application can use this method to retrieve the system-wide camera audio restriction settings described in setCameraAudioRestriction.

            Return
            Int The current system-wide mute mode setting in effect Value is android.hardware.camera2.CameraDevice#AUDIO_RESTRICTION_NONE, android.hardware.camera2.CameraDevice#AUDIO_RESTRICTION_VIBRATION, or android.hardware.camera2.CameraDevice#AUDIO_RESTRICTION_VIBRATION_SOUND
            Exceptions
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            getId

            Added in API level 21
            abstract fun getId(): String

            Get the ID of this camera device.

            This matches the ID given to android.hardware.camera2.CameraManager#openCamera to instantiate this this camera device.

            This ID can be used to query the camera device's fixed properties with android.hardware.camera2.CameraManager#getCameraCharacteristics.

            This method can be called even if the device has been closed or has encountered a serious error.

            Return
            String the ID for this camera device This value cannot be null.

            isSessionConfigurationSupported

            Added in API level 29
            open fun isSessionConfigurationSupported(sessionConfig: SessionConfiguration): Boolean

            Checks whether a particular SessionConfiguration is supported by the camera device.

            This method performs a runtime check of a given SessionConfiguration. The result confirms whether or not the passed session configuration can be successfully used to create a camera capture session using CameraDevice#createCaptureSession(.

            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.

            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 android.hardware.camera2.params.MandatoryStreamCombination are better suited for this purpose.

            NOTE: For apps targeting android.os.Build.VERSION_CODES#VANILLA_ICE_CREAM and above, this method will automatically delegate to CameraDeviceSetup#isSessionConfigurationSupported whenever possible. This means that the output of this method will consider parameters set through SessionConfiguration#setSessionParameters as well.

            Session Parameters will be ignored for apps targeting <= android.os.Build.VERSION_CODES#UPSIDE_DOWN_CAKE, or if CameraManager#isCameraDeviceSetupSupported returns false for the camera id associated with this CameraDevice.

            Parameters
            sessionConfig SessionConfiguration: This value cannot be null.
            Return
            Boolean true if the given session configuration is supported by the camera device false otherwise.
            Exceptions
            java.lang.UnsupportedOperationException if the query operation is not supported by the camera device
            java.lang.IllegalArgumentException if the session configuration is invalid
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed

            setCameraAudioRestriction

            Added in API level 30
            open fun setCameraAudioRestriction(mode: Int): Unit

            Set audio restriction mode when this CameraDevice is being used.

            Some camera hardware (e.g. devices with optical image stabilization support) are sensitive to device vibration and video recordings can be ruined by unexpected sounds. Applications can use this method to suppress vibration or sounds coming from ringtones, alarms or notifications. Other vibration or sounds (e.g. media playback or accessibility) will not be muted.

            The mute mode is a system-wide setting. When multiple CameraDevice objects are setting different modes, the system will pick a the mode that's union of all modes set by CameraDevice. Applications can also use getCameraAudioRestriction to query current system-wide camera mute mode in effect.

            The mute settings from this CameraDevice will be automatically removed when the CameraDevice is closed or the application is disconnected from the camera.

            Parameters
            mode Int: An enumeration selecting the audio restriction mode for this camera device. Value is android.hardware.camera2.CameraDevice#AUDIO_RESTRICTION_NONE, android.hardware.camera2.CameraDevice#AUDIO_RESTRICTION_VIBRATION, or android.hardware.camera2.CameraDevice#AUDIO_RESTRICTION_VIBRATION_SOUND
            Exceptions
            java.lang.IllegalArgumentException if the mode is not supported
            android.hardware.camera2.CameraAccessException if the camera device is no longer connected or has encountered a fatal error
            java.lang.IllegalStateException if the camera device has been closed