共用方式為


IMiniportWaveRTStream::AllocateAudioBuffer 方法 (portcls.h)

AllocateAudioBuffer 方法會配置音訊數據的循環緩衝區。

語法

NTSTATUS AllocateAudioBuffer(
  ULONG               RequestedSize,
  PMDL                *AudioBufferMdl,
  ULONG               *ActualSize,
  ULONG               *OffsetFromFirstPage,
  MEMORY_CACHING_TYPE *CacheType
);

參數

RequestedSize

指定音訊緩衝區的要求大小,以位元組為單位。

AudioBufferMdl

描述音訊緩衝區的記憶體描述元清單輸出指標 (MDL) 。 此參數指向呼叫端配置的指標變數,方法會將指標寫入至 MDL。 如需 Windows 核心 MDL 的一般資訊,請參閱 使用 MDLs

ActualSize

配置緩衝區的實際大小輸出指標,以位元組為單位。 此參數指向方法寫入大小值的ULONG變數。

OffsetFromFirstPage

緩衝區位移的輸出指標,以位元組為單位,從 MDL 的第一頁開始。 此參數指向呼叫端配置的 ULONG 變數,方法會將位移值寫入其中。

CacheType

指定用戶端要求音訊緩衝區的快取類型。 此參數是MEMORY_CACHING_TYPE列舉值。 如需詳細資訊,請參閱下面的<備註>一節。

傳回值

這個方法會傳回NTSTATUS。 如果呼叫成功,AllocateAudioBuffer 會傳回STATUS_SUCCESS。 否則,方法會傳回適當的錯誤狀態代碼。 下表顯示一些可能的錯誤狀態代碼。

傳回碼 Description
STATUS_UNSUCCESSFUL 驅動程式不支援緩衝區屬性的指定組合。
STATUS_INSUFFICIENT_RESOURCES 記憶體不足,無法配置緩衝區。
STATUS_DEVICE_NOT_READY 裝置未就緒。

備註

注意:Intel 高畫質音訊編解碼器的迷你埠必須指定 MmWriteCombined 的 CacheType,以確保快取一致性。 這是因為 Intel 高畫質音訊控制器可能設定為非探查作業。

從用戶端收到 KSPROPERTY_RTAUDIO_BUFFER 要求之後,埠驅動程式會呼叫AllocateAudioBuffer方法來配置埠驅動程式稍後可以對應至用戶端虛擬位址空間的循環緩衝區。

在呼叫 AllocateAudioBuffer 期間,迷你埠驅動程式會呼叫 IPortWaveRTStream::AllocatePagesForMdl 或 IPortWaveRTStream::AllocateContiguousPagesForMdl 來配置迴圈緩衝區。 迷你埠驅動程式也會將音訊硬體從或錄製到此緩衝區,但不會啟動 DMA 傳輸,直到埠驅動程式呼叫 IMiniportWaveRTStream::SetState 與 State=KSSTATE_RUN為止。 AllocateAudioBuffer 方法的輸出參數包括音訊緩衝區的 MDL、驅動程式配置緩衝區的實際大小,以及從 MDL 中第一頁開頭開始緩衝區的位移。

RequestedSize 是輸入參數,指出用戶端要求音頻緩衝區的大小。 ActualSize 是輸出參數,表示音訊緩衝區的實際大小。

音訊裝置可能需要音訊緩衝區在範例界限上開始和結束,或符合其他類型的硬體相依對齊條件約束。 如果有足夠的記憶體可用,則緩衝區的實際大小是要求的大小四捨五入 (向上或向下) 到最接近的樣本或其他硬體限制界限。 實際大小至少必須是要求的大小;否則,音訊會話 API (WASAPI) 音訊引擎將不會使用緩衝區,而串流建立將會失敗。

規格需求

需求
標頭 portcls.h
IRQL PASSIVE_LEVEL

另請參閱

IMiniPortWaveRTStream