Fuchsia.hardware.audio

添加时间:7

PROTOCOLS

编解码器

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

有关概述,请参阅 [音频编解码器接口]

弃用

不再受支持,请改用 音频复合音频 使用一个 DAI 但无环形缓冲区,请参阅 音频驱动程序架构

已弃用:20

GetDaiFormats

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

请求

<空>

响应

名称类型
payload Codec_GetDaiFormats_Result

GetHealthState

检索顶级运行状况。 驾驶员未及时响应可以作为驾驶员健康状况不佳的征兆。

请求

<空>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

添加时间:20

请求

<空>

响应

名称类型
properties CodecProperties

IsBridgeable

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

弃用

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

已移除:20 已弃用:17

请求

<空>

响应

名称类型
supports_bridged_mode bool

重置

重置编解码器。 重置完成后,Reset 会返回。如果司机无法成功重置 编解码器,则它会关闭编解码器协议通道,在这种情况下,客户端可能会获得新的 编解码器协议通道,然后重试。

请求

<空>

响应

<空>

SetBridgedMode

设置编解码器的桥接模式。此方法是必需的,但只需在以下情况下执行操作: 编解码器通过回复 IsBridgeable 指定的桥接模式。

弃用

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

已移除:20 已弃用:17

请求

名称类型
enable_bridged_mode bool

SetDaiFormat

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

请求

名称类型
format DaiFormat

响应

名称类型
payload Codec_SetDaiFormat_Result

SignalProcessingConnect

请连接到 SignalProcessing 协议。 如果不支持新的连接请求(例如, 创建的连接数达到上限,例如 1,则 protocol 通道(不是调用 SignalProcessingConnect 的通道) 将以 ZX_ERR_ALREADY_BOUND 标题为关闭标志。 如果完全不支持信号处理,则 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 时间轴, 如果驱动程序无法成功启动编解码器,则会关闭编解码器协议通道。 在这种情况下,客户端可能会获取新的编解码器协议通道并重试。

请求

<空>

响应

名称类型
start_time zx/Time

停止

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

请求

<空>

响应

名称类型
stop_time zx/Time

WatchPlugState

通过挂起获取来获取插头检测状态。司机会回复第一条 客户端发送的 WatchPlugState。驱动程序不会响应后续客户端 WatchPlugState 调用,直到插头状态与最近报告的状态不同。

请求

<空>

响应

名称类型
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,以便为 RING_BUFFER 选择环形缓冲区格式 processing_element_id 指定的处理元素。格式基于 驱动程序在 GetRingBufferFormats 中提供的相应参数、客户端支持的功能,以及 任何其他要求返回的 ring_buffer 渠道用于访问和控制 音频缓冲区。 如果 processing_element_id 与返回的 ID 不匹配,则返回 INVALID_ARGS 上传者:GetElements。 如果由 ID 表示的元素的 ElementType 不是WRONG_TYPE RING_BUFFER

请求

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

响应

名称类型
payload Composite_CreateRingBuffer_Result

GetDaiFormats

检索 DAI_INTERCONNECT 处理元素支持的 DAI 格式 此驱动程序支持的拓扑中(由 GetElements 从 fuchsia.hardware.audio.signalprocessing. 如果 DAI 格式当时不可用,则客户端返回 SHOULD_WAIT 稍后重试。 如果 processing_element_id 与返回的 ID 不匹配,则返回 INVALID_ARGS 上传者:GetElements。 如果由 ID 表示的元素的 ElementType 不是WRONG_TYPE DAI_INTERCONNECT。 检索多个 DaiSupportedFormats 适用于以下情况的排他组合: 可能支持 SupportedFormats 中的参数。

请求

名称类型
processing_element_id ElementId

响应

名称类型
payload Composite_GetDaiFormats_Result

GetHealthState

检索顶级运行状况。 驾驶员未及时响应可以作为驾驶员健康状况不佳的征兆。

请求

<空>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

请求

<空>

响应

名称类型
properties CompositeProperties

GetRingBufferFormats

检索 RING_BUFFER 处理元素支持的环形缓冲区格式 此驱动程序支持的拓扑中(由 GetElements 从 fuchsia.hardware.audio.signalprocessing. 如果当时没有可用的环形缓冲区格式,则返回 SHOULD_WAIT, 客户端可以稍后重试。 如果 processing_element_id 与返回的 ID 不匹配,则返回 INVALID_ARGS 上传者:GetElements。 如果由 ID 表示的元素的 ElementType 不是WRONG_TYPE RING_BUFFER。 检索多个 SupportedFormats 适用于以下情况的排他组合: SupportedFormats 中的参数可能受支持。

请求

名称类型
processing_element_id ElementId

响应

名称类型
payload Composite_GetRingBufferFormats_Result

重置

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

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

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

请求

<空>

响应

名称类型
payload Composite_Reset_Result

SetDaiFormat

客户端会发送 SetDaiFormat,以便为 DAI_INTERCONNECT 选择 DAI 格式 processing_element_id 指定的处理元素。格式基于 驱动程序在 GetDaiFormats 中提供的数据、客户端支持的功能,以及 。 如果 processing_element_id 与返回的 ID 不匹配,则返回 INVALID_ARGS 上传者:GetElements。 如果由 ID 表示的元素的 ElementType 不是WRONG_TYPE DAI_INTERCONNECT

请求

名称类型
processing_element_id ElementId
format DaiFormat

响应

名称类型
payload Composite_SetDaiFormat_Result

SignalProcessingConnect

请连接到 SignalProcessing 协议。 如果不支持新的连接请求(例如, 创建的连接数达到上限,例如 1,则 protocol 通道(不是调用 SignalProcessingConnect 的通道) 将以 ZX_ERR_ALREADY_BOUND 标题为关闭标志。 如果完全不支持信号处理,则 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,以同时选择 DAI 格式和环形缓冲区格式 根据驱动程序在 GetDaiFormatsGetRingBufferFormats 中提供的信息, 客户端支持的内容以及任何其他要求ring_buffer 频道是 用于控制音频缓冲区(如果已建立先前的环形缓冲区通道且 则驱动程序必须关闭该(环形缓冲区)通道并尝试 优雅地停止进程中的任何正在进行的流式传输操作。

请求

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

GetDaiFormats

检索 DAI 支持的 DAI 格式(如果在 DAI 时不可用) 可能会以错误状态回复,客户端稍后可能会重试。 检索多个 DaiSupportedFormats 适用于以下情况的排他组合: 可能支持 SupportedFormats 中的参数。

请求

<空>

响应

名称类型
payload Dai_GetDaiFormats_Result

GetHealthState

检索顶级运行状况。 驾驶员未及时响应可以作为驾驶员健康状况不佳的征兆。

请求

<空>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

请求

<空>

响应

名称类型
properties DaiProperties

GetRingBufferFormats

检索 DAI 支持的环形缓冲区格式(如果在 DAI 时不可用) 可能会以错误状态回复,客户端稍后可能会重试。 检索多个 SupportedFormats 适用于以下情况的排他组合: SupportedFormats 中的参数可能受支持。

请求

<空>

响应

名称类型
payload Dai_GetRingBufferFormats_Result

重置

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

请求

<空>

响应

<空>

SignalProcessingConnect

请连接到 SignalProcessing 协议。 如果不支持新的连接请求(例如, 创建的连接数达到上限,例如 1,则 protocol 通道(不是调用 SignalProcessingConnect 的通道) 将以 ZX_ERR_ALREADY_BOUND 标题为关闭标志。 如果完全不支持信号处理,则 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

检索顶级运行状况。 驾驶员未及时响应可以作为驾驶员健康状况不佳的征兆。

请求

<空>

响应

名称类型
state HealthState

RingBuffer

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

GetProperties

顶级静态属性的访问器。

请求

<空>

响应

名称类型
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 参数规范。

返回的 VMO 句柄必须包含 ZX_RIGHT_TRANSFER、ZX_RIGHT_READ 和 ZX_RIGHT_MAP。 如果环形缓冲区为“传出”(将音频数据从客户端传输到设备), 句柄还必须包含 ZX_RIGHT_WRITE。

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

请求

名称类型
min_frames uint32
clock_recovery_notifications_per_ring uint32

响应

名称类型
payload RingBuffer_GetVmo_Result

SetActiveChannels

通过位掩码设置哪些通道有效。 最低有效位对应于通道索引 0。 位掩码中未设置的通道(位为 0)处于非活动状态。 非活动通道向驱动程序指示其可以关闭与 无效频道。随后 SetActiveChannels 会将无效渠道设为有效渠道 可能会在 turn_on_delay 中引发,以实际重新开始播放/捕获频道。 频道总数是number_of_channels(以Format为单位),具体来说 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

请求

<空>

响应

名称类型
start_time zx/Time

停止

停止环形缓冲区。收到此调用的响应后,系统将不再 在再次调用 Start 之前,系统会发送通知。 如果在 GetVmo 之前调用 Stop,则必须使用 ZX_ERR_BAD_STATE 关闭通道。

请求

<空>

响应

<空>

WatchClockRecoveryPositionInfo

通过挂起 get 获取环形缓冲区当前位置。司机必须对 客户端的第一次 WatchClockRecoveryPositionInfo 调用,但不会对后续调用进行响应 客户来电,直到位置信息与最近保持一致 向该客户端提供的值司机不得对 WatchClockRecoveryPositionInfo,直到它回复 Start 命令为止。 在 Start 返回的 start_time 中,位置始终为 0。在这里 以由采样率、采样格式(以及时钟域、 (如果设备与 CLOCK_MONOTONIC 不在同一时钟域中)。 如果 clock_recovery_notifications_per_ring 不为零,驱动程序将回复其 用于恢复时钟的估计位置最多为 频率:clock_recovery_notifications_per_ring。 只有在调用 GetVmo 之后才能调用 WatchClockRecoveryPositionInfo,因此 已指定 clock_recovery_notifications_per_ring。 提交时时间戳必须是单调递增的。 驱动程序将关闭协议通道并显示 ZX_ERR_BAD_STATE 错误(如果存在 此客户端已有待处理的WatchClockRecoveryPositionInfo

请求

<空>

响应

名称类型
position_info RingBufferPositionInfo

WatchDelayInfo

通过挂起 get 获取延迟相关信息。司机会立即回复 客户端发送的第一个 WatchDelayInfo。驱动程序不会响应后续客户端 WatchDelayInfo 调用,直到延迟信息与最近报告的内容不同。 如果在第一次调用完成前再次调用 WatchDelayInfo, 必须关闭渠道并返回错误 ZX_ERR_BAD_STATE

添加时间:HEAD

请求

<空>

响应

名称类型
payload RingBuffer_WatchDelayInfo_Result

StreamConfig

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

有关概述,请参阅 音频驱动程序流式传输接口

弃用

不再受支持,请改用 音频复合音频 环形缓冲区,请参阅 音频驱动程序架构

已弃用:20

CreateRingBuffer

客户端会发送 CreateRingBuffer,以根据 驱动程序在 GetSupportedFormats 中提供客户端支持的内容,以及 。ring_buffer 通道用于控制音频缓冲区(如果之前 环形缓冲区通道已建立,并且仍处于活跃状态,驱动程序必须关闭该通道 (环形缓冲区)通道,并尽一切努力正常地停止任何正在进行的流式传输。 操作。

请求

名称类型
format Format
ring_buffer server_end<RingBuffer>

GetHealthState

检索顶级运行状况。 驾驶员未及时响应可以作为驾驶员健康状况不佳的征兆。

请求

<空>

响应

名称类型
state HealthState

GetProperties

检索顶级静态属性。

请求

<空>

响应

名称类型
properties StreamProperties

GetSupportedFormats

获取指定驱动程序支持的格式。当 可以使用一个 SupportedFormats 来描述驱动程序,但驱动程序会返回多个 SupportedFormats。例如,如果一个 SupportedFormats 允许 在 48KHz 时进行 32 位采样,在 96KHz 时进行 16 位采样,但不在 96KHz,则驱动程序返回 2 个 SupportedFormats:<<32bits>,<48KHz>>和 <<16bits>,<96KHz>>。为简单起见,此示例会忽略 rate 和 每个样本的位数。如果驱动程序支持 16 或 32 位采样, 48 或 96KHz,驱动程序会回复 1 个 SupportedFormats: <<16bits,32bits>,<48KHz,96KHz>>。

请求

<空>

响应

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

SetGain

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

请求

名称类型
target_state GainState

SignalProcessingConnect

请连接到 SignalProcessing 协议。 如果不支持新的连接请求(例如, 创建的连接数达到上限,例如 1,则 protocol 通道(不是调用 SignalProcessingConnect 的通道) 将以 ZX_ERR_ALREADY_BOUND 标题为关闭标志。 如果完全不支持信号处理,则 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

请求

<空>

响应

名称类型
gain_state GainState

WatchPlugState

通过挂起获取来获取插头检测状态。司机会回复第一条 客户端发送的 WatchPlugState。驱动程序不会响应后续客户端 WatchPlugState 调用,直到插头状态与最近报告的状态不同。 如果在第一次调用完成之前再次调用 WatchPlugState,则: 必须关闭协议通道并显示错误 ZX_ERR_BAD_STATE

请求

<空>

响应

名称类型
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 中定义

<空>

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 中定义

<空>

Composite_SetDaiFormat_Response

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

<空>

DaiFormat

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

DAI 格式。帧由 number_of_channels 个样本组成,这些样本的 bits_per_samplebits_per_slot内的数据按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

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

无默认设置
frame_sync_sclks_offset int8

帧同步变化开头与音频样本之间的间隔数。 例如,对于 I2S 设置为 1,将立体声左对齐设置为 0。

无默认设置
frame_sync_size uint8

帧内帧同步的帧数较高。 例如,对于 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 个样本组成 其中包含 valid_bits_per_sample 个最高有效(左对齐)的数据, bytes_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

驱动程序在 CLOCK_MONOTONIC 时间轴上对 播放/捕获指针到达了 position 指示的位置。 turn_on_delay 的影响不应纳入“timestamp”列中。 不应纳入 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 无默认设置

RingBuffer_WatchDelayInfo_Response

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

字段类型说明默认
delay_info DelayInfo 无默认设置

精英

DaiFrameFormatStandard 严格

类型:uint8

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

标准帧格式。

名称说明
1

没有像 PDM 那样不具有帧同步的示例帧格式。

2

格式如 I2S 规范中所指定(左对齐,2 通道,每个 32 位) 左声道的帧同步保持低水平,右声道的帧同步保持高水平,数据 在帧同步在 sclk 的下降边缘进行时钟同步后,开始一个时钟周期)。

3

左对齐,2 个声道。数据从帧同步开始,从低到高逐出 下降边缘对于 第一个通道与第二个通道的 bits_per_channel 值低。

4

右对齐,2 个声道。对于 第一个通道与第二个通道的 bits_per_channel 值低。

5

左对齐,通道数不定,帧同步时开始的数据从低值更改为 在 Sclk 的上升边缘就开始计时。帧同步必须保持高同步状态(正好 1) 循环。

6

左对齐,通道数量可变,帧后一个时钟周期开始数据 在 sclk 的上升边缘,从低到高进行同步。帧同步必须 正好保持高一个时钟周期。

添加时间:10
7

左对齐,通道数量可变,帧后两个时钟周期开始显示数据 在 sclk 的上升边缘,从低到高进行同步。帧同步必须 正好保持高一个时钟周期。

添加时间: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

环形缓冲区设置因内部错误失败。

LuxeDetectCapabilities 严格

类型: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 命令后实际停止播放/捕获。 硬件可能需要一些时间才能进入完全停止模式,例如, 电源状态更改。如果要播放/捕获样本,必须考虑此延迟 在“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

Driver 目前健康状况良好。 如果未包含此字段,则不会提供健康信息。 这样可让驾驶员在信息不足的情况下发出信号 可以自行恢复的功能或资源,例如无法关闭 通过 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 中定义

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

序数字段类型说明
external_delay zx/Duration

驱动程序对其硬件外部延迟的最优估算值(针对所选格式) 抽象。在精确同步时,必须考虑外部延迟 在多个实体(例如设备)间呈现。 如果未添加,external_delay 未知。

弃用

不再需要,因为通过下面的 WatchDelayInfo 提供该功能。

已移除:20 已弃用:9
fifo_depth uint32

驱动程序在消耗或生成环时使用的临时缓冲区的大小(以字节为单位) 缓冲区内容。必填。 环形缓冲区内容必须以 CreateRingBuffer 命令,但将数据 从环形缓冲区中写入数据以及从环形缓冲区中读取数据。在播放时,驱动程序会使用相应数据 即通过预读最多 fifo_depth 个字节。对于捕获,数据由驱动程序生成 在提交到主系统之前最多保留 fifo_depth 个字节 内存。因此,在确定以下任一项时,客户必须考虑 fifo_depth 最短准备时间要求(用于播放)或最长捕获延迟(用于拍摄)。

如需将 fifo_depth 转换为相应数量的音频帧,请使用帧大小 由 CreateRingBufferStreamConfig 协议中返回,请注意,fifo_depth 不一定是音频帧的多种大小。

在这种情况下,环形缓冲区数据可能直接由硬件消耗/生成 fifo_depth 会直接映射到硬件 FIFO 块的大小,因为硬件 FIFO 用于确定提前或保留的数据量。

环形缓冲区数据可以改为由 位于环形缓冲区和音频硬件之间。在此例中,对于 将 fifo_depth 预读量设置得足够大,以便驱动程序 保证没有未检测到的欠载,前提是客户端是以 由 CreateRingBufferStart 命令决定。对于捕获, fifo_depth 预留金额设置得足够大,以便驱动程序保证 根据 CreateRingBufferStart 命令。驱动程序必须将 fifo_depth 设置得足够大,以便能 根据大多数规定,与音频硬件对接的任何软件所增加的延迟 场景,并且必须检测并报告欠载。未定义欠载的具体报告方式 。

弃用

不再需要,因为通过下面的 driver_transfer_bytes 提供该功能。

已移除:20 已弃用:9
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”从位置 0 开始移动 来自 Startstart_time。不得读取这些指针之间的区域, 由客户端编写的内容在下图中,这些指针被标注为“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

随着时间的推移,驱动程序/硬件会以 driver_transfer_bytes 或更小的块为单位读取数据, 按 CreateRingBuffer 中指定的费率发送。在 保持相同的速率因此,“客户端写入不安全”区域移动 在环形缓冲区中逐渐穿过,同时保持 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(例如,在填充最初为空的硬件 FIFO 时,在 Start 时), 则 driver_transfer_bytes 必须设置为 FIFO 缓冲区的整个大小。

环形缓冲区数据可以改为由 位于环形缓冲区和音频硬件之间。在此例中,对于 播放时,提前读取的 driver_transfer_bytes 必须足够大,以便 驱动程序根据生成数据的客户端要求,保证未检测到未检测到的欠载 基于CreateRingBuffer的房价和Startstart_time。对于捕获, driver_transfer_bytes 必须足够大,以便驱动程序在工作时不会出现欠载 生成由 CreateRingBufferStart 命令确定的数据。

driver_transfer_bytes不得包含因硬件或软件造成的延迟影响 驱动程序抽象化处理这些延误情况会通过 internal_delayDelayInfo 中的 external_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 strict

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 strict

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 strict

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 strict

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

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

RingBuffer_WatchDelayInfo_Result 严格

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

序数变体类型说明
response RingBuffer_WatchDelayInfo_Response
framework_err internal

常量

名称类型说明
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

ALIASES

名称说明
ClockDomain uint32
ElementId uint64
TopologyId uint64

服务

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 频道