硬體連線和啟動
必須透過 XDspConnect 或 XDspConnectWithMaximumStreamLimit 與硬體加速單元建立連線。呼叫端會使用下列參數設定連線的需求:-
baseBuffer - 指向使用者配置記憶體的指標,此記憶體必須足以容納將傳遞給硬體的輸入、輸出、包絡緩衝區和/或區塊乘數緩衝區。此記憶體應透過 XMemAlloc 以下列屬性配置:XALLOC_MEMTYPE_PHYSICAL_CACHEABLE、XALLOC_PAGESIZE_64KB、XALLOC_ALIGNMENT_64K。這些屬性應使用
MAKE_XALLOC_ATTRIBUTES()設定,如下列範例所示。在 XDspDisconnect 呼叫成功之前,不應釋放此記憶體。此緩衝區的大小應至少為 64KB。 - baseBufferLength - baseBuffer 的長度 (以位元組為單位)。此緩衝區應至少為 64KB,且不超過 500 MB。
- aggregateImpulseResponseInSeconds - 代表將使用 XDspActivate 搭配 XDspProcessType::Convolution 同時啟用的所有個別脈衝回應的總持續時間。如果此值為 0,則無法啟用任何使用 XDspProcessType::Convolution 的串流。
- handle - 指向 XDspClientHandle 的指標,用來保存此呼叫所傳回的控制代碼。
串流的啟用和停用
與裝置建立連線之後,呼叫端應傳送串流啟用命令以進行摺積、FFT 或 IFFT。呼叫端必須在 XDspActivationParameters 中指定 XDspProcessType、區塊框架計數、聲道計數、以浮點數為單位的脈衝回應長度,以及指向頻域中脈衝回應資料的指標。只允許單聲道或立體聲串流。對於 XDspProcessType::ForwardFourierTransform 和 XDspProcessType::inverseFourierTransform,XDspActivationParameters::impulseResponse 應為 nullptr,且 XDspActivationParameters::impulseResponseLengthInFloats = 0。應適當地設定 XDspActivationOptions。 以下是啟用一個摺積串流的程式碼。- 以剛好 blockFrameCount 的資料填入輸入緩衝區。
- 以適當的值以及 16 位元組對齊的輸入和輸出緩衝區填入 XDspCommand。
- 呼叫 XDspSubmitCommand 將命令提交至硬體。此函式會傳回命令序號,可用來追蹤傳送至硬體的命令數目。
- 若要套用包絡,請以脈衝回應篩選器每個區塊的增益值填入包絡緩衝區,並呼叫 XDspSubmitCommandWithEnvelope,並持續以相同的包絡緩衝區進行此呼叫,直到不再需要包絡或需要變更包絡為止。
- 不再需要包絡時,請以 nullptr 作為 envelopeBuffer 呼叫 XDspSubmitCommand 或 XDspSubmitCommandWithEnvelope。請注意,以 nullptr 作為 envelopeBuffer 的 XDspSubmitCommandWithEnvelope 等同於 XDspSubmitCommand。
- 切換包絡時,只有在硬體已處理所有使用目前 envelopeBuffer 的命令且結果已被取回時,才能為下一個包絡更新該緩衝區。否則,請使用不同的包絡緩衝區。
