Skip to content

Most visited

Recently visited

navigation

CameraDevice

public abstract class CameraDevice
extends Object implements AutoCloseable

java.lang.Object
   ↳ 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 two levels: limited or full. If a device only 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. Devices that implement the full level of support provide substantially improved capabilities over the older camera API. Applications that target the limited level devices will run unchanged on the full-level devices; if your application requires a full-level device for proper operation, declare the "android.hardware.camera.level.full" feature in your manifest.

See also:

Summary

Nested classes

class CameraDevice.StateCallback

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

Constants

int TEMPLATE_MANUAL

A basic template for direct application control of capture parameters.

int TEMPLATE_PREVIEW

Create a request suitable for a camera preview window.

int TEMPLATE_RECORD

Create a request suitable for video recording.

int TEMPLATE_STILL_CAPTURE

Create a request suitable for still image capture.

int TEMPLATE_VIDEO_SNAPSHOT

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

int TEMPLATE_ZERO_SHUTTER_LAG

Create a request suitable for zero shutter lag still capture.

Public methods

abstract void close()

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

abstract CaptureRequest.Builder createCaptureRequest(int templateType)

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

abstract void createCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)

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

abstract void createCaptureSessionByOutputConfigurations(List<OutputConfiguration> outputConfigurations, CameraCaptureSession.StateCallback callback, Handler handler)

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

abstract void createConstrainedHighSpeedCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)

Create a new constrained high speed capture session.

abstract CaptureRequest.Builder createReprocessCaptureRequest(TotalCaptureResult inputResult)

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

abstract void createReprocessableCaptureSession(InputConfiguration inputConfig, List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)

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 void createReprocessableCaptureSessionByConfigurations(InputConfiguration inputConfig, List<OutputConfiguration> outputs, CameraCaptureSession.StateCallback callback, Handler handler)

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

abstract String getId()

Get the ID of this camera device.

Inherited methods

From class java.lang.Object
From interface java.lang.AutoCloseable

Constants

TEMPLATE_MANUAL

added in API level 21
int TEMPLATE_MANUAL

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 MANUAL_SENSOR capability.

See also:

Constant Value: 6 (0x00000006)

TEMPLATE_PREVIEW

added in API level 21
int TEMPLATE_PREVIEW

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 setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler) method. This template is guaranteed to be supported on all camera devices.

See also:

Constant Value: 1 (0x00000001)

TEMPLATE_RECORD

added in API level 21
int TEMPLATE_RECORD

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

See also:

Constant Value: 3 (0x00000003)

TEMPLATE_STILL_CAPTURE

added in API level 21
int TEMPLATE_STILL_CAPTURE

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

See also:

Constant Value: 2 (0x00000002)

TEMPLATE_VIDEO_SNAPSHOT

added in API level 21
int TEMPLATE_VIDEO_SNAPSHOT

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

See also:

Constant Value: 4 (0x00000004)

TEMPLATE_ZERO_SHUTTER_LAG

added in API level 21
int TEMPLATE_ZERO_SHUTTER_LAG

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

See also:

Constant Value: 5 (0x00000005)

Public methods

close

added in API level 21
void close ()

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 onClosed(CameraDevice) callback will be called, and the camera is free to be re-opened.

Immediately after this call, besides the final onClosed(CameraDevice) calls, no further callbacks from the device or the active session will occur, and any remaining submitted capture requests will be discarded, as if abortCaptures() had been called, except that no success or failure callbacks will be invoked.

createCaptureRequest

added in API level 21
CaptureRequest.Builder createCaptureRequest (int templateType)

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 TEMPLATE_PREVIEW, TEMPLATE_STILL_CAPTURE, TEMPLATE_RECORD, TEMPLATE_VIDEO_SNAPSHOT, TEMPLATE_ZERO_SHUTTER_LAG or TEMPLATE_MANUAL.

Returns
CaptureRequest.Builder a builder for a capture request, initialized with default settings for that template, and no output streams

This value will never be null.

Throws
IllegalArgumentException if the templateType is not supported by this device.
CameraAccessException if the camera device is no longer connected or has encountered a fatal error
IllegalStateException if the camera device has been closed

See also:

createCaptureSession

added in API level 21
void createCaptureSession (List<Surface> outputs, 
                CameraCaptureSession.StateCallback callback, 
                Handler handler)

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

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 onConfigured(CameraCaptureSession) 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. onConfigured(CameraCaptureSession) for the new session may be invoked before onClosed(CameraCaptureSession) 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 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.

While any of the sizes from getOutputSizes(int) 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.

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 getOutputMinFrameDuration(int, Size). Or third, if the output set cannot be used at all, session creation will fail entirely, with onConfigureFailed(CameraCaptureSession) being invoked.

For the type column, PRIV refers to any target whose available sizes are found using getOutputSizes(Class) with no direct application-visible format, YUV refers to a target Surface using the YUV_420_888 format, JPEG refers to the JPEG format, and RAW refers to the 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 CamcorderProfile. And MAXIMUM refers to the camera device's maximum output resolution for that format or target from getOutputSizes(int).

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 getOutputSizes(int) 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 devices (INFO_SUPPORTED_HARDWARE_LEVEL == LEGACY) support at least the following stream combinations:

LEGACY-level guaranteed configurations
Target 1 Target 2 Target 3 Sample use case(s)
TypeMax size TypeMax size TypeMax size
PRIVMAXIMUM Simple preview, GPU video processing, or no-preview video recording.
JPEGMAXIMUM No-viewfinder still image capture.
YUV MAXIMUM In-application video/image processing.
PRIVPREVIEW JPEGMAXIMUM Standard still imaging.
YUV PREVIEW JPEGMAXIMUM In-app processing plus still capture.
PRIVPREVIEW PRIVPREVIEW Standard recording.
PRIVPREVIEW YUV PREVIEW Preview plus in-app processing.
PRIVPREVIEW YUV PREVIEW JPEGMAXIMUM Still capture plus in-app processing.

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

LIMITED-level additional guaranteed configurations
Target 1Target 2Target 3 Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax size
PRIVPREVIEW PRIVRECORD High-resolution video recording with preview.
PRIVPREVIEW YUV RECORD High-resolution in-app video processing with preview.
YUV PREVIEW YUV RECORD Two-input in-app video processing.
PRIVPREVIEW PRIVRECORD JPEGRECORD High-resolution recording with video snapshot.
PRIVPREVIEW YUV RECORD JPEGRECORD High-resolution in-app processing with video snapshot.
YUV PREVIEW YUV PREVIEW JPEGMAXIMUM Two-input in-app processing with still capture.

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

FULL-level additional guaranteed configurations
Target 1Target 2Target 3 Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax size
PRIVPREVIEW PRIVMAXIMUM Maximum-resolution GPU processing with preview.
PRIVPREVIEW YUV MAXIMUM Maximum-resolution in-app processing with preview.
YUV PREVIEW YUV MAXIMUM Maximum-resolution two-input in-app processsing.
PRIVPREVIEW PRIVPREVIEW JPEGMAXIMUM Video recording with maximum-size video snapshot
YUV 640x480 PRIVPREVIEW 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 (REQUEST_AVAILABLE_CAPABILITIES includes RAW) devices additionally support at least the following stream combinations on both FULL and LIMITED devices:

RAW-capability additional guaranteed configurations
Target 1Target 2Target 3 Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax size
RAW MAXIMUM No-preview DNG capture.
PRIVPREVIEW RAW MAXIMUM Standard DNG capture.
YUV PREVIEW RAW MAXIMUM In-app processing plus DNG capture.
PRIVPREVIEW PRIVPREVIEW RAW MAXIMUM Video recording with DNG capture.
PRIVPREVIEW 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.
PRIVPREVIEW JPEGMAXIMUM RAW MAXIMUM Still capture with simultaneous JPEG and DNG.
YUV PREVIEW JPEGMAXIMUM RAW MAXIMUM In-app processing with simultaneous JPEG and DNG.

BURST-capability (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.

BURST-capability additional guaranteed configurations
Target 1Target 2Sample use case(s)
TypeMax sizeTypeMax size
PRIVPREVIEW PRIVMAXIMUM Maximum-resolution GPU processing with preview.
PRIVPREVIEW YUV MAXIMUM Maximum-resolution in-app processing with preview.
YUV PREVIEW YUV MAXIMUM Maximum-resolution two-input in-app processsing.

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

LEVEL-3 additional guaranteed configurations
Target 1Target 2Target 3Target 4Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax sizeTypeMax size
PRIVPREVIEW PRIV640x480 YUVMAXIMUM RAWMAXIMUM In-app viewfinder analysis with dynamic selection of output format.
PRIVPREVIEW PRIV640x480 JPEGMAXIMUM RAWMAXIMUM In-app viewfinder analysis with dynamic selection of output format.

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

Parameters
outputs List: The new set of Surfaces that should be made available as targets for captured image data.

This value must never be null.

callback CameraCaptureSession.StateCallback: The callback to notify about the status of the new capture session.

This value must never be null.

handler Handler: The handler on which the callback should be invoked, or null to use the current thread's 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.
CameraAccessException if the camera device is no longer connected or has encountered a fatal error
IllegalStateException if the camera device has been closed

See also:

createCaptureSessionByOutputConfigurations

added in API level 24
void createCaptureSessionByOutputConfigurations (List<OutputConfiguration> outputConfigurations, 
                CameraCaptureSession.StateCallback callback, 
                Handler handler)

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

Parameters
outputConfigurations List

callback CameraCaptureSession.StateCallback

handler Handler

This value may be null.

Throws
CameraAccessException

See also:

createConstrainedHighSpeedCaptureSession

added in API level 23
void createConstrainedHighSpeedCaptureSession (List<Surface> outputs, 
                CameraCaptureSession.StateCallback callback, 
                Handler handler)

Create a new constrained high speed capture session.

The application can use normal capture session (created via createCaptureSession(List, CameraCaptureSession.StateCallback, Handler)) for high speed capture if the desired high speed FPS ranges are advertised by CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, in which case all API semantics associated with normal capture sessions applies.

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., REQUEST_AVAILABLE_CAPABILITIES contains REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO). Therefore, it has special characteristics compared with a normal capture session:

Parameters
outputs List: The new set of Surfaces that should be made available as targets for captured high speed image data.

This value must never be null.

callback CameraCaptureSession.StateCallback: The callback to notify about the status of the new capture session.

This value must never be null.

handler Handler: The handler on which the callback should be invoked, or null to use the current thread's 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.
CameraAccessException if the camera device is no longer connected or has encountered a fatal error
IllegalStateException if the camera device has been closed

See also:

createReprocessCaptureRequest

added in API level 23
CaptureRequest.Builder createReprocessCaptureRequest (TotalCaptureResult inputResult)

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 queueInputImage(Image). 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.

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 must never be null.

Returns
CaptureRequest.Builder

This value will never be null.

Throws
IllegalArgumentException if inputResult is null.
CameraAccessException if the camera device is no longer connected or has encountered a fatal error
IllegalStateException if the camera device has been closed

See also:

createReprocessableCaptureSession

added in API level 23
void createReprocessableCaptureSession (InputConfiguration inputConfig, 
                List<Surface> outputs, 
                CameraCaptureSession.StateCallback callback, 
                Handler handler)

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.

If a camera device supports YUV reprocessing (REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING) or PRIVATE reprocessing (REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING), besides the capture session created via 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).

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 getInputFormats() and getInputSizes(int). For each supported input format, the camera device supports a set of output formats and sizes for reprocessing that can be queried via getValidOutputFormatsForInput(int) and getOutputSizes(int). 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 PRIVATE images directly, an output Surface created by newInstance(int, int, int, int) with PRIVATE as the format will be considered as intended to be used for reprocessing input and thus the ImageReader size must match one of the supported input sizes for PRIVATE format. Otherwise, creating a reprocessable capture session will fail.

The guaranteed stream configurations listed in createCaptureSession are also guaranteed to work for 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 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 (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.

LIMITED-level (INFO_SUPPORTED_HARDWARE_LEVEL == LIMITED) devices support at least the following stream combinations for creating a reprocessable capture session in addition to those listed in createCaptureSession 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)
InputTarget 1Target 2Target 3Target 4Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax sizeTypeMax sizeTypeMax size
PRIV/YUVMAXIMUM Same as inputMAXIMUM JPEGMAXIMUM No-viewfinder still image reprocessing.
PRIV/YUVMAXIMUM Same as inputMAXIMUM PRIVPREVIEW JPEGMAXIMUM ZSL(Zero-Shutter-Lag) still imaging.
PRIV/YUVMAXIMUM Same as inputMAXIMUM YUVPREVIEW JPEGMAXIMUM ZSL still and in-app processing imaging.
PRIV/YUVMAXIMUM Same as inputMAXIMUM YUVPREVIEW YUVPREVIEW JPEGMAXIMUM ZSL in-app processing with still capture.

FULL-level (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)
InputTarget 1Target 2Target 3Target 4Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax sizeTypeMax sizeTypeMax size
YUVMAXIMUM YUVMAXIMUM PRIVPREVIEW Maximum-resolution multi-frame image fusion in-app processing with regular preview.
YUVMAXIMUM YUVMAXIMUM YUVPREVIEW Maximum-resolution multi-frame image fusion two-input in-app processing.
PRIV/YUVMAXIMUM Same as inputMAXIMUM PRIVPREVIEW YUVRECORD High-resolution ZSL in-app video processing with regular preview.
PRIVMAXIMUM PRIVMAXIMUM PRIVPREVIEW YUVMAXIMUM Maximum-resolution ZSL in-app processing with regular preview.
PRIVMAXIMUM PRIVMAXIMUM YUVPREVIEW YUVMAXIMUM Maximum-resolution two-input ZSL in-app processing.
PRIV/YUVMAXIMUM Same as inputMAXIMUM PRIVPREVIEW YUVPREVIEW JPEGMAXIMUM ZSL still capture and in-app processing.

RAW-capability (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)
InputTarget 1Target 2Target 3Target 4Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax sizeTypeMax sizeTypeMax size
PRIV/YUVMAXIMUM Same as inputMAXIMUM YUVPREVIEW RAWMAXIMUM Mutually exclusive ZSL in-app processing and DNG capture.
PRIV/YUVMAXIMUM Same as inputMAXIMUM PRIVPREVIEW YUVPREVIEW RAWMAXIMUM Mutually exclusive ZSL in-app processing and preview with DNG capture.
PRIV/YUVMAXIMUM Same as inputMAXIMUM YUVPREVIEW YUVPREVIEW RAWMAXIMUM Mutually exclusive ZSL two-input in-app processing and DNG capture.
PRIV/YUVMAXIMUM Same as inputMAXIMUM PRIVPREVIEW JPEGMAXIMUM RAWMAXIMUM Mutually exclusive ZSL still capture and preview with DNG capture.
PRIV/YUVMAXIMUM Same as inputMAXIMUM YUVPREVIEW JPEGMAXIMUM RAWMAXIMUM Mutually exclusive ZSL in-app processing with still capture and DNG capture.

LEVEL-3 (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.
InputTarget 1Target 2Target 3Target 4Target 5Sample use case(s)
TypeMax sizeTypeMax sizeTypeMax sizeTypeMax sizeTypeMax sizeTypeMax size
YUVMAXIMUM YUVMAXIMUM PRIVPREVIEW PRIV640x480 RAWMAXIMUM In-app viewfinder analysis with ZSL and RAW.
PRIV/YUVMAXIMUM Same as inputMAXIMUM PRIVPREVIEW PRIV640x480 RAWMAXIMUM JPEGMAXIMUMIn-app viewfinder analysis with ZSL, RAW, and JPEG reprocessing output.

Parameters
inputConfig InputConfiguration: The configuration for the input Surface

This value must never be null.

outputs List: The new set of Surfaces that should be made available as targets for captured image data.

This value must never be null.

callback CameraCaptureSession.StateCallback: The callback to notify about the status of the new capture session.

This value must never be null.

handler Handler: The handler on which the callback should be invoked, or null to use the current thread's 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.
CameraAccessException if the camera device is no longer connected or has encountered a fatal error
IllegalStateException if the camera device has been closed

See also:

createReprocessableCaptureSessionByConfigurations

added in API level 24
void createReprocessableCaptureSessionByConfigurations (InputConfiguration inputConfig, 
                List<OutputConfiguration> outputs, 
                CameraCaptureSession.StateCallback callback, 
                Handler handler)

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 must never be null.

outputs List

This value must never be null.

callback CameraCaptureSession.StateCallback

This value must never be null.

handler Handler

This value may be null.

Throws
CameraAccessException

See also:

getId

added in API level 21
String getId ()

Get the ID of this camera device.

This matches the ID given to openCamera(String, CameraDevice.StateCallback, Handler) to instantiate this this camera device.

This ID can be used to query the camera device's fixed properties with getCameraCharacteristics(String).

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

Returns
String the ID for this camera device

This value will never be null.

See also:

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)