fuchsia.hardware.audio

新增:7

PROTOCOLS

轉碼器

定義於 fuchsia.hardware.audio/codec.fidl

如需總覽,請參閱 [Audio Codec Interface]

淘汰

不再支援,請改用 音訊複合 其中包含一個 DAI,且沒有 Ring 緩衝區,請參閱 音訊驅動程式架構

已淘汰: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

如需 Codec 通訊協定的總覽,請參閱 轉碼器介面

淘汰

不再支援,請改用 音訊複合 其中包含一個 DAI,且沒有 Ring 緩衝區,請參閱 音訊驅動程式架構

已淘汰:20

連線

連線至 Codec 通訊協定伺服器。 這種間接到 Codec 通訊協定讓我們可以支援獨立的轉碼器用戶端 連線狀態。

要求

名稱類型
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,則在獨有的組合時, 支援格式中的參數

要求

名稱類型
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 通訊協定。 這個方法可讓元件在開發主機的控制項之外提供 FIDL。

要求

名稱類型
composite_protocol server_end<Composite>

戴伊

定義於 fuchsia.hardware.audio/dai.fidl

如需總覽,請參閱 數位音訊介面

淘汰

不再支援,請改用 音訊複合 分別搭配一個 DAI 和一個 Ring 緩衝區,請參閱 音訊驅動程式架構

已淘汰:20

CreateRingBuffer

用戶端會傳送 CreateRingBuffer,以便同時選取 DAI 格式和環形緩衝區格式 根據驅動程式庫在 GetDaiFormatsGetRingBufferFormats 中提供的資訊 和所有其他要求「ring_buffer」管道是 用來控制音訊緩衝區 (如果已建立先前的環形緩衝區管道,且 驅動程式庫必須關閉該 (環形緩衝區) 管道,並在每次 順利退出過程中任何進行中的串流作業。

要求

名稱類型
dai_format DaiFormat
ring_buffer_format Format
ring_buffer server_end<RingBuffer>

GetDaiFormats

擷取 DAI 支援的 DAI 格式 (如果在 DAI 時不適用) 可能會傳回錯誤狀態,而用戶端稍後可能會重試。 若擷取多個 DaiSupportedFormats,則在獨有的組合時, 支援格式中的參數

要求

<空白>

回應

名稱類型
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 和一個 Ring 緩衝區,請參閱 音訊驅動程式架構

已淘汰: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 中,實際重新啟動頻道播放/擷取。 頻道總數是Formatnumber_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 再接通電話或 1 次 通關管道後 傳回錯誤 ZX_ERR_BAD_STATE

要求

<空白>

回應

名稱類型
start_time zx/Time

停止

停止環形緩衝區。收到此呼叫的回應後,請勿再放置其他位置 系統會再次傳送通知,直到呼叫 Start 為止。 如果在 GetVmo 之前呼叫 Stop,則必須使用 ZX_ERR_BAD_STATE 關閉管道。

要求

<空白>

回應

<空白>

WatchClockRecoveryPositionInfo

透過掛鉤取得環形緩衝區目前的位置。駕駛必須回應 用戶端第一次 WatchClockRecoveryPositionInfo 通電話,但不會回應後續通話 呼叫用戶端,直到排名資訊與最近的值不同為止 將提供給該用戶端駕駛人不得回應 WatchClockRecoveryPositionInfo,直到回覆 Start 指令為止。 在 Start 傳回的 start_time 中,位置一律為 0。下一步 進度會按照速率、取樣格式 (和時鐘網域) 指定的速率 如果裝置與 CLOCK_MONOTONIC 分屬不同的時鐘網域)。 如果 clock_recovery_notifications_per_ring 不是 0,驅動程式庫會回覆 最常用於復原時鐘的估計位置 頻率:clock_recovery_notifications_per_ring。 只有在呼叫 GetVmo 後才能呼叫 WatchClockRecoveryPositionInfo,因此 已指定 clock_recovery_notifications_per_ring。 提交時必須提供單調遞增的時間戳記。 驅動程式會關閉通訊協定管道,並顯示 ZX_ERR_BAD_STATE 錯誤 (如果有的話) 已為此客戶設為待處理的 WatchClockRecoveryPositionInfo

要求

<空白>

回應

名稱類型
position_info RingBufferPositionInfo

WatchDelayInfo

透過懸掛程序取得誤點資訊,駕駛會立即回覆 第一個 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 允許 擁有 32 位元樣本 (48 KHz) 和 16 位元樣本 (96 KHz),但不包含 32 位元樣本 96KHz 後,驅動程式庫使用 2 SupportedFormats 回覆:<32bits>,<48KHz>>和 <16bits>,<96KHz>>。為求簡單起見,本範例忽略掉率和 每個樣本位元數。如果是驅動程式庫支援 16 或 32 位元樣本 無論 48 或 96 KHz,驅動程式庫都會以 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

透過懸掛的取得取得取得狀態。駕駛會回覆第一個 WatchGainState ,且這則回覆必須包含 gain_db 設為 0dB 以下的值。駕駛人 在取得狀態變更前,不會回應後續的用戶端 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 通訊協定。 這個方法可讓元件在開發主機的控制項之外提供 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

。影格是由 number_of_channels 個樣本組成,樣本數為 bits_per_sample 位元 bits_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

資料樣本的時鐘和影格同步輸出在升起或下降時顯示。 如果設為 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的影響不應納入「時間戳記」。 「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 無預設

ENUMS

DaiFrameFormatStandard 嚴格

類型:uint8

定義於 fuchsia.hardware.audio/dai_format.fidl

標準影格格式。

名稱說明
1

沒有與 PDM 等影格同步的樣本不同影格格式。

2

格式符合 I2S 規格說明 (左側對齊,2 個聲道,每個 32 位元 管道左側管道上的影格同步會維持在低階,而右側管道的影格同步情形 影格同步變更後會計時一個時鐘循環。

3

靠左對齊 2 個頻道。資料在影格同步時開始,變更時會從低至高時逾時 懸浮微粒影格同步程序必須保持較高的位元 s_per_channel 位元, 對第二個管道的位元 s_per_channel 位元數較低。

4

靠右對齊 2 個頻道。影格同步程序必須保持較高的位元 s_per_channel 位元, 對第二個管道的位元 s_per_channel 位元數較低。

5

靠左對齊、可變的聲道、開始同步影格時資料,從低到位 高掛在螺紋邊緣影格同步必須保持高,達到 1 時鐘週期。

6

靠左對齊、可變的聲道,資料在影格結束後開始一個時鐘週期 同步變更時,從低到高時同步套用排球邊緣。影格同步處理作業必須 維持在高點,維持在 1 個時鐘週期。

新增:10
7

靠左對齊、可變的聲道,資料在影格結束後開始兩個時鐘週期 同步變更時,從低到高時同步套用排球邊緣。影格同步處理作業必須 維持在高點,維持在 1 個時鐘週期。

新增:10

DaiSampleFormat 嚴格

類型:uint8

定義於 fuchsia.hardware.audio/dai_format.fidl

名稱說明
1

Pulse Density Modulation 樣本。

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

發生內部錯誤,因此無法設定環形緩衝區。

PlugDetectabilities 嚴格

類型:uint32

定義於 fuchsia.hardware.audio/plug.fidl

名稱說明
0

驅動程式採用有線網路 (一律需接上電源)。

1

驅動程式能夠以非同步方式,通知插頭狀態變更。

取樣格式嚴格

類型: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

驅動程式的最佳管道評估結果 (以奈秒為單位) 選擇格式的 AdSense 收益對多個實體進行精確同步時 (例如裝置) 時,應考量外部延遲時間。 若未包含 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]

製造商名稱的 UI 字串。如果沒有加入,則未指定製造商。 如果已提供,則這個字串不得空白。

選用。

product string[256]

產品名稱的 UI 字串。如果沒有加入,則未指定產品名稱。 如果已提供,則這個字串不得空白。

選用。

unique_id uint8[16]

轉碼器的專屬 ID。 如果沒有提供,則沒有轉碼器的專屬 ID。

選用。

plug_detect_capabilities PlugDetectCapabilities

插電偵測功能。

必填。

CompositeProperties

fuchsia.hardware.audio/composite.fidl 中定義的

新增:12

序數欄位類型說明
manufacturer string[256]

製造商名稱的 UI 字串。如未設定,表示製造商不明。 如果已提供,則這個字串不得空白。

選用。

product string[256]

產品名稱的 UI 字串。如未設定,表示產品名稱不明。 如果已提供,則這個字串不得空白。

選用。

unique_id uint8[16]

專屬 ID。如果未指定,則沒有裝置專屬 ID。 unique_id 陣列開頭為 0x42、0x54... (或 ASCII 中的 BT) 僅供實作藍牙技術的駕駛使用。 unique_id 陣列開頭為 0x55、0x53、0x42... (或 ASCII 中的 USB) 僅適用於實作 USB 技術的駕駛。 請注意,即使上述值對應到可讀取的 ASCII 字元,陣列 值可涵蓋整個 uint8 範圍 (0-255)。

選用。

clock_domain ClockDomain

此硬體運作時所用時鐘網域的 ID。如果 兩部硬體裝置擁有相同的時鐘網域,其時鐘頻率為 以完全同步的方式運作雖然這兩個時鐘 相同的時差,時鐘位置可能會彼此偏差 任意 (但固定) 的金額Clock_domain 通常來自 整個系統的實體,例如月台公車或全域時鐘樹。

其中有兩個特殊值:

  • 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]

製造商名稱的 UI 字串。如果沒有加入,則未指定製造商。 如果已提供,則這個字串不得空白。

選用。

product_name string[256]

產品名稱的 UI 字串。如果沒有加入,則未指定產品名稱。 如果已提供,則這個字串不得空白。

選用。

unique_id uint8[16]

驅動程式庫的專屬 ID。 如果沒有提供,則沒有驅動程式庫的專屬 ID。

選用。

新增:20
clock_domain ClockDomain

此硬體運作時所用時鐘網域的 ID。如果 兩部硬體裝置擁有相同的時鐘網域,其時鐘頻率為 以完全同步的方式運作雖然這兩個時鐘 相同的時差,時鐘位置可能會彼此偏差 任意 (但固定) 的金額Clock_domain 通常來自 整個系統的實體,例如月台公車或全域時鐘樹。

其中有兩個特殊值:

  • 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) 最遠端的硬體 (例如 硬體轉碼器) 和「internal」指的是硬體互連網路之間的硬體 (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

驅動程式目前健康狀態良好。 如未加入這個欄位,系統就不會提供健康資訊。 這讓駕駛人在遇到不足的情況時,即發出信號信號 可以自行復原的功能或資源 例如無法關閉 安裝硬體或控制電源子系統。

選用。

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 轉換為對應的音訊影格數量,請使用影格大小 在 StreamConfig 通訊協定中由 CreateRingBuffer 傳回,請注意 fifo_depth 不一定是音訊影格的多種大小。

在本例中,環形緩衝區資料可能是由硬體直接使用/產生 fifo_depth 會直接對應至硬體 FIFO 區塊的大小 (因為硬體 FIFO) 區塊會決定預讀取或保留的資料量。

環形緩衝區資料可改為由符合下列條件的音訊驅動程式庫程式軟體使用/產生: 概念在環形緩衝區和音訊硬體之間在本例中 播放 fifo_depth 預讀量設定夠大,讓驅動程式庫 保證不會偵測到未偵測到的情況,而是假設用戶端產生 取決於 CreateRingBufferStart 指令就擷取而言, fifo_depth 的預扣金額設定夠大,因此驅動程式庫不保證不會 產生資料時,超過 CreateRingBuffer 的判定結果未偵測到的不足情形。 Start 指令。驅動程式必須將 fifo_depth 設定夠大,讓潛在元件 任何與音訊硬體互動的軟體造成延遲,大多不會發生 因此必須偵測及回報成效不足的情況未定義回報次數不足的情況 。

淘汰

不再需要使用,因為下方的 driver_transfer_bytes 提供這項功能。

已移除:20 已淘汰:9
needs_cache_flush_or_invalidate bool

如果設為 true,表示環形緩衝區會在不同的快取一致性網域執行。 因此,用戶端必須確保資料寫入作業已完全清除至主記憶體 (播放期間) 或是環形緩衝區的檢視畫面必須失效, 讀取。這是因為在 Pod 中,某些 CPU 可能有外部硬體 讀取/寫入主記憶體,略過 CPU。

如果設為 False,表示環形緩衝區會在與 因此驅動程式庫不需要清除/使環形緩衝區失效。 請注意,在此情況下,驅動程式庫和用戶端仍必須同步處理資料存取權, 做法是先插入適當的收購圍欄,再讀取及釋放圍欄 讀完所有文字後

必填。

turn_on_delay zx/Duration

驅動程式的最佳預估硬體輸出時間 (播放期間) 或 接受 (在擷取) 影格中,且 SetActiveChannels 啟用管道後。 驅動程式預估在 SetActiveChannels(channel)->(set_time) 啟用管道後, 資料將在約 set_time + turn_on_delay 繼續流通。 硬體可能需要一段時間才能完全運作 (例如因電源狀態變更,或是 藍牙驅動程式庫程式的多個硬體實體之間的通訊延遲)。用戶端 如果無法完全捨棄實際的音訊影格,就必須將此延遲納入考量 改為播放/擷取無聲片段 如果沒有加入,表示 turn_on_delay 不明。

選用。

driver_transfer_bytes uint32

驅動程式庫/HW 使用或產生作業時使用的暫存緩衝區大小 (以位元組為單位) 環形緩衝區內容

環形緩衝區內容必須按照使用 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 的資料寫入鈴聲後 buffer, '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_delay」告知, DelayInfo 中的 external_delay 欄位;這類模型有益於這個值

必填。

新增時間:HEAD

StreamProperties

fuchsia.hardware.audio/stream_config.fidl 中定義的

序數欄位類型說明
unique_id uint8[16]

專屬 ID。如果不提供,則串流設定沒有唯一 ID。 unique_id 陣列開頭為 0x42、0x54... (或 ASCII 中的 BT) 僅供實作藍牙技術的駕駛使用。 unique_id 陣列開頭為 0x55、0x53、0x42... (或 ASCII 中的 USB) 僅適用於實作 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_dbmin_gain_db

必填。

plug_detect_capabilities PlugDetectCapabilities

插電偵測功能。

必填。

manufacturer string[256]

製造商名稱的 UI 字串。如果沒有加入,則未指定製造商。 如果已提供,則這個字串不得空白。

選用。

product string[256]

產品名稱的 UI 字串。如果沒有加入,則未指定產品名稱。 如果已提供,則這個字串不得空白。

選用。

clock_domain ClockDomain

此硬體運作時所用時鐘網域的 ID。如果 兩部硬體裝置擁有相同的時鐘網域,其時鐘頻率為 以完全同步的方式運作雖然這兩個時鐘 相同的時差,時鐘位置可能會彼此偏差 任意 (但固定) 的金額Clock_domain 通常來自 整個系統的實體,例如月台公車或全域時鐘樹。

其中有兩個特殊值:

  • 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

序數Variant類型說明
response Codec_GetDaiFormats_Response
err zx/Status

Codec_SetDaiFormat_Result 嚴格

定義於 fuchsia.hardware.audio/codec.fidl

序數Variant類型說明
response Codec_SetDaiFormat_Response
err zx/Status

Composite_CreateRingBuffer_Result 嚴格

fuchsia.hardware.audio/composite.fidl 中定義的

序數Variant類型說明
response Composite_CreateRingBuffer_Response
err DriverError

Composite_GetDaiFormats_Result 嚴格

fuchsia.hardware.audio/composite.fidl 中定義的

序數Variant類型說明
response Composite_GetDaiFormats_Response
err DriverError

Composite_GetRingBufferFormats_Result 嚴格

fuchsia.hardware.audio/composite.fidl 中定義的

序數Variant類型說明
response Composite_GetRingBufferFormats_Response
err DriverError

Composite_Reset_Result 嚴格

fuchsia.hardware.audio/composite.fidl 中定義的

序數Variant類型說明
response Composite_Reset_Response
err DriverError

Composite_SetDaiFormat_Result 嚴格

fuchsia.hardware.audio/composite.fidl 中定義的

序數Variant類型說明
response Composite_SetDaiFormat_Response
err DriverError

DaiFrameFormat 嚴格

定義於 fuchsia.hardware.audio/dai_format.fidl

標準或自訂影格格式。

序數Variant類型說明
frame_format_standard DaiFrameFormatStandard

DAI 中所有樣本的格式類型,如 DaiFrameFormatStandard 中所列。

frame_format_custom DaiFrameFormatCustom

DAI 中所有樣本的格式類型,以 DaiFrameFormatCustom 指定。

Dai_GetDaiFormats_Result 嚴格

定義於 fuchsia.hardware.audio/dai.fidl

序數Variant類型說明
response Dai_GetDaiFormats_Response
err zx/Status

Dai_GetRingBufferFormats_Result 嚴格

定義於 fuchsia.hardware.audio/dai.fidl

序數Variant類型說明
response Dai_GetRingBufferFormats_Response
err zx/Status

RingBuffer_GetVmo_Result 嚴格 資源

fuchsia.hardware.audio/ring_buffer.fidl 中定義的

序數Variant類型說明
response RingBuffer_GetVmo_Response
err GetVmoError

RingBuffer_SetActiveChannels_Result 嚴格

fuchsia.hardware.audio/ring_buffer.fidl 中定義的

序數Variant類型說明
response RingBuffer_SetActiveChannels_Response
err zx/Status

RingBuffer_WatchDelayInfo_Result 嚴格

fuchsia.hardware.audio/ring_buffer.fidl 中定義的

序數Variant類型說明
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 頻道