共用方式為


PTRANSFER_CODEC_VERBS回呼函式 (hdaudio.h)

TransferCodecVerbs 例程會將一或多個命令傳送至編解碼器或編解碼器,並擷取這些命令的回應。

TransferCodecVerbs 例程的函式指標類型定義如下。

語法

PTRANSFER_CODEC_VERBS PtransferCodecVerbs;

NTSTATUS PtransferCodecVerbs(
  [in]      PVOID _context,
  [in]      ULONG Count,
  [in, out] PHDAUDIO_CODEC_TRANSFER CodecTransfer,
  [in]      PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
  [in]      PVOID Context
)
{...}

參數

[in] _context

指定 HDAUDIO_BUS_INTERFACEHDAUDIO_BUS_INTERFACE_V2HDAUDIO_BUS_INTERFACE_BDL 結構之 Context 成員的內容值。

[in] Count

指定 codecTransfer 陣列中的項目數目。

[in, out] CodecTransfer

HDAUDIO_CODEC_TRANSFER 結構的陣列指標。 每個數位元素都是一個結構,其中包含來自呼叫端的輸出命令和編解碼器的對應輸入響應的記憶體。

[in] Callback

回呼例程的函式指標。 此參數是類型HDAUDIO_TRANSFER_COMPLETE_CALLBACK的函式指標。 參數可以指定為 NULL 。 如需詳細資訊,請參閱下列一節。

[in] Context

回呼例程的內容值。 呼叫端會將內容值轉換成 PVOID 類型。 以異步方式完成命令之後,HD 音訊總線驅動程式會將內容值傳遞至回呼例程做為呼叫參數。

傳回值

TransferCodecVerbs 會在呼叫成功時傳回STATUS_SUCCESS。 否則,例程會傳回適當的錯誤碼。 下表顯示可能的傳回狀態代碼。

傳回碼 描述
STATUS_NO_MEMORY
表示由於記憶體不足而無法將要求新增至命令佇列。

言論

此例程會將一或多個編解碼器命令提交至 HD 音訊總線驅動程式。 總線驅動程式會將命令發出給編解碼器、擷取編解碼器對命令的回應,並將響應輸出給呼叫端。

呼叫端會指定HDAUDIO_CODEC_TRANSFER結構陣列中的命令。 每個結構都包含命令的記憶體,以及編解碼器對該命令的回應。 呼叫 TransferCodecVerbs之前,呼叫端會填入陣列中每個結構中的命令。 當每個命令完成時,HD 音訊總線驅動程式會擷取編解碼器的回應,並將它寫入結構中。 在最後一個命令完成之後,呼叫端可以從陣列讀取回應。

例程可以同步或異步作:

  • 如果呼叫端針對輸入參數的值指定 NULL回呼,則 HD 音訊總線驅動程式會同步完成 codecTransfer 陣列中的命令。 (換句話說,例程只會在編解碼器處理所有命令之後傳回,而且這些命令的回應可供使用。
  • 如果呼叫端為 回呼 參數指定非NULL 值,則例程會以異步方式運作。 (換句話說,例程會在將命令新增至其內部佇列后立即傳回,而不需要等待編解碼器處理所有命令。編解碼器處理命令之後,HD 音訊總線驅動程式會呼叫回呼例程。 在異步案例中,呼叫端不應該在總線驅動程式呼叫回呼例程之前,嘗試讀取命令的回應。
回呼參數的函式指標類型定義為:
typedef VOID
  (*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)
    (HDAUDIO_CODEC_TRANSFER *, PVOID);

第一個呼叫參數是 codecTransfer 陣列元素的指標,其中包含編解碼器命令和觸發回呼的回應。 第二個呼叫參數是先前在 TransferCodecVerbs 中指定的內容值, 例程的 callbackContext 參數。

如果成功,TransferCodecVerbs 會傳回STATUS_SUCCESS。 此狀態代碼的意義取決於例程是以同步或異步方式運作:

  • 在同步案例中(回呼NULL),STATUS_SUCCESS表示總線驅動程式會將 codecTransfer 陣列中的所有命令寫入編解碼器,而且例程已將所有回應寫入這些命令數位。 不過,呼叫端必須檢查個別的回應,以判斷它們是否有效。 由於編解碼器逾時或 FIFO 超支,個別回應可能無效。
  • 在異步案例中(回呼 為非NULL),STATUS_SUCCESS只表示例程已成功將命令新增至 HD 音訊總線驅動程式的內部佇列。 在總線驅動程式呼叫回呼例程之前,呼叫端不得嘗試讀取這些命令的回應。
如果回應因 FIFO 滿溢而無效,可能是編解碼器回應命令,但由於回應大小不足的回應輸入信號緩衝區 (RIRB) 而遺失。 如果 FIFO 超支不是無效回應的原因,則失敗可能是因為編解碼器沒有及時回應(逾時)。 在此情況下,呼叫端可以假設命令未連線到編解碼器。

如果 回呼 參數 NULL,呼叫端必須在 IRQL PASSIVE_LEVEL執行。 如果 回呼NULL,呼叫端可以在 IRQL <= DISPATCH_LEVEL 呼叫 TransferCodecVerbs,在此情況下,呼叫會立即傳回,而不需要等待編解碼器處理所有命令:命令完成之後,HD 音訊總線驅動程式會在 IRQL DISPATCH_LEVEL呼叫回呼例程。

呼叫端必須從非分頁集區配置 codecTransfer 陣列。

要求

要求 價值
目標平臺 桌面
標頭 hdaudio.h (包括 Hdaudio.h)
IRQL 請參閱一節。

另請參閱

HDAUDIO_BUS_INTERFACE

HDAUDIO_BUS_INTERFACE_BDL

HDAUDIO_BUS_INTERFACE_V2

HDAUDIO_CODEC_TRANSFER