# Print output for @column tags ?>
Developers

- Design
- Develop
- Distribute

Developer Console

## Most visited

## Recently visited

## Results for

Summary: Ctors | Methods | Inherited Methods

# CameraCaptureSession.CaptureCallback

`public static abstract class CameraCaptureSession.CaptureCallback`
`extends Object` ``

java.lang.Object
↳ | android.hardware.camera2.CameraCaptureSession.CaptureCallback

A callback object for tracking the progress of a `CaptureRequest` submitted to the camera device.

This callback is invoked when a request triggers a capture to start, and when the capture is complete. In case on an error capturing an image, the error method is triggered instead of the completion method.

See also:

- `CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.captureBurst(List, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingBurst(List, CameraCaptureSession.CaptureCallback, Handler)`

## Summary

### Public constructors
`CaptureCallback()`

### Public methods
`void` | `onCaptureBufferLost(CameraCaptureSession session, CaptureRequest request, Surface target, long frameNumber)` This method is called if a single buffer for a capture could not be sent to its destination surface.
`void` | `onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result)` This method is called when an image capture has fully completed and all the result metadata is available.
`void` | `onCaptureFailed(CameraCaptureSession session, CaptureRequest request, CaptureFailure failure)` This method is called instead of `onCaptureCompleted(CameraCaptureSession, CaptureRequest, TotalCaptureResult)` when the camera device failed to produce a `CaptureResult` for the request.
`void` | `onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult)` This method is called when an image capture makes partial forward progress; some (but not all) results from an image capture are available.
`void` | `onCaptureSequenceAborted(CameraCaptureSession session, int sequenceId)` This method is called independently of the others in CaptureCallback, when a capture sequence aborts before any `CaptureResult` or `CaptureFailure` for it have been returned via this listener.
`void` | `onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber)` This method is called independently of the others in CaptureCallback, when a capture sequence finishes and all `CaptureResult` or `CaptureFailure` for it have been returned via this listener.
`void` | `onCaptureStarted(CameraCaptureSession session, CaptureRequest request, long timestamp, long frameNumber)` This method is called when the camera device has started capturing the output image for the request, at the beginning of image exposure, or when the camera device has started processing an input image for a reprocess request.

### Inherited methods
From class `java.lang.Object`
`Object` | `clone()` Creates and returns a copy of this object.
`boolean` | `equals(Object obj)` Indicates whether some other object is "equal to" this one.
`void` | `finalize()` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
`final Class<?>` | `getClass()` Returns the runtime class of this `Object`.
`int` | `hashCode()` Returns a hash code value for the object.
`final void` | `notify()` Wakes up a single thread that is waiting on this object's monitor.
`final void` | `notifyAll()` Wakes up all threads that are waiting on this object's monitor.
`String` | `toString()` Returns a string representation of the object.
`final void` | `wait(long timeout, int nanos)` Causes the current thread to wait until another thread invokes the `notify()` method or the `notifyAll()` method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.
`final void` | `wait(long timeout)` Causes the current thread to wait until either another thread invokes the `notify()` method or the `notifyAll()` method for this object, or a specified amount of time has elapsed.
`final void` | `wait()` Causes the current thread to wait until another thread invokes the `notify()` method or the `notifyAll()` method for this object.

## Public constructors

### CaptureCallback

    public CaptureCallback ()

## Public methods

### onCaptureBufferLost

    public void onCaptureBufferLost (CameraCaptureSession session,
                    CaptureRequest request,
                    Surface target,
                    long frameNumber)

This method is called if a single buffer for a capture could not be sent to its destination surface.

If the whole capture failed, then `onCaptureFailed(CameraCaptureSession, CaptureRequest, CaptureFailure)` will be called instead. If some but not all buffers were captured but the result metadata will not be available, then onCaptureFailed will be invoked with `CaptureFailure#wasImageCaptured` returning true, along with one or more calls to `onCaptureBufferLost(CameraCaptureSession, CaptureRequest, Surface, long)` for the failed outputs.

Parameters
`session` | `CameraCaptureSession`: The session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`request` | `CaptureRequest`: The request that was given to the CameraDevice This value cannot be `null`.
`target` | `Surface`: The target Surface that the buffer will not be produced for This value cannot be `null`.
`frameNumber` | `long`: The frame number for the request

### onCaptureCompleted

    public void onCaptureCompleted (CameraCaptureSession session,
                    CaptureRequest request,
                    TotalCaptureResult result)

This method is called when an image capture has fully completed and all the result metadata is available.

This callback will always fire after the last `onCaptureProgressed(CameraCaptureSession, CaptureRequest, CaptureResult)`; in other words, no more partial results will be delivered once the completed result is available.

For performance-intensive use-cases where latency is a factor, consider using `onCaptureProgressed(CameraCaptureSession, CaptureRequest, CaptureResult)` instead.

The default implementation of this method does nothing.

Parameters
`session` | `CameraCaptureSession`: the session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`request` | `CaptureRequest`: The request that was given to the CameraDevice This value cannot be `null`.
`result` | `TotalCaptureResult`: The total output metadata from the capture, including the final capture parameters and the state of the camera system during capture. This value cannot be `null`.

See also:

- `CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.captureBurst(List, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingBurst(List, CameraCaptureSession.CaptureCallback, Handler)`

### onCaptureFailed

    public void onCaptureFailed (CameraCaptureSession session,
                    CaptureRequest request,
                    CaptureFailure failure)

This method is called instead of `onCaptureCompleted(CameraCaptureSession, CaptureRequest, TotalCaptureResult)` when the camera device failed to produce a `CaptureResult` for the request.

Other requests are unaffected, and some or all image buffers from the capture may have been pushed to their respective output streams.

The default implementation of this method does nothing.

Parameters
`session` | `CameraCaptureSession`: The session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`request` | `CaptureRequest`: The request that was given to the CameraDevice This value cannot be `null`.
`failure` | `CaptureFailure`: The output failure from the capture, including the failure reason and the frame number. This value cannot be `null`.

See also:

- `CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.captureBurst(List, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingBurst(List, CameraCaptureSession.CaptureCallback, Handler)`

### onCaptureProgressed

    public void onCaptureProgressed (CameraCaptureSession session,
                    CaptureRequest request,
                    CaptureResult partialResult)

This method is called when an image capture makes partial forward progress; some (but not all) results from an image capture are available.

The result provided here will contain some subset of the fields of a full result. Multiple `onCaptureProgressed(CameraCaptureSession, CaptureRequest, CaptureResult)` calls may happen per capture; a given result field will only be present in one partial capture at most. The final `onCaptureCompleted(CameraCaptureSession, CaptureRequest, TotalCaptureResult)` call will always contain all the fields (in particular, the union of all the fields of all the partial results composing the total result).

For each request, some result data might be available earlier than others. The typical delay between each partial result (per request) is a single frame interval. For performance-oriented use-cases, applications should query the metadata they need to make forward progress from the partial results and avoid waiting for the completed result.

For a particular request, `onCaptureProgressed(CameraCaptureSession, CaptureRequest, CaptureResult)` may happen before or after `onCaptureStarted(CameraCaptureSession, CaptureRequest, long, long)`.

Each request will generate at least `1` partial results, and at most `CameraCharacteristics#REQUEST_PARTIAL_RESULT_COUNT` partial results.

Depending on the request settings, the number of partial results per request will vary, although typically the partial count could be the same as long as the camera device subsystems enabled stay the same.

The default implementation of this method does nothing.

Parameters
`session` | `CameraCaptureSession`: the session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`request` | `CaptureRequest`: The request that was given to the CameraDevice This value cannot be `null`.
`partialResult` | `CaptureResult`: The partial output metadata from the capture, which includes a subset of the `TotalCaptureResult` fields. This value cannot be `null`.

See also:

- `CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.captureBurst(List, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingRequest(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)`
- `CameraCaptureSession.setRepeatingBurst(List, CameraCaptureSession.CaptureCallback, Handler)`

### onCaptureSequenceAborted

    public void onCaptureSequenceAborted (CameraCaptureSession session,
                    int sequenceId)

This method is called independently of the others in CaptureCallback, when a capture sequence aborts before any `CaptureResult` or `CaptureFailure` for it have been returned via this listener.

Due to the asynchronous nature of the camera device, not all submitted captures are immediately processed. It is possible to clear out the pending requests by a variety of operations such as `CameraCaptureSession#stopRepeating` or `CameraCaptureSession#abortCaptures`. When such an event happens, `onCaptureSequenceCompleted(CameraCaptureSession, int, long)` will not be called.

The default implementation does nothing.

Parameters
`session` | `CameraCaptureSession`: The session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`sequenceId` | `int`: A sequence ID returned by the `CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)` family of functions.

See also:

- `CaptureResult.getFrameNumber()`
- `CaptureFailure.getFrameNumber()`
- `CaptureResult.getSequenceId()`
- `CaptureFailure.getSequenceId()`
- `onCaptureSequenceCompleted(CameraCaptureSession, int, long)`

### onCaptureSequenceCompleted

    public void onCaptureSequenceCompleted (CameraCaptureSession session,
                    int sequenceId,
                    long frameNumber)

This method is called independently of the others in CaptureCallback, when a capture sequence finishes and all `CaptureResult` or `CaptureFailure` for it have been returned via this listener.

In total, there will be at least one result/failure returned by this listener before this callback is invoked. If the capture sequence is aborted before any requests have been processed, `onCaptureSequenceAborted(CameraCaptureSession, int)` is invoked instead.

The default implementation does nothing.

Parameters
`session` | `CameraCaptureSession`: The session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`sequenceId` | `int`: A sequence ID returned by the `CameraCaptureSession.capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)` family of functions.
`frameNumber` | `long`: The last frame number (returned by `CaptureResult#getFrameNumber` or `CaptureFailure#getFrameNumber`) in the capture sequence.

See also:

- `CaptureResult.getFrameNumber()`
- `CaptureFailure.getFrameNumber()`
- `CaptureResult.getSequenceId()`
- `CaptureFailure.getSequenceId()`
- `onCaptureSequenceAborted(CameraCaptureSession, int)`

### onCaptureStarted

    public void onCaptureStarted (CameraCaptureSession session,
                    CaptureRequest request,
                    long timestamp,
                    long frameNumber)

This method is called when the camera device has started capturing the output image for the request, at the beginning of image exposure, or when the camera device has started processing an input image for a reprocess request.

For a regular capture request, this callback is invoked right as the capture of a frame begins, so it is the most appropriate time for playing a shutter sound, or triggering UI indicators of capture.

The request that is being used for this capture is provided, along with the actual timestamp for the start of exposure. For a reprocess request, this timestamp will be the input image's start of exposure which matches `the result timestamp field` of the `TotalCaptureResult` that was used to `create the reprocess request`. This timestamp matches the timestamps that will be included in `the result timestamp field`, and in the buffers sent to each output Surface. These buffer timestamps are accessible through, for example, `Image.getTimestamp()` or `SurfaceTexture.getTimestamp()`. The frame number included is equal to the frame number that will be included in `CaptureResult#getFrameNumber`.

For the simplest way to play a shutter sound camera shutter or a video recording start/stop sound, see the `MediaActionSound` class.

The default implementation of this method does nothing.

Parameters
`session` | `CameraCaptureSession`: the session returned by `CameraDevice#createCaptureSession` This value cannot be `null`.
`request` | `CaptureRequest`: the request for the capture that just begun This value cannot be `null`.
`timestamp` | `long`: the timestamp at start of capture for a regular request, or the timestamp at the input image's start of capture for a reprocess request, in nanoseconds.
`frameNumber` | `long`: the frame number for this capture

See also:

- `MediaActionSound`

Full name *
Email address *
Company / developer name
One of your Play Store app URLs *
Which best describes your business:*
Apps
Games
Apps & Games
*
*