协议
设备
在 fuchsia.camera3/device.fidl 中定义
设备代表系统中存在的唯一物理摄像头。只有一个客户端可以连接到未绑定的实体摄像头,但“Rebind”方法可用于创建多个与它的连接,以供一组协调的客户端使用。
ConnectToStream
在提供的索引处连接到俱乐部。如果此数据流已有客户端,则请求以 ZX_ERR_ALREADY_BOUND epitaph 结束。
请求
名称 | 类型 |
---|---|
index |
uint32
|
request |
server_end<Stream>
|
GetConfigurations
返回相机支持的配置列表。所有摄像头都至少有一项配置。返回的值是不可变的,在客户端与相机连接的生命周期内,这些值不会发生变化。
已弃用 - 使用 GetConfigurations2
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
configurations |
vector<Configuration>[256]
|
GetConfigurations2
返回相机支持的配置列表。所有摄像头都至少有一项配置。返回的值是不可变的,在客户端与相机连接的生命周期内,这些值不会发生变化。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
configurations |
vector<Configuration2>[256]
|
GetIdentifier
返回相机的标识符。如果存在,不同系统上的相同设备将具有相同的标识符。客户端可以使用此方法来确定给定设备的先验其他已知语义是否适用于当前相机。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
identifier |
string[256]?
|
重新绑定
请求再次连接到此设备。这样,客户端可以将不同的操作委托给不同的协调客户端。
请求
名称 | 类型 |
---|---|
request |
server_end<Device>
|
SetCurrentConfiguration
使用提供的索引设置配置。调用此方法会断开与此相机关联的所有现有 Stream 客户端。关闭时,系统将为任何连接的 Stream 客户端发送 ZX_OK 的首字母缩写。
请求
名称 | 类型 |
---|---|
index |
uint32
|
SetSoftwareMuteState
设置当前摄像头的软件静音状态。转换为静音状态时,当相机已成功停止向流客户端发送新帧时,此方法会返回。转换为取消静音状态时,此方法会立即返回。
请求
名称 | 类型 |
---|---|
muted |
bool
|
响应
<EMPTY>
WatchCurrentConfiguration
如果当前配置从先前返回的配置发生变化,或者客户端首次调用该配置,则返回当前配置的索引。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
index |
uint32
|
WatchMuteState
如果相机从之前返回的状态发生变化,或客户端首次调用相机,则返回当前静音状态。可以使用 SetSoftwareMuteState 或通过物理开关将摄像头静音。如果任一静音模式处于启用状态,与此实体摄像头关联的数据流客户端将停止接收新帧。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
software_muted |
bool
|
hardware_muted |
bool
|
DeviceWatcher
在 fuchsia.camera3/device_watcher.fidl 中定义
DeviceWatcher 为客户端提供了一种机制,用于发现系统中存在的摄像头设备。这是一种临时机制,将被 go/drivers-as-components 取代,后者将允许同一协议的多个实例并存。客户端无需保持与 Watcher 的连接即可使用已建立的 Camera 连接。
ConnectToDevice
获取指定 ID 的相机接口。如果此摄像头已有任何客户端,则请求以 ZX_ERR_ALREADY_BOUND eitaph 关闭。
请求
名称 | 类型 |
---|---|
id |
DeviceId
|
request |
server_end<Device>
|
WatchDevices
如果相机 ID 从之前返回的 ID 列表发生了变化,或者客户端首次调用它,则返回可用相机 ID 列表。返回的列表可能为空,表示没有可用的摄像头。在客户端连接期间,返回给客户端的 ID 相对于它们所代表的物理设备将保持一致。事件将首先按事件类型排序:existing
、added
、removed
。在每个事件类型范围内,ID 将按升序提供。事件由服务器合并,因此给定 ID 在每个事件列表中仅显示一次。
请注意,即使本地相机硬件采用硬连接(而非 USB 等插件),返回的列表也完全有可能暂时为空。在此类平台上,空列表条件是临时的。
相机应用应容忍返回空列表,并尝试重试 WatchDevices()
调用。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
events |
vector<WatchDevicesEvent>[256]
|
水蓝色
在 fuchsia.camera3/stream.fidl 中定义
数据流表示应用于缓冲区集合的时间、顺序和其他特定于摄像头的属性。
GetNextFrame
请参阅 GetNextFrame2。
已弃用 - 使用 GetNextFrame2
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
info |
FrameInfo
|
GetNextFrame2
请求当前客户端尚未获取此数据流的下一个可用帧。多个参与的客户端可以同时持有同一帧。当数据流已填充缓冲区并可能被客户端读取时,系统会返回此错误代码,前提是未释放缓冲区的数量少于通过最近协商的缓冲区收集令牌提供的计数。如果正在进行缓冲区重新协商,则只有在协商完成并且有新的集合可用后,此调用才会返回。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
info |
FrameInfo2
|
GetProperties
获取与此数据流相关联的媒体资源。返回的值与 |Device.GetConfigurations| 返回的值与此数据流对应的值相同。
已弃用 - 使用 GetProperties2
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
properties |
StreamProperties
|
GetProperties2
获取与此数据流相关联的媒体资源。返回的值与 |Device.GetConfigurations| 返回的值与此数据流对应的值相同。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
properties |
StreamProperties2
|
重新绑定
请求与此俱乐部再次连接。这样,客户端可以将不同的操作委托给不同的协调客户端,或者让多个客户端同时观察数据流生成的帧。
请求
名称 | 类型 |
---|---|
request |
server_end<Stream>
|
SetBufferCollection
如果为非 null 值,则请求重新协商支持此数据流的缓冲区集合,并将此客户端标识为缓冲区协商的参与者。如果为 null,则将此客户端标识为未参与缓冲区协商。初次连接时,客户端是非参与者。注册为参与者后,客户端必须始终对 WatchBufferCollection 进行未完成的调用,以便从服务器接收令牌,以便能够响应当前和未来的重新协商请求。
请求
名称 | 类型 |
---|---|
token |
fuchsia.sysmem/BufferCollectionToken?
|
SetCropRegion
将数据流的剪裁区域设置为提供的区域,图片左上角以 (0,0) 表示,右下角以 (1,1) 表示。生成的内容随后会进行缩放以填充输出缓冲区。如果实现不能精确支持提供的值,它将会扩展至覆盖所提供区域的最小区域。如果区域设置为 null,则未设置剪裁区域,相当于指定覆盖整张图片的区域。初次连接时,该区域会取消设置。如果视频流不支持剪裁区域,则连接以 ZX_ERR_NOT_SUPPORTED 浮音关闭。
请求
名称 | 类型 |
---|---|
region |
fuchsia.math/RectF?
|
SetResolution
将流的分辨率设置为提供的值。如果实现不能精确支持提供的值,它将被扩展为超出所提供分辨率的最小分辨率。
请求
名称 | 类型 |
---|---|
coded_size |
fuchsia.math/Size
|
WatchBufferCollection
当服务器或任何缓冲区协商参与者(包括当前客户端)需要重新协商缓冲区,并且当前客户端已注册为参与者时,返回。收到此回调后收到的帧回调适用于新协商的数据收集。
由于相机可以直接输出到这些集合,因此每个客户端都应支持从 RAM 的 |fuchsia.sysmem.CoherencyDomain| 读取数据,并在其 |fuchsia.sysmem.BufferMemoryConstraints| 中设置 |ram_domain_supported|。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
token |
fuchsia.sysmem/BufferCollectionToken
|
WatchCropRegion
如果剪裁区域从先前返回值发生变化,或者客户端首次调用,则返回剪裁区域。收到此回调后收到的帧回调反映的是对新区域的使用。有关 region 参数的说明,请参阅 SetCropRegion。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
region |
fuchsia.math/RectF?
|
WatchOrientation
如果屏幕方向从先前返回的值发生变化,或者客户端首次调用,则返回屏幕方向。收到此回调后收到的帧回调反映新的方向。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
orientation |
Orientation
|
WatchResolution
如果分辨率从先前返回值更改为其他分辨率,或者客户端首次调用该分辨率,则返回该分辨率。收到此回调后收到的帧回调反映新的分辨率。
请求
<EMPTY>
响应
名称 | 类型 |
---|---|
coded_size |
fuchsia.math/Size
|
结构
配置
在 fuchsia.camera3/device.fidl 中定义
描述相机的独特配置。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
streams |
vector<StreamProperties>[256]
|
关于配置中同时可用的数据流的说明。 |
无默认取景方式 |
FrameInfo 资源
在 fuchsia.camera3/stream.fidl 中定义
关于给定帧的元数据。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
buffer_index |
uint32
|
标识用于此帧的缓冲区,作为最近协商的缓冲区集合的索引。 |
无默认取景方式 |
frame_counter |
uint64
|
一个单调递增的计数器,用于指示写入此数据流最近协商的缓冲区集合的帧数。客户端可以使用此方法检测丢帧,或使用关联流的帧速率生成标称时间戳。 |
无默认取景方式 |
timestamp |
zx/Time
|
系统单调时钟的值,在硬件完成缓冲区填充时测量。 |
无默认取景方式 |
release_fence |
handle<eventpair>
|
从缓冲区读取数据后,客户端必须关闭此程序。 |
无默认取景方式 |
FrameRate
在 fuchsia.camera3/stream.fidl 中定义
数据流生成帧的频率。值为 numerator
/ denominator
,采用每秒帧数 (Hz) 的单位。该表示法不一定是不可简化的分数。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
numerator |
uint32
|
分数分子。 |
无默认取景方式 |
denominator |
uint32
|
分数分母。此值不会为零。 |
无默认取景方式 |
StreamProperties
在 fuchsia.camera3/stream.fidl 中定义
描述给定数据流的属性。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
image_format |
fuchsia.sysmem/ImageFormat_2
|
描述数据流使用的原生图片格式。 |
无默认取景方式 |
frame_rate |
FrameRate
|
描述数据流使用的帧速率。 |
无默认取景方式 |
supports_crop_region |
bool
|
指示流是否支持 SetCropRegion 方法。 |
无默认取景方式 |
枚举
屏幕方向:严格
类型:uint32
在 fuchsia.camera3/stream.fidl 中定义
描述给定数据流相对于其编码数据的预期方向。为清楚起见,每个枚举值的文档都随附手性“⮬”符号的方向,用于说明流编码数据的方向。
名称 | 值 | 说明 |
---|---|---|
UP |
1 |
⮬:内容的方向已经正确。 |
DOWN |
2 |
⮯:内容必须旋转 180 度才能正确显示。 |
LEFT |
3 |
⮫:内容必须向左(逆时针)旋转 90 度才能正确显示。 |
RIGHT |
4 |
⮨:内容必须向右(顺时针)旋转 90 度才能正确显示。 |
UP_FLIPPED |
5 |
⮭:内容必须水平翻转才能正确显示。 |
DOWN_FLIPPED |
6 |
⮮:内容必须水平翻转然后旋转 180 度才能正确显示。 |
LEFT_FLIPPED |
7 |
⮪:内容必须水平翻转然后向左(逆时针)旋转 90 度,才能正确显示。 |
RIGHT_FLIPPED |
8 |
⮩:内容必须水平翻转然后向右(顺时针)旋转 90 度,才能正确显示。 |
表
Configuration2
在 fuchsia.camera3/device.fidl 中定义
描述相机的独特配置。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
streams |
vector<StreamProperties2>[256]
|
关于配置中同时可用的数据流的说明。 |
FrameInfo2 资源
在 fuchsia.camera3/stream.fidl 中定义
关于给定帧的元数据。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
buffer_index |
uint32
|
标识用于此帧的缓冲区,作为最近协商的缓冲区集合的索引。 |
2 |
frame_counter |
uint64
|
一个单调递增的计数器,用于指示写入此数据流最近协商的缓冲区集合的帧数。客户端可以使用此方法检测丢帧,或使用关联流的帧速率生成标称时间戳。 |
3 |
timestamp |
zx/Time
|
系统单调时钟的值,在硬件完成缓冲区填充时测量。 |
4 |
capture_timestamp |
zx/Time
|
系统单调时钟的值,在硬件完成对用于派生此缓冲区内容的原始缓冲区填充时进行测量。 |
5 |
release_fence |
handle<eventpair>
|
从缓冲区读取数据后,客户端必须关闭此程序。 |
StreamProperties2
在 fuchsia.camera3/stream.fidl 中定义
描述给定数据流的属性。
序数 | 字段 | 类型 | 说明 |
---|---|---|---|
1 |
image_format |
fuchsia.sysmem/ImageFormat_2
|
描述数据流使用的原生图片格式。 |
2 |
frame_rate |
FrameRate
|
描述数据流使用的帧速率。 |
3 |
supports_crop_region |
bool
|
指示流是否支持 SetCropRegion 方法。 |
4 |
supported_resolutions |
vector<fuchsia.math/Size>[256]
|
描述数据流支持的精确分辨率,即 SetResolution 导致相同值的 WatchResolution 回调的分辨率。如果为空,则表示流支持任意分辨率。如果为非空,该列表会至少包含一个反映 |image_format| 指定的原生分辨率的元素。 |
联合
WatchDevicesEvent 严格
在 fuchsia.camera3/device_watcher.fidl 中定义
序数 | 变体 | 类型 | 说明 |
---|---|---|---|
1 |
existing |
DeviceId
|
表示具有指定 ID 的现有摄像头仍然可用。 |
2 |
added |
DeviceId
|
表示具有指定 ID 的新相机现已可用。 |
3 |
removed |
DeviceId
|
表示具有指定 ID 的现有摄像头已无法使用。 |
常量
名称 | 值 | 类型 | 说明 |
---|---|---|---|
MAX_CONFIGURATIONS_PER_CAMERA |
256
|
uint32 |
|
MAX_IDENTIFIER_LENGTH |
256
|
uint32 |
|
MAX_RESOLUTIONS_PER_STREAM |
256
|
uint32 |
|
MAX_STREAMS_PER_CONFIGURATION |
256
|
uint32 |
|
MAX_WATCH_DEVICES_EVENTS |
256
|
uint32 |
别名
名称 | 值 | 说明 |
---|---|---|
DeviceId |
uint64 |