blob: 3dcab891d133e972cfa1c3f7b6b2753590717ebb [file] [log] [blame] [view]
<link rel="stylesheet" href="../style.css" />
[TOC]
# fuchsia.camera2
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>
## **PROTOCOLS**
## Manager {#Manager}
*Defined in [fuchsia.camera2/manager.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/manager.fidl;l=10)*
### AcknowledgeDeviceEvent {#Manager.AcknowledgeDeviceEvent}
<p>AcknowledgeDeviceEvent must be called after any of the above events before more
events will be sent.</p>
#### Request {#Manager.AcknowledgeDeviceEvent_Request}
&lt;EMPTY&gt;
### ConnectToStream {#Manager.ConnectToStream}
<p>Connect to a camera stream:
<code>device_id</code> Refers to a specific device_id that has been advertised by OnDeviceAvailable.
<code>constraints</code> contains a set of constraints on the requested stream. The Camera
Manager will attempt to find a stream that meets the constraints. If multiple
streams match, one of the matching streams will be connected.
<code>token</code> refers to a Sysmem buffer allocation that will be used to pass images using
the Stream protocol. The Camera Manager will apply a BufferCollectionContraints
related to the image format(s), so the client does not need to apply any
ImageFormatConstraints.
Sync is assumed to have been called on <code>token</code> before it is passed to
ConnectToStream.
Since <code>constraints</code> may not dictate a specific format, the initial format of images
on the stream is indicated on the response.
The connection is considered to be successful once a response has been given, unless
<code>stream</code> is closed.</p>
#### Request {#Manager.ConnectToStream_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>device_id</code></td>
<td>
<code>int32</code>
</td>
</tr>
<tr>
<td><code>constraints</code></td>
<td>
<code><a class='link' href='#StreamConstraints'>StreamConstraints</a></code>
</td>
</tr>
<tr>
<td><code>token</code></td>
<td>
<code><a class='link' href='../fuchsia.sysmem/'>fuchsia.sysmem</a>/<a class='link' href='../fuchsia.sysmem/#BufferCollectionToken'>BufferCollectionToken</a></code>
</td>
</tr>
<tr>
<td><code>stream</code></td>
<td>
<code>request&lt;<a class='link' href='#Stream'>Stream</a>&gt;</code>
</td>
</tr>
</table>
#### Response {#Manager.ConnectToStream_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>format</code></td>
<td>
<code><a class='link' href='../fuchsia.sysmem/'>fuchsia.sysmem</a>/<a class='link' href='../fuchsia.sysmem/#ImageFormat_2'>ImageFormat_2</a></code>
</td>
</tr>
</table>
### OnDeviceAvailable {#Manager.OnDeviceAvailable}
<p>Notifies the client when a camera becomes available. A number of these events will
be sent when a client first connects to this protocol.
<code>device_id</code> is used to identify the camera. The device_id should not change throughout
the lifetime of the camera.
<code>last_known_camera</code> is set to true when the Camera Manager has notified the client
of all the devices it currently knows about.
<code>description</code> describes the properties of the camera.</p>
#### Response {#Manager.OnDeviceAvailable_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>device_id</code></td>
<td>
<code>int32</code>
</td>
</tr>
<tr>
<td><code>description</code></td>
<td>
<code><a class='link' href='#DeviceInfo'>DeviceInfo</a></code>
</td>
</tr>
<tr>
<td><code>last_known_camera</code></td>
<td>
<code>bool</code>
</td>
</tr>
</table>
### OnDeviceMuteChanged {#Manager.OnDeviceMuteChanged}
<p>Notifies the client when a camera becomes muted or unmuted.
<code>device_id</code> refers to the device_id from the description of a previous OnDeviceAvailable
call.</p>
#### Response {#Manager.OnDeviceMuteChanged_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>device_id</code></td>
<td>
<code>int32</code>
</td>
</tr>
<tr>
<td><code>currently_muted</code></td>
<td>
<code>bool</code>
</td>
</tr>
</table>
### OnDeviceUnavailable {#Manager.OnDeviceUnavailable}
<p>Notifies the client when a camera becomes unavailable.</p>
#### Response {#Manager.OnDeviceUnavailable_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>device_id</code></td>
<td>
<code>int32</code>
</td>
</tr>
</table>
## MuteControl {#MuteControl}
*Defined in [fuchsia.camera2/manager.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/manager.fidl;l=67)*
### Mute {#MuteControl.Mute}
<p>Mutes a camera. This is independent from stopping or closing a stream. A muted
camera will not produce any more images until
unmute is called. You can still connect to streams from a muted camera, but they
will not produce frames until the camera is unmuted.
<code>device_id</code> refers to the device_id from a previous OnDeviceAvailable call.</p>
#### Request {#MuteControl.Mute_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>device_id</code></td>
<td>
<code>int32</code>
</td>
</tr>
</table>
#### Response {#MuteControl.Mute_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>status</code></td>
<td>
<code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#status'>status</a></code>
</td>
</tr>
</table>
### Unmute {#MuteControl.Unmute}
#### Request {#MuteControl.Unmute_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>device_id</code></td>
<td>
<code>int32</code>
</td>
</tr>
</table>
#### Response {#MuteControl.Unmute_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>status</code></td>
<td>
<code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#status'>status</a></code>
</td>
</tr>
</table>
## Stream {#Stream}
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=76)*
### AcknowledgeFrameError {#Stream.AcknowledgeFrameError}
<p>Provides flow control for receiving frame errors. See OnFrameAvailable comment.</p>
#### Request {#Stream.AcknowledgeFrameError_Request}
&lt;EMPTY&gt;
### GetBuffers {#Stream.GetBuffers}
<p>Returns a token to the buffers that are being used to output frames on the stream. The
token is <code>dispensable</code> which means it doesn't have to be turned in to sysmem for allocation
to complete. This also means that any SetConstraints call on the returned token can't
conflict with the constraints in the <code>StreamConfig</code>, otherwise attempts to wait for buffers
on the token will fail.</p>
#### Request {#Stream.GetBuffers_Request}
&lt;EMPTY&gt;
#### Response {#Stream.GetBuffers_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>token</code></td>
<td>
<code><a class='link' href='../fuchsia.sysmem/'>fuchsia.sysmem</a>/<a class='link' href='../fuchsia.sysmem/#BufferCollectionToken'>BufferCollectionToken</a></code>
</td>
</tr>
</table>
### GetImageFormats {#Stream.GetImageFormats}
<p>Get the image formats that this stream supports.</p>
#### Request {#Stream.GetImageFormats_Request}
&lt;EMPTY&gt;
#### Response {#Stream.GetImageFormats_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>image_formats</code></td>
<td>
<code>vector&lt;<a class='link' href='../fuchsia.sysmem/'>fuchsia.sysmem</a>/<a class='link' href='../fuchsia.sysmem/#ImageFormat_2'>ImageFormat_2</a>&gt;[256]</code>
</td>
</tr>
</table>
### OnFrameAvailable {#Stream.OnFrameAvailable}
<p>Sent by the driver to the client when a frame is available for processing,
or an error occurred. The frame is considered read-locked by the client
after this message. The client must call ReleaseFrame to release the
read-lock for a non-error frame, or the consumer will eventually run out of buffers.
If a frame has an error, the client must call AcknowledgeFrameError before
another OnFrameAvailable will be called with an error frame.</p>
#### Response {#Stream.OnFrameAvailable_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>frame</code></td>
<td>
<code><a class='link' href='#FrameAvailableInfo'>FrameAvailableInfo</a></code>
</td>
</tr>
</table>
### ReleaseFrame {#Stream.ReleaseFrame}
<p>Unlocks the specified frame, allowing the driver to reuse the memory.</p>
#### Request {#Stream.ReleaseFrame_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>buffer_id</code></td>
<td>
<code>uint32</code>
</td>
</tr>
</table>
### SetImageFormat {#Stream.SetImageFormat}
<p>Change the image format of the stream. This is called when clients want
to dynamically change the resolution of the stream while the streaming is
is going on.</p>
#### Request {#Stream.SetImageFormat_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>image_format_index</code></td>
<td>
<code>uint32</code>
</td>
</tr>
</table>
#### Response {#Stream.SetImageFormat_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>s</code></td>
<td>
<code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#status'>status</a></code>
</td>
</tr>
</table>
### SetRegionOfInterest {#Stream.SetRegionOfInterest}
<p>Data operations
This is used by clients to provide inputs for region of interest
selection.
Inputs are the x &amp; y coordinates for the new bounding box.
For streams which do not support smart framing, this would
return an error.</p>
#### Request {#Stream.SetRegionOfInterest_Request}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>x_min</code></td>
<td>
<code>float32</code>
</td>
</tr>
<tr>
<td><code>y_min</code></td>
<td>
<code>float32</code>
</td>
</tr>
<tr>
<td><code>x_max</code></td>
<td>
<code>float32</code>
</td>
</tr>
<tr>
<td><code>y_max</code></td>
<td>
<code>float32</code>
</td>
</tr>
</table>
#### Response {#Stream.SetRegionOfInterest_Response}
<table>
<tr><th>Name</th><th>Type</th></tr>
<tr>
<td><code>s</code></td>
<td>
<code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#status'>status</a></code>
</td>
</tr>
</table>
### Start {#Stream.Start}
<p>Control Operations
Starts the streaming of frames.</p>
#### Request {#Stream.Start_Request}
&lt;EMPTY&gt;
### Stop {#Stream.Stop}
<p>Stops the streaming of frames.</p>
#### Request {#Stream.Stop_Request}
&lt;EMPTY&gt;
## **STRUCTS**
### FrameAvailableInfo {#FrameAvailableInfo data-text="FrameAvailableInfo"}
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=36)*
<p>Sent by the driver to the client when a frame is available for processing,
or an error occurred.</p>
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="FrameAvailableInfo.frame_status">
<td><code>frame_status</code></td>
<td>
<code><a class='link' href='#FrameStatus'>FrameStatus</a></code>
</td>
<td><p>Non zero if an error occurred.</p>
</td>
<td>No default</td>
</tr>
<tr id="FrameAvailableInfo.buffer_id">
<td><code>buffer_id</code></td>
<td>
<code>uint32</code>
</td>
<td><p>The index of the buffer in the buffer collection.</p>
</td>
<td>No default</td>
</tr>
<tr id="FrameAvailableInfo.metadata">
<td><code>metadata</code></td>
<td>
<code><a class='link' href='#FrameMetadata'>FrameMetadata</a></code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
### FrameRate {#FrameRate data-text="FrameRate"}
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=46)*
<table>
<tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
<tr id="FrameRate.frames_per_sec_numerator">
<td><code>frames_per_sec_numerator</code></td>
<td>
<code>uint32</code>
</td>
<td><p>The frame rate is frames_per_sec_numerator / frames_per_sec_denominator.</p>
</td>
<td>No default</td>
</tr>
<tr id="FrameRate.frames_per_sec_denominator">
<td><code>frames_per_sec_denominator</code></td>
<td>
<code>uint32</code>
</td>
<td></td>
<td>No default</td>
</tr>
</table>
## **ENUMS**
### DeviceType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#DeviceType data-text="DeviceType"}
Type: <code>uint32</code>
*Defined in [fuchsia.camera2/manager.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/manager.fidl;l=97)*
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="DeviceType.BUILTIN">
<td><h3 id="DeviceType.BUILTIN" class="add-link hide-from-toc">BUILTIN</h3></td>
<td><code>1</code></td>
<td></td>
</tr>
<tr id="DeviceType.VIRTUAL">
<td><h3 id="DeviceType.VIRTUAL" class="add-link hide-from-toc">VIRTUAL</h3></td>
<td><code>2</code></td>
<td></td>
</tr>
</table>
### FrameStatus [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#FrameStatus data-text="FrameStatus"}
Type: <code>uint32</code>
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=13)*
<p>Status to be set when a frame is signalled available.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="FrameStatus.OK">
<td><h3 id="FrameStatus.OK" class="add-link hide-from-toc">OK</h3></td>
<td><code>0</code></td>
<td></td>
</tr>
<tr id="FrameStatus.ERROR_FRAME">
<td><h3 id="FrameStatus.ERROR_FRAME" class="add-link hide-from-toc">ERROR_FRAME</h3></td>
<td><code>1</code></td>
<td><p>An error occurred during the production of a frame.
No data will be available in the data buffer corresponding to this
notification.</p>
</td>
</tr>
<tr id="FrameStatus.ERROR_BUFFER_FULL">
<td><h3 id="FrameStatus.ERROR_BUFFER_FULL" class="add-link hide-from-toc">ERROR_BUFFER_FULL</h3></td>
<td><code>2</code></td>
<td><p>No space was available in the data buffer, resulting in a dropped frame.</p>
</td>
</tr>
</table>
## **TABLES**
### DeviceInfo {#DeviceInfo data-text="DeviceInfo"}
*Defined in [fuchsia.camera2/manager.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/manager.fidl;l=103)*
<p>Identifying information about the device.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="DeviceInfo.vendor_id">
<td><h3 id="DeviceInfo.vendor_id" class="add-link hide-from-toc">1</h3></td>
<td><code>vendor_id</code></td>
<td>
<code>uint16</code>
</td>
<td><p>Information from physical device enumeration:</p>
</td>
</tr>
<tr id="DeviceInfo.vendor_name">
<td><h3 id="DeviceInfo.vendor_name" class="add-link hide-from-toc">2</h3></td>
<td><code>vendor_name</code></td>
<td>
<code>string[255]</code>
</td>
<td></td>
</tr>
<tr id="DeviceInfo.product_id">
<td><h3 id="DeviceInfo.product_id" class="add-link hide-from-toc">3</h3></td>
<td><code>product_id</code></td>
<td>
<code>uint16</code>
</td>
<td></td>
</tr>
<tr id="DeviceInfo.product_name">
<td><h3 id="DeviceInfo.product_name" class="add-link hide-from-toc">4</h3></td>
<td><code>product_name</code></td>
<td>
<code>string[255]</code>
</td>
<td></td>
</tr>
<tr id="DeviceInfo.type">
<td><h3 id="DeviceInfo.type" class="add-link hide-from-toc">5</h3></td>
<td><code>type</code></td>
<td>
<code><a class='link' href='#DeviceType'>DeviceType</a></code>
</td>
<td><p>Information about the type of device:</p>
</td>
</tr>
</table>
### FrameMetadata {#FrameMetadata data-text="FrameMetadata"}
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=24)*
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="FrameMetadata.timestamp">
<td><h3 id="FrameMetadata.timestamp" class="add-link hide-from-toc">1</h3></td>
<td><code>timestamp</code></td>
<td>
<code>int64</code>
</td>
<td></td>
</tr>
<tr id="FrameMetadata.image_format_index">
<td><h3 id="FrameMetadata.image_format_index" class="add-link hide-from-toc">2</h3></td>
<td><code>image_format_index</code></td>
<td>
<code>uint32</code>
</td>
<td><p>|image_format_index| references the index into the vector of available
formats supported by the stream.</p>
</td>
</tr>
<tr id="FrameMetadata.capture_timestamp">
<td><h3 id="FrameMetadata.capture_timestamp" class="add-link hide-from-toc">3</h3></td>
<td><code>capture_timestamp</code></td>
<td>
<code>int64</code>
</td>
<td><p>The value of the system monotonic clock at the moment the buffer used to construct this
frame was received from the ISP.</p>
</td>
</tr>
</table>
### StreamConstraints {#StreamConstraints data-text="StreamConstraints"}
*Defined in [fuchsia.camera2/manager.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/manager.fidl;l=87)*
<p>These constraints are given to the Camera Manager when requesting a stream. The
Camera Manager will use these constraints to match an appropriate stream.</p>
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="StreamConstraints.properties">
<td><h3 id="StreamConstraints.properties" class="add-link hide-from-toc">1</h3></td>
<td><code>properties</code></td>
<td>
<code><a class='link' href='#StreamProperties'>StreamProperties</a></code>
</td>
<td><p>A table that describes the properties of the stream. Any properties specified will
be considered requirements for matching streams.</p>
</td>
</tr>
<tr id="StreamConstraints.format_index">
<td><h3 id="StreamConstraints.format_index" class="add-link hide-from-toc">2</h3></td>
<td><code>format_index</code></td>
<td>
<code>uint32</code>
</td>
<td><p>If specified, the stream will be created using this index for the initial format index.
If unspecified, the first stream format will be used.</p>
</td>
</tr>
</table>
### StreamProperties {#StreamProperties data-text="StreamProperties"}
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=71)*
<table>
<tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
<tr id="StreamProperties.stream_type">
<td><h3 id="StreamProperties.stream_type" class="add-link hide-from-toc">1</h3></td>
<td><code>stream_type</code></td>
<td>
<code><a class='link' href='#CameraStreamType'>CameraStreamType</a></code>
</td>
<td><p>These could be one or more of the above mentioned Stream Types</p>
</td>
</tr>
</table>
## **BITS**
### CameraStreamType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#CameraStreamType}
Type: <code>uint32</code>
*Defined in [fuchsia.camera2/stream.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=53)*
<p>Different Stream types provided by the camera stack.</p>
<table>
<tr><th>Name</th><th>Value</th><th>Description</th></tr>
<tr id="CameraStreamType.MACHINE_LEARNING">
<td><h3 id="CameraStreamType.MACHINE_LEARNING" class="add-link hide-from-toc">MACHINE_LEARNING</h3></td>
<td>1</td>
<td><p>ML request FR(Full Resolution) stream as well as
a DS(Down Scaled Resolution) stream for Security Use Case
which are of fixed resolutions</p>
</td>
</tr>
<tr id="CameraStreamType.MONITORING">
<td><h3 id="CameraStreamType.MONITORING" class="add-link hide-from-toc">MONITORING</h3></td>
<td>2</td>
<td><p>This is Security Video Stream which could support multiple
resolutions at runtime.</p>
</td>
</tr>
<tr id="CameraStreamType.FULL_RESOLUTION">
<td><h3 id="CameraStreamType.FULL_RESOLUTION" class="add-link hide-from-toc">FULL_RESOLUTION</h3></td>
<td>4</td>
<td></td>
</tr>
<tr id="CameraStreamType.DOWNSCALED_RESOLUTION">
<td><h3 id="CameraStreamType.DOWNSCALED_RESOLUTION" class="add-link hide-from-toc">DOWNSCALED_RESOLUTION</h3></td>
<td>8</td>
<td><p>ML request a DS stream for Video Conferencing which is fixed resolution</p>
</td>
</tr>
<tr id="CameraStreamType.VIDEO_CONFERENCE">
<td><h3 id="CameraStreamType.VIDEO_CONFERENCE" class="add-link hide-from-toc">VIDEO_CONFERENCE</h3></td>
<td>16</td>
<td><p>This is Video Conferencing Stream which could support
multiple resolutions at runtime.</p>
</td>
</tr>
<tr id="CameraStreamType.EXTENDED_FOV">
<td><h3 id="CameraStreamType.EXTENDED_FOV" class="add-link hide-from-toc">EXTENDED_FOV</h3></td>
<td>32</td>
<td><p>Stream with extended field of view.</p>
</td>
</tr>
</table>
## **CONSTANTS**
<table>
<tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
<tr id="MAX_IMAGE_FORMATS">
<td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.camera2/stream.fidl;l=10">MAX_IMAGE_FORMATS</a></td>
<td>
<code>256</code>
</td>
<td><code>uint64</code></td>
<td><p>Maximum number of image formats per stream.</p>
</td>
</tr>
</table>