Fuchsia.hardware.audio

添加次数:7

协议

编解码器

fuchsia.hardware.audio/codec.fidl 中定义

如需简要了解,请参阅 [音频编解码器接口]

弃用

不再受支持,请改用具有一个 DAI 且没有环形缓冲区的音频复合材料,请参阅音频驱动程序架构

已弃用:20

GetDaiFormats

检索编解码器支持的 DAI 格式(如果当时不可用),编解码器可能会回复错误状态且控制器可能会稍后重试。检索多个 DaiSupportedFormats 允许支持对 DaiSupportedFormats 中的参数进行独占组合。

请求

<EMPTY>

响应

名称类型
payload Codec_GetDaiFormats_Result

GetHealthState

检索顶级运行状况。驾驶员没有及时回应可以表明驾驶员健康状况不佳。

请求

<EMPTY>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

添加数量:20

请求

<EMPTY>

响应

名称类型
properties CodecProperties

IsBridgeable

返回编解码器是否可桥接。

弃用

不再受支持,无法再在运行时更改桥接配置。驱动程序仍可配置为在启动时运行或不以桥接模式运行。

已废弃:17

请求

<EMPTY>

响应

名称类型
supports_bridged_mode bool

重置

重置编解码器。重置完成后,Reset 会返回。如果驱动程序无法成功重置编解码器,则会关闭编解码器协议通道,在这种情况下,客户端可能会获取新的编解码器协议通道并重试。

请求

<EMPTY>

响应

<EMPTY>

SetBridgedMode

设置编解码器的桥接模式。此方法是必需的,但只有在编解码器对 IsBridgeable 的回复中指明支持桥接模式时,它才需要执行相应操作。

弃用

不再受支持,无法再在运行时更改桥接配置。驱动程序仍可配置为在启动时运行或不以桥接模式运行。

已废弃:17

请求

名称类型
enable_bridged_mode bool

SetDaiFormat

设置要在控制器与编解码器之间的接口中使用的 DAI 格式。如果在请求时不受支持(例如对于可移除硬件),则返回错误。

请求

名称类型
format DaiFormat

响应

名称类型
payload Codec_SetDaiFormat_Result

SignalProcessingConnect

连接到 SignalProcessing 协议。 可以支持多个连接,如果不支持新的连接请求(即,已创建最大连接数(例如一个),则 protocol 通道(而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_ALREADY_BOUND epitaph 的形式关闭。如果完全不支持信号处理,则 protocol 通道(同样,而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_NOT_SUPPORTED 音阶关闭。此方法命名为 SignalProcessingConnect(而不是 Connect),因为此协议旨在由系统组合而成,因此名称越详细,越便于区分,并且清晰度更高。

请求

名称类型
protocol server_end<fuchsia.hardware.audio.signalprocessing/SignalProcessing>

开始

启动/重启编解码器操作。 Start 会在将编解码器配置为启动操作完成时返回。此方法不会等待硬件实际开始播放/捕获内容(即不考虑 turn_on_delay 的影响),返回的 start_time 也不会反映任何此类延迟。start_time 表示驱动程序何时完成了将编解码器配置为启动的时间(在 CLOCK_MONOTONIC 时间轴中测量)。如果驱动程序无法成功启动编解码器,则会关闭编解码器协议通道,在这种情况下,客户端可能会获取新的编解码器协议通道并重试。

请求

<EMPTY>

响应

名称类型
start_time zx/Time

停止

停止编解码器操作。 将编解码器配置为停止时,Stop 会返回。此方法不会等待硬件实际停止播放/捕获(即不考虑 turn_off_delay 的影响),返回的 stop_time 也不会反映任何此类延迟。stop_time 指示驱动程序将编解码器配置为停止的时间(在 CLOCK_MONOTONIC 时间轴中测量)。如果驱动程序无法成功将编解码器配置为停止运行,则会关闭编解码器协议通道,在这种情况下,客户端可能会获取新的编解码器协议通道并重试。

请求

<EMPTY>

响应

名称类型
stop_time zx/Time

WatchPlugState

通过挂起 get 获取插头检测状态。驱动程序将回复客户端发送的第一个 WatchPlugState。在插头状态从最近报告的状态发生变化之前,驱动程序不会响应后续的客户端 WatchPlugState 调用。

请求

<EMPTY>

响应

名称类型
plug_state PlugState

CodecConnector

fuchsia.hardware.audio/codec_connector.fidl 中定义

如需简要了解编解码器协议,请参阅编解码器接口

弃用

不再受支持,请改用具有一个 DAI 且没有环形缓冲区的音频复合材料,请参阅音频驱动程序架构

已弃用:20

连接

连接到编解码器协议服务器。 这种指向编解码器协议的间接使我们能够支持独立的编解码器客户端连接。

请求

名称类型
codec_protocol server_end<Codec>

复合材料

fuchsia.hardware.audio/composite.fidl 中定义

Composite 接口是音频驱动程序公开的 FIDL 协议。Composite 接口是通用接口,允许配置各种音频硬件类型,包括 StreamConfigDaiCodec FIDL 接口支持的类型。Composite 接口更为通用,并在音频子系统内提供更灵活的路由。另请参阅音频驱动程序复合材料

添加数量:12

CreateRingBuffer

客户端会发送 CreateRingBuffer,以便为 processing_element_id 指定的 RING_BUFFER ENDPOINT 类型处理元素选择环形缓冲区格式。格式取决于驱动程序在 GetRingBufferFormats 中提供的信息、客户端支持的内容以及任何其他要求。 返回的 ring_buffer 通道用于访问和控制驱动程序提供的音频缓冲区。如果 processing_element_idGetElements 返回的 ID 不匹配,则返回 INVALID_ARGS。如果 ID 表示的元素的 ElementType 不是 EndpointType RING_BUFFER 下的 ENDPOINT,则返回 WRONG_TYPE

请求

名称类型
processing_element_id uint64
format Format
ring_buffer server_end<RingBuffer>

响应

名称类型
payload Composite_CreateRingBuffer_Result

GetDaiFormats

GetElements 从 fuchsia.hardware.audio.signalprocessing 返回且该驱动程序所支持的拓扑中,检索 DAI_INTERCONNECT ENDPOINT 类型处理元素所支持的 DAI 格式。 如果 DAI 格式不可用,则返回 SHOULD_WAIT(客户端稍后可能会重试)。如果 processing_element_idGetElements 返回的 ID 不匹配,则返回 INVALID_ARGS。如果 ID 表示的元素的 ElementType 不是 EndpointType DAI_INTERCONNECTENDPOINT,则返回 WRONG_TYPE。检索多个 DaiSupportedFormats 支持支持 SupportedFormats 中参数的独占组合的情况。

请求

名称类型
processing_element_id uint64

响应

名称类型
payload Composite_GetDaiFormats_Result

GetHealthState

检索顶级运行状况。驾驶员没有及时回应可以表明驾驶员健康状况不佳。

请求

<EMPTY>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

请求

<EMPTY>

响应

名称类型
properties CompositeProperties

GetRingBufferFormats

GetElements 从 fuchsia.hardware.audio.signalprocessing 返回且该驱动程序所支持的拓扑中,检索 RING_BUFFER ENDPOINT 类型处理元素所支持的环形缓冲区格式。 如果当时没有环形缓冲区格式,则返回 SHOULD_WAIT,客户端可能会稍后重试。如果 processing_element_idGetElements 返回的 ID 不匹配,则返回 INVALID_ARGS。如果 ID 表示的元素的 ElementType 不是 EndpointType RING_BUFFERENDPOINT,则返回 WRONG_TYPE。检索多个 SupportedFormats 支持支持 SupportedFormats 中参数的独占组合的情况。

请求

名称类型
processing_element_id uint64

响应

名称类型
payload Composite_GetRingBufferFormats_Result

重置

重置硬件,包括所有 DAI 互连和信号处理。 因此,CreateRingBuffer 获取的所有频道都将关闭。

当硬件完全重置时,Reset 会返回。此时,客户端需要重新配置任何 DAI 互连、选择信号处理拓扑并重新配置所有处理元素,并重建所有环形缓冲区。

如果驱动程序无法成功重置硬件,则会返回一个错误,然后关闭协议通道。在这种情况下,客户端可能会获取新的协议通道并重试。

请求

<EMPTY>

响应

名称类型
payload Composite_Reset_Result

SetDaiFormat

客户端会发送 SetDaiFormat,以便为 processing_element_id 指定的 DAI_INTERCONNECT ENDPOINT 类型处理元素选择 DAI 格式。格式取决于驱动程序在 GetDaiFormats 中提供的信息、客户端支持的内容以及任何其他要求。 如果 processing_element_idGetElements 返回的 ID 不匹配,则返回 INVALID_ARGS。如果 ID 表示的元素的 ElementType 不是 EndpointType DAI_INTERCONNECT 下的 ENDPOINT,则返回 WRONG_TYPE

请求

名称类型
processing_element_id uint64
format DaiFormat

响应

名称类型
payload Composite_SetDaiFormat_Result

SignalProcessingConnect

连接到 SignalProcessing 协议。 可以支持多个连接,如果不支持新的连接请求(即,已创建最大连接数(例如一个),则 protocol 通道(而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_ALREADY_BOUND epitaph 的形式关闭。如果完全不支持信号处理,则 protocol 通道(同样,而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_NOT_SUPPORTED 音阶关闭。此方法命名为 SignalProcessingConnect(而不是 Connect),因为此协议旨在由系统组合而成,因此名称越详细,越便于区分,并且清晰度更高。

请求

名称类型
protocol server_end<fuchsia.hardware.audio.signalprocessing/SignalProcessing>

CompositeConnector

fuchsia.hardware.audio/composite_connector.fidl 中定义

如需了解概览,请参阅音频复合设备

添加数量:12

连接

连接到 Device 协议。 此方法允许组件在 devhost 的控制范围之外提供 FIDL。

请求

名称类型
composite_protocol server_end<Composite>

Dai 语

fuchsia.hardware.audio/dai.fidl 中定义

如需了解概览,请参阅数字音频接口

弃用

不再受支持,请改用具有一个 DAI 和一个环形缓冲区的音频复合材料,请参阅音频驱动程序架构

已弃用:20

CreateRingBuffer

客户端会发送 CreateRingBuffer,以便根据驱动程序在 GetDaiFormatsGetRingBufferFormats 中提供的信息、客户端支持的内容以及任何其他要求来选择 DAI 格式和环形缓冲区格式。ring_buffer 通道用于控制音频缓冲区,如果先前的环形缓冲区通道已建立且仍处于活跃状态,驱动程序必须关闭该(环形缓冲区)通道,并尽一切努力让进程中所有正在进行的流式传输操作安静下来。

请求

名称类型
dai_format DaiFormat
ring_buffer_format Format
ring_buffer server_end<RingBuffer>

GetDaiFormats

检索 DAI 支持的 DAI 格式(如果当时不可用),DAI 可能会回复错误状态且客户端可能稍后重试。检索多个 DaiSupportedFormats 支持支持 SupportedFormats 中参数的独占组合的情况。

请求

<EMPTY>

响应

名称类型
payload Dai_GetDaiFormats_Result

GetHealthState

检索顶级运行状况。驾驶员没有及时回应可以表明驾驶员健康状况不佳。

请求

<EMPTY>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

请求

<EMPTY>

响应

名称类型
properties DaiProperties

GetRingBufferFormats

检索 DAI 支持的环形缓冲区格式(如果当时不可用),DAI 可能会回复错误状态且客户端可能稍后重试。检索多个 SupportedFormats 支持支持 SupportedFormats 中参数的独占组合的情况。

请求

<EMPTY>

响应

名称类型
payload Dai_GetRingBufferFormats_Result

重置

重置 DAI 硬件。驱动程序可能会关闭通过 CreateRingBuffer 获取的 ring_buffer 通道,在这种情况下,客户端需要获取新的 ring_bufferReset 会在重置完成后返回。如果驱动程序无法成功重置硬件,则会关闭 DAI 协议通道;在这种情况下,客户端可能会获取新的 DAI 协议通道并重试。

请求

<EMPTY>

响应

<EMPTY>

SignalProcessingConnect

连接到 SignalProcessing 协议。 可以支持多个连接,如果不支持新的连接请求(即,已创建最大连接数(例如一个),则 protocol 通道(而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_ALREADY_BOUND epitaph 的形式关闭。如果完全不支持信号处理,则 protocol 通道(同样,而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_NOT_SUPPORTED 音阶关闭。此方法命名为 SignalProcessingConnect(而不是 Connect),因为此协议旨在由系统组合而成,因此名称越详细,越便于区分,并且清晰度更高。

请求

名称类型
protocol server_end<fuchsia.hardware.audio.signalprocessing/SignalProcessing>

DaiConnector

fuchsia.hardware.audio/dai_connector.fidl 中定义

如需简要了解 DAI 协议,请参阅数字音频接口

弃用

不再受支持,请改用具有一个 DAI 和一个环形缓冲区的音频复合材料,请参阅音频驱动程序架构

已弃用:20

连接

这将连接到 DAI 协议服务器。

请求

名称类型
dai_protocol server_end<Dai>

运行状况

fuchsia.hardware.audio/health.fidl 中定义

GetHealthState

检索顶级运行状况。驾驶员没有及时回应可以表明驾驶员健康状况不佳。

请求

<EMPTY>

响应

名称类型
state HealthState

RingBuffer

fuchsia.hardware.audio/ring_buffer.fidl 中定义

GetProperties

顶级静态属性的访问器。

请求

<EMPTY>

响应

名称类型
properties RingBufferProperties

GetVmo

请求用于在客户端和驱动程序之间移动批量音频数据的共享缓冲区。 客户端请求将 min_frames 作为其所需的部分环形缓冲区的大小。驱动程序返回 num_frames 中分配的环形缓冲区空间的实际大小。

num_frames 必须至少为 min_frames 加上 driver_transfer_bytes(以帧为单位),以便环形缓冲区内容可以进出,否则调用必须失败并显示 GetVmoError.INVALID_ARGS。

由于任何内部要求(例如对齐),驱动程序可能会将环形缓冲区空间增大到 min_frames 加上 driver_transfer_bytes(以帧为单位)。

客户端可以将返回的整个环形缓冲区视为可安全访问,但与当前位置紧邻的 driver_transfer_bytes 除外。如需了解详情,请参阅 RingBufferProperties 中的 driver_transfer_bytes 参数规范。

如果 clock_recovery_notifications_per_ring 为非零值,驱动程序将最多以 clock_recovery_notifications_per_ring 频率向 WatchClockRecoveryPositionInfo 客户端请求发送回复。这些通知旨在用于恢复时钟。

请求

名称类型
min_frames uint32
clock_recovery_notifications_per_ring uint32

响应

名称类型
payload RingBuffer_GetVmo_Result

SetActiveChannels

通过位掩码设置哪些通道为活动通道。 最低有效位对应于通道索引 0。 位掩码中未设置的通道(位为 0)处于非活动状态。非活动通道会向驱动程序表明,它可以关闭与非活动通道相关联的硬件。后续 SetActiveChannels 将非活跃频道设置为活跃状态时,可能会导致 turn_on_delay 实际上重新开始播放/捕获这些频道。通道总数是 Format 中的 number_of_channels(具体而言是在 PcmFormat 中),即此位掩码最多可设置 number_of_channels 位(最多 64 位)。停用一个、多个或所有通道不会对环形缓冲区执行 Stop 操作。SetActiveChannels 不会更改环形缓冲区有关 Start/Stop 的行为,具体而言,就是在位置。调用 Start 后,无论活跃通道有多少个,包括没有处于活跃状态的通道,环形缓冲区的位置都会提前(并视需要发送定位通知)。这意味着环形缓冲区中的格式不会更改。 默认情况下,所有渠道都处于活动状态。 如果驱动程序不支持停用频道,则必须返回 ZX_ERR_NOT_SUPPORTED。如果掩码不正确(即,使位数之外的通道用于给定 number_of_channels),则驱动程序必须返回 ZX_ERR_INVALID_ARGSset_time 值(位于 CLOCK_MONOTONIC 时间轴中)指示何时完成了将硬件配置为启用或停用频道的操作。set_time 不包含可能的 turn_on_delay,驱动程序不会延迟等待硬件实际开启的回复,而驱动程序会回复 set_time,指明硬件配置完成的时间。如果请求的通道配置已处于活动状态,则返回的 set_time 可以在调用 SetActiveChannels 之前,但必须在回复发送之前。如果使用相同的配置再次调用,回复必须包含与之前返回的相同 set_time 值。对于输入通道,驱动程序无需将非活动通道清零。如果在第一次调用完成之前第二次调用 SetActiveChannels,则必须关闭通道并返回 ZX_ERR_BAD_STATE 错误。

请求

名称类型
active_channels_bitmask uint64

响应

名称类型
payload RingBuffer_SetActiveChannels_Result

开始

启动环形缓冲区。start_time 值(在 CLOCK_MONOTONIC 时间轴中)指示位置开始移动的时间,即从环形缓冲区的开头开始,即驱动程序/硬件已经开始对环形缓冲区位置 0 执行读取或写入操作,具体取决于 driver_transfer_bytes 中所述的缓冲。

如果在 SetActiveChannels 之前调用 Start,则默认情况下所有通道都处于活动状态。如果在 GetVmo 之前调用 Start,则必须使用 ZX_ERR_BAD_STATE 关闭通道。如果在此 RingBuffer 已启动的情况下调用了 Start,或者如果在第一次调用完成之前第二次调用 Start,则必须关闭通道并返回 ZX_ERR_BAD_STATE 错误。

请求

<EMPTY>

响应

名称类型
start_time zx/Time

停止

停止环形缓冲区。收到此调用的响应后,在再次调用 Start 之前,不会再发送位置通知。如果在 GetVmo 之前调用 Stop,或者如果在第一次调用完成之前第二次调用 Stop,则必须使用 ZX_ERR_BAD_STATE 关闭通道。

请求

<EMPTY>

响应

<EMPTY>

WatchClockRecoveryPositionInfo

通过挂起 get 获取环形缓冲区当前位置。驱动程序必须响应客户端的第一个 WatchClockRecoveryPositionInfo 调用,但不会响应后续客户端调用,直到位置信息从最近提供给客户端的信息发生变化为止。驱动程序在回复 Start 命令之前不得响应 WatchClockRecoveryPositionInfo。在 Start 返回的 start_time 中,位置始终为 0。然后,测试将以速率、样本格式(和时钟域,如果设备与 CLOCK_MONOTONIC 不在同一时钟域内)指定的速率运行。如果 clock_recovery_notifications_per_ring 不为零,驱动程序将在回复时提供其估计位置,该位置用于最多以 clock_recovery_notifications_per_ring 频率恢复时钟。WatchClockRecoveryPositionInfo 只能在调用 GetVmo 之后调用,因此指定了 clock_recovery_notifications_per_ring。传递的时间戳必须为单调递增。如果此客户端已有待处理的 WatchClockRecoveryPositionInfo,则驱动程序将关闭协议通道并显示 ZX_ERR_BAD_STATE 错误。

请求

<EMPTY>

响应

名称类型
position_info RingBufferPositionInfo

WatchDelayInfo

通过挂机获取交通延误信息。驱动程序将立即回复客户端发送的第一个 WatchDelayInfo。在延迟信息从最近报告的内容发生变化之前,驱动程序不会响应后续的客户端 WatchDelayInfo 调用。如果在第一次调用完成之前第二次调用 WatchDelayInfo,则必须关闭通道并返回 ZX_ERR_BAD_STATE 错误。

添加了:HEAD

请求

<EMPTY>

响应

名称类型
delay_info DelayInfo

StreamConfig

fuchsia.hardware.audio/stream_config.fidl 中定义

如需简要了解,请参阅音频驱动程序流式传输接口

弃用

不再支持,请改用具有一个环形缓冲区的音频复合材料,请参阅音频驱动程序架构

已弃用:20

CreateRingBuffer

客户端会发送 CreateRingBuffer,以便根据驱动程序在 GetSupportedFormats 中提供的信息以及客户端支持的内容和任何其他要求来选择流格式。ring_buffer 通道用于控制音频缓冲区,如果先前的环形缓冲区通道已建立且仍处于活跃状态,驱动程序必须关闭该(环形缓冲区)通道,并尽一切努力让进程中所有正在进行的流式传输操作安静下来。

请求

名称类型
format Format
ring_buffer server_end<RingBuffer>

GetHealthState

检索顶级运行状况。驾驶员没有及时回应可以表明驾驶员健康状况不佳。

请求

<EMPTY>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

请求

<EMPTY>

响应

名称类型
properties StreamProperties

GetSupportedFormats

获取给定驱动程序支持的格式。如果驱动程序不支持的所有组合都不能用一个 SupportedFormats 来描述,驱动程序会在返回的矢量中返回多个 SupportedFormats。例如,如果一个 SupportedFormats 允许在 48KHz 下进行 32 位样本,并在 96KHz 下允许 16 位样本,但不允许在 96KHz 下进行 32 位样本,则驱动程序会回复 2 个 SupportedFormats:<<32bits>,<48KHz>> 和 <<16bits>,<96KHz>>。为简单起见,仅忽略此示例以外的采样率。如果驱动程序支持 48 或 96KHz 的 16 或 32 位样本,则驱动程序会回复 1 个 SupportedFormats:<<16bits,32bits>,<48KHz,96KHz>>。

请求

<EMPTY>

响应

名称类型
supported_formats vector<SupportedFormats>[64]

SetGain

客户端对增益状态的更新。

请求

名称类型
target_state GainState

SignalProcessingConnect

连接到 SignalProcessing 协议。 可以支持多个连接,如果不支持新的连接请求(即,已创建最大连接数(例如一个),则 protocol 通道(而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_ALREADY_BOUND epitaph 的形式关闭。如果完全不支持信号处理,则 protocol 通道(同样,而不是调用 SignalProcessingConnect 的通道)将以 ZX_ERR_NOT_SUPPORTED 音阶关闭。此方法命名为 SignalProcessingConnect(而不是 Connect),因为此协议旨在由系统组合而成,因此名称越详细,越便于区分,并且清晰度更高。

请求

名称类型
protocol server_end<fuchsia.hardware.audio.signalprocessing/SignalProcessing>

WatchGainState

通过挂起 get 获取增益状态。驱动程序将回复客户端发送的第一个 WatchGainState,并且此回复必须包含一个设置为 0dB 或更低的 gain_db。在增益状态从最近报告的状态发生变化之前,驱动程序不会响应后续的客户端 WatchGainState 调用。如果在第一次调用完成之前第二次调用 WatchGainState,协议通道必须关闭并返回错误 ZX_ERR_BAD_STATE

请求

<EMPTY>

响应

名称类型
gain_state GainState

WatchPlugState

通过挂起 get 获取插头检测状态。驱动程序将回复客户端发送的第一个 WatchPlugState。在插头状态从最近报告的状态发生变化之前,驱动程序不会响应后续的客户端 WatchPlugState 调用。如果在第一次调用完成之前第二次调用 WatchPlugState,协议通道必须关闭并返回错误 ZX_ERR_BAD_STATE

请求

<EMPTY>

响应

名称类型
plug_state PlugState

StreamConfigConnector

fuchsia.hardware.audio/stream_config_connector.fidl 中定义

如需简要了解,请参阅音频驱动程序流式传输接口

弃用

不再支持,请改用具有一个环形缓冲区的音频复合材料,请参阅音频驱动程序架构

已弃用:20

连接

连接到 StreamConfig 协议。 此方法允许组件在 devhost 的控制范围之外提供 FIDL。

请求

名称类型
protocol server_end<StreamConfig>

结构

Codec_GetDaiFormats_Response

fuchsia.hardware.audio/codec.fidl 中定义

野战类型说明默认
formats vector<DaiSupportedFormats>[64] 无默认取景方式

Codec_SetDaiFormat_Response

fuchsia.hardware.audio/codec.fidl 中定义

野战类型说明默认
state CodecFormatInfo 无默认取景方式

Composite_CreateRingBuffer_Response

fuchsia.hardware.audio/composite.fidl 中定义

<EMPTY>

Composite_GetDaiFormats_Response

fuchsia.hardware.audio/composite.fidl 中定义

野战类型说明默认
dai_formats vector<DaiSupportedFormats>[64] 无默认取景方式

Composite_GetRingBufferFormats_Response

fuchsia.hardware.audio/composite.fidl 中定义

野战类型说明默认
ring_buffer_formats vector<SupportedFormats>[64] 无默认取景方式

Composite_Reset_Response

fuchsia.hardware.audio/composite.fidl 中定义

<EMPTY>

Composite_SetDaiFormat_Response

fuchsia.hardware.audio/composite.fidl 中定义

<EMPTY>

DaiFormat

fuchsia.hardware.audio/dai_format.fidl 中定义

DAI 格式。帧由 number_of_channels 样本组成,样本在 bits_per_slot 中有 bits_per_sample 位的数据,这些数据位按 frame_format 排列。如需了解详情,请参阅数字音频接口

野战类型说明默认
number_of_channels uint32

声道数。

无默认取景方式
channels_to_use_bitmask uint64

通过位掩码设置哪些通道为活动通道。 最低有效位对应于通道索引 0。

无默认取景方式
sample_format DaiSampleFormat

所有示例的示例格式。

无默认取景方式
frame_format DaiFrameFormat

所有样本的帧格式。

无默认取景方式
frame_rate uint32

所有样本的帧速率。

无默认取景方式
bits_per_slot uint8

所有通道的每个槽位的位数。

无默认取景方式
bits_per_sample uint8

所有样本的每个样本的位数。必须小于每个通道的位数,才能适合样本。

无默认取景方式

DaiFrameFormatCustom

fuchsia.hardware.audio/dai_format.fidl 中定义

自定义框架格式。

野战类型说明默认
left_justified bool

说明槽中样本的理由。

无默认取景方式
sclk_on_raising bool

升降 sclk 时数据样本和帧同步输出的时钟。 如果为 true,则 sclk 会在数据和帧同步的提升边缘上提升,即数据将在 sclk 的下降边缘(sclk 周期的中间)被采样。因此,如果为 false,则将在 sclk 的上升边缘对数据进行采样。

无默认取景方式
frame_sync_sclks_offset int8

帧同步更改开始与音频样本之间的 Sclk 数。 例如,将 I2S 设为 1,将立体声左对齐设为 0。

无默认取景方式
frame_sync_size uint8

帧内帧同步的 SCL 数量较高。 例如,对于 32 位槽位设置为 32 的 I2S,TDM 通常设置为 1。

无默认取景方式

DaiSupportedFormats

fuchsia.hardware.audio/dai_format.fidl 中定义

DAI 支持的格式。帧由 number_of_channels 样本组成,这些样本在 bits_per_slot 位内包含 bits_per_sample 位数据,以 frame_formats 形式排列。支持每个矢量中列出的所有值。如果驱动程序不支持的所有组合都不能用一个 DaiSupportedFormats 来描述,则 GetDaiSupportedFormats 会在返回的矢量中返回多个 DaiSupportedFormats。如需了解详情,请参阅数字音频接口

野战类型说明默认
number_of_channels vector<uint32>[64]

支持的渠道数量。

无默认取景方式
sample_formats vector<DaiSampleFormat>[4]

支持的示例格式。

无默认取景方式
frame_formats vector<DaiFrameFormat>[64]

支持的帧格式。

无默认取景方式
frame_rates vector<uint32>[64]

支持费率。值必须按升序列出。

无默认取景方式
bits_per_slot vector<uint8>[8]

每个插槽支持的位数。值必须按升序列出。

无默认取景方式
bits_per_sample vector<uint8>[8]

支持每个样本的比特数。值必须按升序列出。

无默认取景方式

Dai_GetDaiFormats_Response

fuchsia.hardware.audio/dai.fidl 中定义

野战类型说明默认
dai_formats vector<DaiSupportedFormats>[64] 无默认取景方式

Dai_GetRingBufferFormats_Response

fuchsia.hardware.audio/dai.fidl 中定义

野战类型说明默认
ring_buffer_formats vector<SupportedFormats>[64] 无默认取景方式

PcmFormat

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

支持未压缩 PCM 音频的格式。帧由 number_of_channels 样本组成,这些样本在 bytes_per_sample 中具有 valid_bits_per_sample 位的最高有效(左对齐)数据。字节。如需了解详情,请参阅音频驱动程序流式传输接口

野战类型说明默认
number_of_channels uint8

声道数。

无默认取景方式
sample_format SampleFormat

所有示例的格式。

无默认取景方式
bytes_per_sample uint8

为容纳等于或大于 valid_bits_per_sample 中的有效样本大小的样本分配的字节。

无默认取景方式
valid_bits_per_sample uint8

样本中的有效位数必须等于或小于 bytes_per_sample 中的位数。如果较小的位,则左对齐,并且接收器必须忽略任何其他位。

无默认取景方式
frame_rate uint32

所有样本的帧速率。

无默认取景方式

RingBufferPositionInfo

fuchsia.hardware.audio/ring_buffer.fidl 中定义

野战类型说明默认
timestamp zx/Time

驱动程序对播放/捕获指针到达 position 指示位置的时间(在 CLOCK_MONOTONIC 时间轴中)的最佳估计。不应将 turn_on_delay 的影响并入“时间戳”中。不应纳入 DelayInfo 中指明的延迟。

无默认取景方式
position uint32

驱动程序估计的 timestamp 时间在环形缓冲区中的播放/捕获指针位置(以字节为单位)。

无默认取景方式

RingBuffer_GetVmo_Response 资源

fuchsia.hardware.audio/ring_buffer.fidl 中定义

野战类型说明默认
num_frames uint32 无默认取景方式
ring_buffer handle<vmo> 无默认取景方式

RingBuffer_SetActiveChannels_Response

fuchsia.hardware.audio/ring_buffer.fidl 中定义

野战类型说明默认
set_time zx/Time 无默认取景方式

枚举

DaiFrameFormatStandard

类型:uint8

fuchsia.hardware.audio/dai_format.fidl 中定义

标准帧格式。

名称说明
1

没有样本中的帧格式,而不像 PDM 那样执行帧同步。

2

I2S 规范中指定的格式(左对齐,2 个通道,每个通道 32 位,左通道的帧同步保持低电平,右通道的帧同步保持低电平,在帧同步发生更改后在 sclk 的下降边缘停止一个时钟周期后,数据开始一个时钟周期)。

3

左对齐,2 个通道。数据从帧同步变化(从低到高)开始,在 sclk 的下降边缘触发。对于第一个通道的位每通道位,帧同步必须保持高电平;对于第二个通道,帧同步必须保持低位。

4

右对齐,2 个通道。对于第一个通道的位每通道位,帧同步必须保持高电平;对于第二个通道,帧同步必须保持低位。

5

左对齐,通道数不同,在帧同步时,数据从低到高在 sclk 的上升边缘时钟输出。帧同步必须在正好 1 个时钟周期内保持高状态。

6

左对齐,可变通道数,在帧同步从低到高变为时钟同步后,数据在 sclk 的上升边缘开始一个时钟周期开始一个时钟周期。帧同步必须保持高电平状态并正好持续 1 个时钟周期。

添加数量:10
7

左对齐,可变通道数,在帧同步从低到高变为时钟周期(在 sclk 的上升边缘)后,数据在两个时钟周期开始同步。帧同步必须保持高电平状态并正好持续 1 个时钟周期。

添加数量:10

DaiSampleFormat 严格

类型:uint8

fuchsia.hardware.audio/dai_format.fidl 中定义

名称说明
1

脉冲密度调制样本。

2

主机字节序处的有符号整数线性脉冲编码调制样本。

3

主机字节顺序处的无符号整数线性脉冲编码调制样本。

4

浮点样本,根据 IEEE-754 标准编码。

DeviceType 灵活

类型:uint32

fuchsia.hardware.audio/device_type.fidl 中定义

添加数量:14

名称说明
1

设备支持 fuchsia.hardware.audio/StreamConfig 协议。

2

设备支持 fuchsia.hardware.audio/Dai 协议。

3

设备支持 fuchsia.hardware.audio/Codec 协议。

4

设备支持 fuchsia.hardware.audio/Composite 协议。

DriverError 灵活

类型:uint32

fuchsia.hardware.audio/common.fidl 中定义

添加数量:12

名称说明
1

驱动程序在执行操作时遇到其他未指定的错误。

2

该操作未实现、不受支持或未启用。

3

参数无效。

4

操作主题的类型有误,无法执行操作。

5

操作目前无法执行,但如果调用方等待满足前提条件,操作可能会成功。

GetVmoError 严格

类型:uint32

fuchsia.hardware.audio/ring_buffer.fidl 中定义

名称说明
1

环形缓冲区设置失败,因为参数无效(例如 min_frames 过大)。

2

由于内部错误,环形缓冲区设置失败。

PlaDetectCapabilities 严格

类型:uint32

fuchsia.hardware.audio/plug.fidl 中定义

名称说明
0

驱动程序为固定连接线(始终会接通电源)。

1

驱动程序能够异步通知插头状态变化。

SampleFormat 严格

类型:uint8

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

名称说明
1

主机字节序处的有符号整数线性脉冲编码调制样本。

2

主机字节顺序处的无符号整数线性脉冲编码调制样本。

3

浮点样本,根据 IEEE-754 标准编码。

ChannelAttributes

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

整个通道配置中的单个通道的规范。

序数野战类型说明
min_frequency uint32

保证由此通道发射(或捕获)此通道的最低频率(以 Hz 为单位)。如果未添加 min_frequency,系统会假定此通道涵盖此设备的整个低频范围。

可选。

max_frequency uint32

保证由此通道发射(或捕获到)此通道的最大频率(以 Hz 为单位)。如果未添加 max_frequency,系统会假定此通道涵盖此设备的整个高频范围。

可选。

ChannelSet

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

表示通道配置的规范。

序数野战类型说明
attributes vector<ChannelAttributes>[64]

描述此渠道集的属性。 此矢量的大小定义了此 ChannelSet 支持的通道数量。attributes 矢量的每个元素都定义了单个通道的属性。

必选。

CodecFormatInfo

fuchsia.hardware.audio/codec.fidl 中定义

编解码器格式信息。

序数野战类型说明
external_delay zx/Duration

驱动程序对选定格式的流水线中存在的外部延迟的最佳估算值(以纳秒为单位)。在多个实体(例如设备)间精确同步呈现内容时,应考虑外部延迟。如果未提供,则 external_delay 未知。

可选。

turn_on_delay zx/Duration

驱动程序对发出 Start 命令后,硬件实际开始播放/捕获音频所需的时间(以纳秒为单位)的最佳估算值。硬件可能需要一段时间才能进入完全运行模式,例如当电源状态发生变化时。如果无法接受播放或捕获初始音频样本,则必须将这种延迟考虑在内。如果未提供,则 turn_on_delay 未知。

可选。

turn_off_delay zx/Duration

驱动程序对发出 Stop 命令后硬件实际停止播放/捕获所需的时间(以纳秒为单位)的最佳估算值。硬件可能需要一段时间才能进入完全停止模式,例如电源状态发生变化时。如果系统不接受在“停止”命令之后播放/捕获样本,则必须考虑到这种延迟。 如果不添加此属性,则关闭延迟时间未知。

可选。

CodecProperties

fuchsia.hardware.audio/codec.fidl 中定义

添加数量:20

序数野战类型说明
is_input bool

驱动程序类型为输入 (true) 或输出 (false)。如果未包含,驱动程序可用于输入和输出。

可选。

manufacturer string[256]

制造商名称的界面字符串。如果您未添加该属性,则表示制造商未指定。

可选。

product string[256]

商品名称的界面字符串。如果未指定,则未指定产品名称。

可选。

unique_id uint8[16]

编解码器的唯一标识符。 如果未添加此字段,则编解码器的唯一 ID 不存在。

可选。

plug_detect_capabilities PlugDetectCapabilities

插头检测功能。

必选。

CompositeProperties

fuchsia.hardware.audio/composite.fidl 中定义

添加数量:12

序数野战类型说明
manufacturer string[256]

制造商名称的界面字符串。如果未设置,则制造商未知。

可选。

product string[256]

商品名称的界面字符串。如果未设置,则产品名称未知。

可选。

unique_id uint8[16]

唯一标识符。如果未包含此字段,则设备没有唯一 ID。 为实现蓝牙技术的驱动程序预留了以 0x42、0x54...(或 ASCII 中为 BT)开头的 unique_id 数组。系统会预留以 0x55、0x53、0x42...(在 ASCII 中为 USB)开头的 unique_id 数组,以供实现 USB 技术的驱动程序使用。请注意,即使上述值映射到可读的 ASCII 字符,数组值也可以跨越整个 uint8 范围 (0-255)。

可选。

clock_domain ClockDomain

运行此硬件的时钟域的标识符。如果两个硬件设备具有相同的时钟域,则它们的时钟频率相同且完全同步。虽然这两个时钟具有相同的速率,但时钟位置之间可能会存在任意(但固定)的量的偏差。时钟域通常来自系统级实体,例如平台总线或全局时钟树。

有两个特殊值:

  • CLOCK_DOMAIN_MONOTONIC 表示硬件的运行频率与系统单调时钟相同。

  • CLOCK_DOMAIN_EXTERNAL 表示硬件以未知速率运行,并且不与任何已知时钟同步,即使与 CLOCK_DOMAIN_EXTERNAL 网域中的其他时钟同步也不同步。

如果网域不是 CLOCK_DOMAIN_MONOTONIC,客户端必须使用位置通知更新来恢复硬件的时钟。

必选。

DaiProperties

fuchsia.hardware.audio/dai.fidl 中定义

序数野战类型说明
is_input bool

驱动程序类型为输入 (true) 或输出 (false)

必选。

manufacturer string[256]

制造商名称的界面字符串。如果您未添加该属性,则表示制造商未指定。

可选。

product_name string[256]

商品名称的界面字符串。如果未指定,则未指定产品名称。

可选。

unique_id uint8[16]

驱动程序的唯一标识符。如果未包含此字段,则没有驱动程序的唯一 ID。

可选。

添加数量:20
clock_domain ClockDomain

运行此硬件的时钟域的标识符。如果两个硬件设备具有相同的时钟域,则它们的时钟频率相同且完全同步。虽然这两个时钟具有相同的速率,但时钟位置之间可能会存在任意(但固定)的量的偏差。时钟域通常来自系统级实体,例如平台总线或全局时钟树。

有两个特殊值:

  • CLOCK_DOMAIN_MONOTONIC 表示硬件的运行频率与系统单调时钟相同。

  • CLOCK_DOMAIN_EXTERNAL 表示硬件以未知速率运行,并且不与任何已知时钟同步,即使与 CLOCK_DOMAIN_EXTERNAL 网域中的其他时钟同步也不同步。

如果网域不是 CLOCK_DOMAIN_MONOTONIC,客户端必须使用位置通知更新来恢复硬件的时钟。

必选。

添加数量:20

DelayInfo

fuchsia.hardware.audio/ring_buffer.fidl 中定义

延迟驱动程序返回的信息。

添加了:HEAD

序数野战类型说明
internal_delay zx/Duration

驱动程序对所提取硬件内部延迟的最佳估算值(针对所选格式)。

“内部”是指硬件互连 (DAI) 与环形缓冲区(例如 SoC 音频子系统)之间的硬件,而“外部”是指任何硬件互连 (DAI) 背面的硬件(例如硬件编解码器)。

对于播放期间的给定帧,这是指驱动程序/硬件将其从环形缓冲区复制后、退出任何硬件互连之前的任何延迟。对于录制期间的给定帧,这是指该帧进入硬件互连后到驱动程序/硬件将其复制到环形缓冲区之前的任何延迟。

在确定最短准备时间(播放期间)和最短拍摄延迟时间(拍摄期间)的要求时,必须考虑 internal_delay

此延迟不得包含由将数据复制到环形缓冲区或从中复制数据所需的临时缓冲所添加的固有延迟(包含在 RingBufferProperties 字段 driver_transfer_bytes 中)。

必选。

external_delay zx/Duration

驱动程序在所提取硬件外部的延迟最优估算值(针对所选格式)。

“外部”是指任何硬件互连 (DAI) 背面的硬件(例如硬件编解码器),而“内部”是指硬件互连 (DAI) 和环形缓冲区(例如 SoC 音频子系统)之间的硬件。

在确定最短准备时间(播放期间)和最短拍摄延迟时间(拍摄期间)的要求时,必须考虑 external_delay

如果不包含,则 external_delay 为未知。如果未知,客户端可能会按它选择的方式处理它(将其视为零个或很大的数字,自动检测它,等等)。

internal_delay 一样,此延迟不得包含由将数据复制进环形缓冲区或移出环形缓冲区所需的临时缓冲而添加的固有延迟,该延迟包含在 RingBufferProperties 字段 driver_transfer_bytes 中。

可选。

格式

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

序数野战类型说明
pcm_format PcmFormat

支持未压缩 PCM 样本的格式。

必选。

GainState

fuchsia.hardware.audio/stream_config.fidl 中定义

获取客户端请求或驾驶员返回的状态。

序数野战类型说明
muted bool

当前静音状态。如果未添加该属性,则该状态会被取消静音。

可选。

agc_enabled bool

当前自动增益控制 (AGC) 状态。如果未添加,AGC 会被停用。

可选。

gain_db float32

当前增益(以分贝为单位)。

必选。

HealthState

fuchsia.hardware.audio/health.fidl 中定义

序数野战类型说明
healthy bool

驱动程序当前健康状况良好。 如果未添加此字段,则不会提供健康信息。 这样一来,驱动程序便可以在没有足够的功能或资源来自行恢复时(例如,无法通过 GPIO 关闭硬件或控制电源子系统),发出其运行状况信号。

可选。

PcmSupportedFormats

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

支持未压缩 PCM 音频的格式。每一帧由连续存储的一个或多个 (number_of_channels) 个样本组成。在为每个样本分配的 bytes_per_sample 内,valid_bits_per_sample 位数据存储在最高有效(左对齐)部分。支持每个矢量中列出的所有值。如果驱动程序不支持的所有组合都不能用一个 SupportedFormatsPcmSupportedFormats 来描述,则 GetSupportedFormats 会在返回的矢量中返回多个 SupportedFormats。如需了解详情,请参阅音频驱动程序流式传输接口

序数野战类型说明
channel_sets vector<ChannelSet>[64]

支持的可能的 ChannelSets 向量。 ChannelSet 指定通道配置(包括通道数)以及多个可选属性。每个唯一身份频道数只允许有一个 ChannelSet。因此,channel_sets 中任何两个条目都不能包含相同长度的 attributes 向量。

必选。

sample_formats vector<SampleFormat>[3]

支持的可能 SampleFormat 的矢量。

必选。

bytes_per_sample vector<uint8>[8]

为每个样本分配的可能字节数的矢量。值必须按升序列出。valid_bits_per_sample 中列出的所有值必须至少为最大的 bytes_per_sample 值。

必选。

valid_bits_per_sample vector<uint8>[8]

bytes_per_sample 定义的示例容器内包含有效数据的可能位数的矢量。值必须按升序列出。列出的所有值都必须适合最大的 bytes_per_sample 值。在采样容器中,有效数据位必须是最高有效位(左对齐),并且所有额外的位都将被忽略。

必选。

frame_rates vector<uint32>[64]

支持的可能帧速率矢量。值必须按升序列出。

必选。

PlugState

fuchsia.hardware.audio/plug.fidl 中定义

驱动程序返回的插头状态。 如果驾驶员报告的 plug_detect_capabilities 等于 HARDWIRED,则驾驶员应仅在第一次被调用时响应 WatchPlugState,并将 plugged 设置为 true,将 plug_state_time 设置为时间“0”。

序数野战类型说明
plugged bool

驱动程序目前已插入。必需

plug_state_time zx/Time

为在此结构体其余字段中提供的信息设置时间戳。必选。

RingBufferProperties

fuchsia.hardware.audio/ring_buffer.fidl 中定义

环形缓冲区的属性。创建环形缓冲区后,这些值不会更改。

序数野战类型说明
needs_cache_flush_or_invalidate bool

如果设置为 true,则表示环形缓冲区在不同的缓存相干域中运行,因此客户端必须确保其数据写入始终刷新到主内存(播放期间),或者其环形缓冲区视图必须在任何读取操作(捕获期间)之前失效。这是因为 CPU 外部的硬件可能会绕过 CPU 读取/写入主内存。

如果设置为 false,则表示环形缓冲区在与 CPU 相同的缓存一致性域中运行,因此驱动程序无需刷新/使环形缓冲区失效。 请注意,在这种情况下,驱动程序和客户端仍必须同步其数据访问,例如,在写入后读取和释放栅栏,之前插入适当的获取栅栏。

必选。

turn_on_delay zx/Duration

驱动程序对在通道被 SetActiveChannels 激活后硬件发出(播放期间)或接受(拍摄期间)帧所需的时间做出的最佳估计。驱动程序估计,在 SetActiveChannels(channel)->(set_time) 启用某个通道后,其数据将在大约 set_time + turn_on_delay 时继续流动。硬件可能需要一段时间才能完全正常运行(例如,由于电源状态发生变化,或蓝牙驱动程序的多个硬件实体之间的通信延迟)。如果不可在此时间间隔内丢弃实际音频帧而改为播放/捕获无声音频,则客户端必须考虑这种延迟。 如果不包含,则 turn_on_delay 为未知。

可选。

driver_transfer_bytes uint32

使用或生成环形缓冲区内容时驱动程序/硬件使用的临时缓冲区的大小(以字节为单位)。

环形缓冲区内容必须通过临时缓冲区和环形缓冲区之间的数据传输,以 CreateRingBuffer 命令指定的速率生成和使用。对于播放,驱动程序在大小为 driver_transfer_bytes 的传输中使用音频帧。为进行捕获,驱动程序在大小为 driver_transfer_bytes 的传输中生成音频帧。在这两种情况下,在读取或提交到环形缓冲区之前,这些帧必须累积。

这些数据传输意味着,环形缓冲区中始终存在对客户端来说不安全的部分写入/读取。这个不安全的缓冲区区域在一侧由当前位置“P”定义,在另一侧由“安全指针”位置“S”定义。当环形缓冲区启动后,这两个指针便开始移动。“P”开始从 Startstart_time 的位置 0 开始移动。届时,客户端不得读取或写入这些指针之间的区域。下图将这些指针标注为“P”和“S”。

在播放期间,客户端必须在进行硬件传输之前写入数据。在捕获期间,客户端只能在硬件传输之后读取捕获的数据。因此,在播放期间,“S”始终在“P”之前,而在拍摄期间,“S”始终在“P”之后。

播放

在启动环形缓冲区之前,客户端可以安全地写入任何环形缓冲区位置。建议它们至少写入 driver_transfer_bytes 的初始音频,因为它们必须始终至少比驱动程序/硬件读取的位置提前足够远,并且当达到 Start 时,硬件可能会立即消耗环形缓冲区中的这么多数据。否则,客户端依赖 VMO 的清零内容作为驱动程序/硬件读取的初始音频。

                                      Ring Buffer
 +-------------------------+-------------------------------------------------------------+
 |<---                                 safe to write                                 --->|
 |             (to pre-populate the ring buffer before starting the hardware)            |
 +-------------------------+-------------------------------------------------------------+
 0=P                       S                                                             0

启动环形缓冲区后,客户端在“P”和“S”之间向环形缓冲区写入数据是不安全的,因为这表示数据已在使用(可能已被消耗)。客户端可以安全地写入环形缓冲区的其余部分(介于“S”和“0/P”之间)。

                                      Ring Buffer
 +-------------------------+-------------------------------------------------------------+
 |<--- unsafe to write --->|<---                    safe to write                    --->|
 |< driver_transfer_bytes >|           (empty unless prewritten by the client)           |
 +-------------------------+-------------------------------------------------------------+
 0=P                       S                                                             0

随着时间的推移,驱动程序/硬件会以 CreateRingBuffer 中指定的速率读取数据块(大小不超过 driver_transfer_bytes 块)。位置/安全指针以相同的频率向右移动,但要平稳地移动。因此,“不安全客户端写入”区域会逐步在环形缓冲区中移动,同时保持大小等于 driver_transfer_bytes 的恒定大小。因此,经过一段时间后,我们得到:

                                      Ring Buffer
 +------------+-------------------------+------------------------------------------------+
 |<-- safe -->|<--- unsafe to write --->|<--               safe to write              -->|
 |  to write  |< driver_transfer_bytes >|       (not yet consumed by the hardware)       |
 +------------+-------------------------+------------------------------------------------+
 0            P                         S                                                0

之后,“S”先于“P”封装环形缓冲区。请注意,从 0 到“S”的区域,加上从“P”到环形缓冲区末尾的区域,相加等于 driver_transfer_bytes

                                      Ring Buffer
 +---------------+------------------------------------------------------------+----------+
 |<--- unsafe -->|<---                   safe to write                    --->|<-unsafe->|
 |< driver_transf|                                                            |er_bytes >|
 +---------------+------------------------------------------------------------+----------+
 0               S                                                            P          0

在稳定状态下,指针“P”和“S”之外的任何区域都可以安全写入:

                                      Ring Buffer
 +--------------------------------+-------------------------+----------------------------+
 [<--       safe to write      -->|<--- unsafe to write --->|<--     safe to write    -->|
 |  (prior data already consumed) |< driver_transfer_bytes >|                            |
 +--------------------------------+-------------------------+----------------------------+
 0                                P                         S                            0

录制

记录时,只有客户端可以安全地读取驱动程序/硬件未同时写入的环形缓冲区中的那部分内容。在捕获开始前,它可以读取整个环缓冲区,但驱动程序尚未写入任何内容供客户端读取。这是客户端启动环形缓冲区时的环形缓冲区:

                                      Ring Buffer
 +---------------------------------------------------------------------------------------+
 [<---                     empty (not yet written by the hardware)                    -->|
 +---------------------------------------------------------------------------------------+
0=S=P                                                                                    0

捕获开始后,驱动程序/硬件会获取帧,最终从“0”开始将其第一次数据传输到环形缓冲区。这些传输的大小未知,但最大可达 driver_transfer_bytes;它们以 CreateRingBuffer 中指定的速率进行。在驱动程序/硬件将至少 driver_transfer_bytes 写入环形缓冲区之前,客户端还无法安全地读取任何新捕获的帧:

                                      Ring Buffer
 +--------------+------------------------------------------------------------------------+
 [<-- unsafe -->|<--                           safe to read                           -->|
 |< driver_transfer_bytes >|     (but empty, not yet written by the hardware)            |
 +--------------+------------------------------------------------------------------------+
0=S             P                                                                        0

驱动程序/硬件将至少 driver_transfer_bytes 的数据写入环形缓冲区后,“S”开始以与“P”相同的速率平滑向前移动(由环形缓冲区的速率和样本格式决定)。客户端可以安全地读取“0”和“S”之间的区域中帧。客户端读取“S”和“P”之间的数据不安全,因为这是驱动程序/硬件同时写入的位置。该区域在环形缓冲区中逐渐扩大,并保持 driver_transfer_bytes 的恒定大小。一段时间后,结果如下:

                                      Ring Buffer
 +----------------+-------------------------+--------------------------------------------+
 [< safe to read >|<---  unsafe to read --->|<--             safe to read             -->|
 | captured audio |< driver_transfer_bytes >|      (not yet written by the hardware)     |
 +----------------+-------------------------+--------------------------------------------+
 0                S                         P                                            0

之后,“P”会先于环形缓冲区封装,然后才是“S”。请注意,从 0 到“P”的区域,再加上从“S”到环形缓冲区末尾的区域,相加等于 driver_transfer_bytes

                                      Ring Buffer
 +-----------+------------------------------------------------------------+--------------+
 |<--unsafe->|<---                    safe to read                    --->|<---unsafe--->|
 |< driver_tr|                      (captured audio)                      |ansfer_bytes >|
 +-----------+------------------------------------------------------------+--------------+
 0           P                                                            S              0

在稳定状态(即进程封装到环形缓冲区)下,指针“S”和“P”之外的任何区域都可以安全地读取:

                                      Ring Buffer
 +--------------------------------+-------------------------+----------------------------+
 [<--       safe to read       -->|<---      unsafe     --->|<--     safe to read     -->|
 |                                |< driver_transfer_bytes >|                            |
 +--------------------------------+-------------------------+----------------------------+
 0                                S                         P                            0

硬件与软件

环形缓冲区数据可以直接由硬件使用/生成,也就是说,driver_transfer_bytes 可以直接映射到硬件 FIFO 块的大小,因为硬件 FIFO 块决定了提前读取或保留的数据量的上限。 请注意,如果未以传统的“高水量”方式使用 FIFO 缓冲区(例如,在任何时候只使用 FIFO 一半大小的“乒乓球”设计,即使是在 Start 时间的最初传输期间),则可以将 driver_transfer_bytes 设置为较小的值,但必须至少等于 FIFO 缓冲区中曾存储的最大数据量。 即使传输大小绝不会超过 FIFO 大小的一半,如果使用了 FIFO 的完整大小(例如,在 Start 填充最初为空的硬件 FIFO 时),也必须将 driver_transfer_bytes 设置为 FIFO 缓冲区的整个大小。

环形缓冲区数据可能由概念上位于环形缓冲区和音频硬件之间的音频驱动程序软件使用/生成。在这种情况下,对于播放来说,driver_transfer_bytes 预读量必须足够大,以便驱动程序根据客户端要求根据 CreateRingBuffer 速率和 Start 中的 start_time 生成数据,保证不会出现未检测到的欠载。对于捕获,driver_transfer_bytes 必须足够大,以便驱动程序在生成由 CreateRingBufferStart 命令确定的数据时保证不会出现欠载。

driver_transfer_bytes 不得包含由驱动程序提取的硬件或软件处理导致的延迟影响。这些延迟通过 DelayInfo 中的 internal_delayexternal_delay 字段传达;它们与此值正交。

必选。

添加了:HEAD

StreamProperties

fuchsia.hardware.audio/stream_config.fidl 中定义

序数野战类型说明
unique_id uint8[16]

唯一标识符。如果不包含,则 StreamConfig 没有唯一 ID。为实现蓝牙技术的驱动程序预留了以 0x42、0x54...(或 ASCII 中为 BT)开头的 unique_id 数组。系统会预留以 0x55、0x53、0x42...(在 ASCII 中为 USB)开头的 unique_id 数组,以供实现 USB 技术的驱动程序使用。请注意,即使上述值映射到可读的 ASCII 字符,数组值也可以跨越整个 uint8 范围 (0-255)。

可选。

is_input bool

驱动程序类型为输入 (true) 或输出 (false)

必选。

can_mute bool

获得静音功能。如果不包含,则 StreamConfig 无法静音。

可选。

can_agc bool

自动增益控制 (AGC) 功能。如果不包含,则 StreamConfig 无法使用 AGC。

可选。

min_gain_db float32

最小增益(以分贝为单位)。

必选。

max_gain_db float32

最大增益(分贝)。

必选。

gain_step_db float32

增益步长(以分贝为单位),该值不得为负数,但可以为零以表示有效连续的值范围。不得超过 max_gain_db - min_gain_db

必选。

plug_detect_capabilities PlugDetectCapabilities

插头检测功能。

必选。

manufacturer string[256]

制造商名称的界面字符串。如果您未添加该属性,则表示制造商未指定。

可选。

product string[256]

商品名称的界面字符串。如果未指定,则未指定产品名称。

可选。

clock_domain ClockDomain

运行此硬件的时钟域的标识符。如果两个硬件设备具有相同的时钟域,则它们的时钟频率相同且完全同步。虽然这两个时钟具有相同的速率,但时钟位置之间可能会存在任意(但固定)的量的偏差。时钟域通常来自系统级实体,例如平台总线或全局时钟树。

有两个特殊值:

  • CLOCK_DOMAIN_MONOTONIC 表示硬件的运行频率与系统单调时钟相同。

  • CLOCK_DOMAIN_EXTERNAL 表示硬件以未知速率运行,并且不与任何已知时钟同步,即使与 CLOCK_DOMAIN_EXTERNAL 网域中的其他时钟同步也不同步。

如果网域不是 CLOCK_DOMAIN_MONOTONIC,客户端必须使用位置通知更新来恢复硬件的时钟。

必选。

SupportedFormats

fuchsia.hardware.audio/ring_buffer_format.fidl 中定义

此设备支持的所有可能的格式。

序数野战类型说明
pcm_supported_formats PcmSupportedFormats

支持未压缩 PCM 样本的格式,包含属性。

必选。

联合

Codec_GetDaiFormats_Result 严格

fuchsia.hardware.audio/codec.fidl 中定义

序数变体类型说明
response Codec_GetDaiFormats_Response
err zx/Status

Codec_SetDaiFormat_Result 严格

fuchsia.hardware.audio/codec.fidl 中定义

序数变体类型说明
response Codec_SetDaiFormat_Response
err zx/Status

Composite_CreateRingBuffer_Result strict

fuchsia.hardware.audio/composite.fidl 中定义

序数变体类型说明
response Composite_CreateRingBuffer_Response
err DriverError

Composite_GetDaiFormats_Result 严格

fuchsia.hardware.audio/composite.fidl 中定义

序数变体类型说明
response Composite_GetDaiFormats_Response
err DriverError

Composite_GetRingBufferFormats_Result 严格的

fuchsia.hardware.audio/composite.fidl 中定义

序数变体类型说明
response Composite_GetRingBufferFormats_Response
err DriverError

Composite_Reset_Result 严格

fuchsia.hardware.audio/composite.fidl 中定义

序数变体类型说明
response Composite_Reset_Response
err DriverError

Composite_SetDaiFormat_Result 严格

fuchsia.hardware.audio/composite.fidl 中定义

序数变体类型说明
response Composite_SetDaiFormat_Response
err DriverError

DaiFrameFormat 严格

fuchsia.hardware.audio/dai_format.fidl 中定义

标准帧格式或自定义帧格式。

序数变体类型说明
frame_format_standard DaiFrameFormatStandard

DAI 中所有样本的格式类型,在 DaiFrameFormatStandard 中列出。

frame_format_custom DaiFrameFormatCustom

DAI 中所有样本的格式类型,在 DaiFrameFormatCustom 中指定。

Dai_GetDaiFormats_Result 严格

fuchsia.hardware.audio/dai.fidl 中定义

序数变体类型说明
response Dai_GetDaiFormats_Response
err zx/Status

Dai_GetRingBufferFormats_Result 严格

fuchsia.hardware.audio/dai.fidl 中定义

序数变体类型说明
response Dai_GetRingBufferFormats_Response
err zx/Status

RingBuffer_GetVmo_Result 严格 资源

fuchsia.hardware.audio/ring_buffer.fidl 中定义

序数变体类型说明
response RingBuffer_GetVmo_Response
err GetVmoError

RingBuffer_SetActiveChannels_Result 严格

fuchsia.hardware.audio/ring_buffer.fidl 中定义

序数变体类型说明
response RingBuffer_SetActiveChannels_Response
err zx/Status

常量

名称类型说明
CLOCK_DOMAIN_EXTERNAL 4294967295 uint32
CLOCK_DOMAIN_MONOTONIC 0 uint32
MAX_COUNT_CHANNELS_IN_RING_BUFFER 64 uint32
MAX_COUNT_CHANNEL_SETS 64 uint32
MAX_COUNT_DAI_FORMATS MAX_COUNT_FORMATS uint32
MAX_COUNT_DAI_SUPPORTED_BITS_PER_SAMPLE 8 uint32
MAX_COUNT_DAI_SUPPORTED_BITS_PER_SLOT 8 uint32
MAX_COUNT_DAI_SUPPORTED_FRAME_FORMATS 64 uint32
MAX_COUNT_DAI_SUPPORTED_NUMBER_OF_CHANNELS 64 uint32
MAX_COUNT_DAI_SUPPORTED_RATES 64 uint32
MAX_COUNT_DAI_SUPPORTED_SAMPLE_FORMATS 4 uint32
MAX_COUNT_FORMATS 64 uint32
MAX_COUNT_SUPPORTED_BYTES_PER_SAMPLE 8 uint32
MAX_COUNT_SUPPORTED_NUMBER_OF_CHANNELS 64 uint32
MAX_COUNT_SUPPORTED_RATES 64 uint32
MAX_COUNT_SUPPORTED_SAMPLE_FORMATS 3 uint32
MAX_COUNT_SUPPORTED_VALID_BITS_PER_SAMPLE 8 uint32
MAX_DAI_UI_STRING_SIZE 256 uint32
MAX_UI_STRING_SIZE 256 uint32
UNIQUE_ID_SIZE 16 uint32

别名

名称说明
ClockDomain uint32

服务

CodecConnectorService

fuchsia.hardware.audio/codec_connector.fidl 中定义

名称类型传输
codec_connector fuchsia.hardware.audio/CodecConnector 频道

CodecService

fuchsia.hardware.audio/codec.fidl 中定义

名称类型传输
编解码器 fuchsia.hardware.audio/Codec 频道

CompositeConnectorService

fuchsia.hardware.audio/composite_connector.fidl 中定义

名称类型传输
composite_connector fuchsia.hardware.audio/CompositeConnector 频道

DaiConnectorService

fuchsia.hardware.audio/dai_connector.fidl 中定义

名称类型传输
dai_connector fuchsia.hardware.audio/DaiConnector 频道

DaiService

fuchsia.hardware.audio/dai.fidl 中定义

名称类型传输
dai fuchsia.hardware.audio/Dai 频道

DeviceService

fuchsia.hardware.audio/composite.fidl 中定义

名称类型传输
设备 fuchsia.hardware.audio/Composite 频道

StreamConfigConnectorService

fuchsia.hardware.audio/stream_config_connector.fidl 中定义

名称类型传输
stream_config_connector fuchsia.hardware.audio/StreamConfigConnector 频道

StreamConfigService

fuchsia.hardware.audio/stream_config.fidl 中定义

名称类型传输
stream_config fuchsia.hardware.audio/StreamConfig 频道