协议
经理
在 fuchsia.camera2/manager.fidl 中定义
AcknowledgeDeviceEvent
必须在上述任一事件之后调用 AcKnowledgeDeviceEvent,才能发送更多事件。
请求
<EMPTY>
ConnectToStream
连接到相机数据流:device_id
是指 OnDeviceAvailable 通告的特定 device_id。constraints
包含针对所请求数据流的一组限制条件。相机管理器会尝试查找符合约束条件的数据流。如果多个数据流匹配,其中一个匹配的数据流将连接。token
是指将用于使用 Stream 协议传递图片的 Sysmem 缓冲区分配。相机管理器会应用与图片格式相关的 BufferCollectionContraints,因此客户端不需要应用任何 ImageFormatConstraints。同步被传递到 ConnectToStream 之前,假定已在 token
上调用同步。由于 constraints
可能无法指定特定格式,因此响应中会指明数据流中图片的初始格式。获得响应后,除非 stream
关闭,否则连接被视为成功。
请求
名称 | 类型 |
---|---|
device_id |
int32
|
constraints |
StreamConstraints
|
token |
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/Status
|
取消静音
请求
名称 | 类型 |
---|---|
device_id |
int32
|
响应
名称 | 类型 |
---|---|
status |
zx/Status
|
水蓝色
在 fuchsia.camera2/stream.fidl 中定义
AcknowledgeFrameError
提供用于接收帧错误的流控制。请参阅 OnFrameAvailable 注释。
请求
<EMPTY>
GetBuffers
将令牌返回给用于在视频流中输出帧的缓冲区。该令牌为 dispensable
,这意味着无需上交 sysmem 即可完成分配。这也意味着,对返回的令牌的任何 SetConstraints 调用都不能与 StreamConfig
中的约束条件冲突,否则尝试等待令牌上的缓冲区将失败。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
token |
fuchsia.sysmem/BufferCollectionToken
|
GetImageFormats
获取此数据流支持的图片格式。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
image_formats |
vector<fuchsia.sysmem/ImageFormat_2>[256]
|
OnFrameAvailable
在帧可供处理或发生错误时,由驱动程序发送给客户端。收到此消息后,客户端会将该帧视为已读取。客户端必须调用 ReleaseFrame 以解除非错误帧的读取锁,否则使用方最终会耗尽缓冲区。如果某个帧存在错误,客户端必须先调用 AcVerifiedFrameError,然后才能使用错误帧调用另一个 OnFrameAvailable。
响应
名称 | 类型 |
---|---|
frame |
FrameAvailableInfo
|
ReleaseFrame
解锁指定帧,允许驱动程序重复使用内存。
请求
名称 | 类型 |
---|---|
buffer_id |
uint32
|
SetImageFormat
更改视频流的图片格式。如果客户端希望在流式传输期间动态更改视频流的分辨率,将调用此方法。
请求
名称 | 类型 |
---|---|
image_format_index |
uint32
|
响应
名称 | 类型 |
---|---|
s |
zx/Status
|
SetRegionOfInterest
数据操作 客户端使用它来为选择感兴趣的区域提供输入。 输入是新边界框的 x 和 y 坐标。对于不支持智能取景功能的视频流,这将返回错误。
请求
名称 | 类型 |
---|---|
x_min |
float32
|
y_min |
float32
|
x_max |
float32
|
y_max |
float32
|
响应
名称 | 类型 |
---|---|
s |
zx/Status
|
开始
控制操作:开始帧流式传输。
请求
<EMPTY>
停止
停止流式传输帧。
请求
<EMPTY>
结构
FrameAvailableInfo
在 fuchsia.camera2/stream.fidl 中定义
在帧可供处理或发生错误时,由驱动程序发送给客户端。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
frame_status |
FrameStatus
|
如果发生错误,则为非零值。 |
无默认值 |
buffer_id |
uint32
|
缓冲区集合中缓冲区的索引。 |
无默认值 |
metadata |
FrameMetadata
|
无默认值 |
FrameRate
在 fuchsia.camera2/stream.fidl 中定义
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
frames_per_sec_numerator |
uint32
|
帧速率为 Frameworks_per_sec_numerator / frames_per_sec_denominator。 |
无默认值 |
frames_per_sec_denominator |
uint32
|
无默认值 |
枚举
DeviceType 严格
类型:uint32
在 fuchsia.camera2/manager.fidl 中定义
名称 | 值 | 说明 |
---|---|---|
比尔特 |
1 |
|
虚拟 |
2 |
FrameStatus 严格
类型:uint32
在 fuchsia.camera2/stream.fidl 中定义
当帧有信号可用时要设置的状态。
名称 | 值 | 说明 |
---|---|---|
确定 |
0 |
|
ERROR_FRAME |
1 |
生成帧时出错。 与此通知对应的数据缓冲区中不会有任何数据。 |
ERROR_BUFFER_FULL |
2 |
数据缓冲区空间不足,导致丢帧。 |
表格
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 中定义
系统会在请求视频流时为相机管理器指定这些约束条件。相机管理器会使用这些约束条件来匹配相应的数据流。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
properties |
StreamProperties
|
描述数据流属性的表。指定的任何属性都将被视为匹配数据流的要求。 |
2 |
format_index |
uint32
|
如果指定,系统将使用此索引作为初始格式索引创建流。如果未指定,系统将使用第一种数据流格式。 |
StreamProperties
在 fuchsia.camera2/stream.fidl 中定义
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
stream_type |
CameraStreamType
|
可以是上述一种或多种直播类型 |
BITS
CameraStreamType 严格
类型:uint32
在 fuchsia.camera2/stream.fidl 中定义
相机堆栈提供的不同数据流类型。
名称 | 值 | 说明 |
---|---|---|
MACHINE_LEARNING |
1 | 适用于安全使用场景的机器学习请求 FR(完整分辨率)数据流以及具有固定分辨率的 DS(向下扩展分辨率)数据流 |
监控 |
2 | 这是可在运行时支持多种分辨率的安全视频流。 |
FULL_RESOLUTION |
4 | |
DOWNSCALED_RESOLUTION |
8 | 机器学习请求为视频会议提供 DS 视频流,该视频流具有固定分辨率 |
VIDEO_CONFERENCE |
16 | 这就是视频会议视频流,它在运行时可支持多种分辨率。 |
EXTENDED_FOV |
32 | 视野更宽广的直播。 |
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
MAX_IMAGE_FORMATS |
256
|
uint64 |
每个视频流的图片格式数量上限。 |