协议
管理员
在 fuchsia.camera2/manager.fidl 中定义
AcknowledgeDeviceEvent
必须在上述任何事件之后调用 AcknowledgeDeviceEvent,然后系统才会发送更多事件。
请求
<EMPTY>
ConnectToStream
连接到摄像头视频传输:
device_id 是指 OnDeviceAvailable 通告的特定 device_id。
constraints 包含一组针对所请求数据流的限制。Camera Manager 将尝试查找满足约束条件的视频流。如果多个数据流匹配,则系统会连接其中一个匹配的数据流。token 是指将用于通过 Stream 协议传递图片的 Sysmem 缓冲区分配。相机管理器将应用与图片格式相关的 BufferCollectionContraints,因此客户端无需应用任何 ImageFormatConstraints。
在将 token 传递给 ConnectToStream 之前,系统会假定已对其调用 Sync。
由于 constraints 可能不会指定特定格式,因此数据流中图片的初始格式会在响应中指明。除非 stream 已关闭,否则一旦给出响应,连接即被视为成功。
请求
| 名称 | 类型 |
|---|---|
device_id |
int32
|
constraints |
StreamConstraints
|
token |
client_end:fuchsia.sysmem/BufferCollectionToken
|
stream |
server_end:Stream
|
响应
| 名称 | 类型 |
|---|---|
format |
fuchsia.sysmem/ImageFormat_2
|
OnDeviceAvailable
在摄像头可用时通知客户端。当客户端首次连接到此协议时,系统会发送其中一些事件。
device_id 用于标识摄像头。device_id 在摄像头的整个生命周期内不应发生变化。
当相机管理器已向客户端通知其当前已知的所有设备时,last_known_camera 会设置为 true。
description 描述了摄像头的属性。
响应
| 名称 | 类型 |
|---|---|
device_id |
int32
|
description |
DeviceInfo
|
last_known_camera |
bool
|
OnDeviceMuteChanged
在摄像头静音或取消静音时通知客户端。
device_id 是指之前 OnDeviceAvailable 调用的说明中的 device_id。
响应
| 名称 | 类型 |
|---|---|
device_id |
int32
|
currently_muted |
bool
|
OnDeviceUnavailable
在相机不可用时通知客户端。
响应
| 名称 | 类型 |
|---|---|
device_id |
int32
|
MuteControl
在 fuchsia.camera2/manager.fidl 中定义
静音
将摄像头静音。这与停止或关闭直播无关。在调用取消静音之前,静音的摄像头不会再生成任何图片。您仍然可以连接到静音摄像头的视频流,但只有在摄像头取消静音后,这些视频流才会生成画面。
device_id 是指之前 OnDeviceAvailable 调用中的 device_id。
请求
| 名称 | 类型 |
|---|---|
device_id |
int32
|
响应
| 名称 | 类型 |
|---|---|
status |
zx/Result
|
取消静音
请求
| 名称 | 类型 |
|---|---|
device_id |
int32
|
响应
| 名称 | 类型 |
|---|---|
status |
zx/Result
|
在线播放
在 fuchsia.camera2/stream.fidl 中定义
AcknowledgeFrameError
为接收帧错误提供流控制。请参阅 OnFrameAvailable 注释。
请求
<EMPTY>
GetBuffers
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
token |
client_end:fuchsia.sysmem/BufferCollectionToken
|
GetBuffers2
返回一个令牌,该令牌指向用于在数据流上输出帧的缓冲区。该令牌为 dispensable,这意味着无需将其提交到 sysmem 即可完成分配。这也意味着,对返回的令牌进行的任何 SetConstraints 调用都不能与 StreamConfig 中的限制冲突,否则尝试等待令牌上的缓冲区将失败。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
token |
client_end:fuchsia.sysmem2/BufferCollectionToken
|
GetImageFormats
获取此数据流支持的图片格式。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
image_formats |
vector<fuchsia.sysmem/ImageFormat_2>:256
|
OnFrameAvailable
当有帧可供处理或发生错误时,由驱动程序发送给客户端。在此消息之后,客户端会将该帧视为读锁定。客户端必须调用 ReleaseFrame 来释放非错误帧的读取锁,否则消费者最终会耗尽缓冲区。 如果帧有错误,客户端必须先调用 AcknowledgeFrameError,然后才能使用错误帧调用另一个 OnFrameAvailable。
响应
| 名称 | 类型 |
|---|---|
frame |
FrameAvailableInfo
|
ReleaseFrame
解锁指定的帧,允许驱动程序重复使用内存。
请求
| 名称 | 类型 |
|---|---|
buffer_id |
uint32
|
SetImageFormat
更改视频流的图片格式。当客户端想要在流式传输过程中动态更改流的分辨率时,会调用此方法。
请求
| 名称 | 类型 |
|---|---|
image_format_index |
uint32
|
响应
| 名称 | 类型 |
|---|---|
s |
zx/Result
|
SetRegionOfInterest
数据操作 客户端使用此操作来提供感兴趣区域选择的输入。输入是新边界框的 x 和 y 坐标。 对于不支持智能取景的视频流,此操作会返回错误。
请求
| 名称 | 类型 |
|---|---|
x_min |
float32
|
y_min |
float32
|
x_max |
float32
|
y_max |
float32
|
响应
| 名称 | 类型 |
|---|---|
s |
zx/Result
|
开始
控制操作 开始流式传输帧。
请求
<EMPTY>
停止
停止流式传输帧。
请求
<EMPTY>
STRUCTS
FrameAvailableInfo
在 fuchsia.camera2/stream.fidl 中定义
当有帧可供处理或发生错误时,由驱动程序发送给客户端。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
frame_status |
FrameStatus
|
如果发生错误,则为非零值。 |
无默认应用 |
buffer_id |
uint32
|
缓冲区集合中缓冲区的索引。 |
无默认应用 |
metadata |
FrameMetadata
|
无默认应用 |
FrameRate
在 fuchsia.camera2/stream.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
frames_per_sec_numerator |
uint32
|
帧速率为 frames_per_sec_numerator / frames_per_sec_denominator。 |
无默认应用 |
frames_per_sec_denominator |
uint32
|
无默认应用 |
枚举
DeviceType strict
类型:uint32
在 fuchsia.camera2/manager.fidl 中定义
| 名称 | 值 | 说明 |
|---|---|---|
BUILTIN |
1 |
|
VIRTUAL |
2 |
FrameStatus strict
类型:uint32
在 fuchsia.camera2/stream.fidl 中定义
当帧被标记为可用时要设置的状态。
| 名称 | 值 | 说明 |
|---|---|---|
确定 |
0 |
|
ERROR_FRAME |
1 |
生成帧时出错。 与此通知对应的数据缓冲区中将没有任何数据。 |
ERROR_BUFFER_FULL |
2 |
数据缓冲区中没有可用空间,导致丢帧。 |
TABLES
DeviceInfo
在 fuchsia.camera2/manager.fidl 中定义
设备的身份信息。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
vendor_id |
uint16
|
来自实体设备枚举的信息: |
2 |
vendor_name |
string:255
|
|
3 |
product_id |
uint16
|
|
4 |
product_name |
string:255
|
|
5 |
type |
DeviceType
|
设备类型信息: |
FrameMetadata
在 fuchsia.camera2/stream.fidl 中定义
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
timestamp |
int64
|
|
2 |
image_format_index |
uint32
|
|image_format_index| 引用数据流支持的可用图片格式向量中的索引。 |
3 |
capture_timestamp |
int64
|
从 ISP 收到用于构建此帧的缓冲区时,系统单调时钟的值。 |
StreamConstraints
在 fuchsia.camera2/manager.fidl 中定义
这些限制会在请求数据流时提供给相机管理器。Camera Manager 将使用这些限制条件来匹配适当的数据流。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
properties |
StreamProperties
|
一个描述数据流属性的表格。指定的任何属性都将被视为匹配数据流的要求。 |
2 |
format_index |
uint32
|
如果指定,系统将使用此索引创建流,作为初始格式索引。 如果未指定,系统将使用第一种流格式。 |
StreamProperties
在 fuchsia.camera2/stream.fidl 中定义
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
stream_type |
CameraStreamType
|
这些可能是上述一种或多种数据流类型 |
BITS
CameraStreamType strict
类型:uint32
在 fuchsia.camera2/stream.fidl 中定义
相机堆栈提供的不同 Stream 类型。
| 名称 | 值 | 说明 |
|---|---|---|
MACHINE_LEARNING |
1 | 机器学习请求 FR(全分辨率)流以及 DS(降级分辨率)流,用于具有固定分辨率的安全用例 |
监控 |
2 | 这是安全视频流,可在运行时支持多种分辨率。 |
FULL_RESOLUTION |
4 | |
DOWNSCALED_RESOLUTION |
8 | 机器学习请求视频会议的 DS 流,该流具有固定分辨率 |
VIDEO_CONFERENCE |
16 | 这是视频会议串流,可在运行时支持多种分辨率。 |
EXTENDED_FOV |
32 | 以扩展视野范围进行直播。 |
常量
| 名称 | 值 | 类型 | 说明 |
|---|---|---|---|
| MAX_IMAGE_FORMATS |
256
|
uint64 |
每个视频流的图片格式数量上限。 |