TransferCodecVerbs ルーチンは、1 つ以上のコマンドをコーデックまたはコーデックに転送し、それらのコマンドへの応答を取得します。
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_INTERFACE、HDAUDIO_BUS_INTERFACE_V2、、または HDAUDIO_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を返します。 それ以外の場合、ルーチンは適切なエラー コードを返します。 次の表に、可能な戻り状態コードを示します。
| リターン コード | 形容 |
|---|---|
|
非ページ メモリが不足しているため、コマンド キューに要求を追加できなかったことを示します。 |
備考
このルーチンは、HD オーディオ バス ドライバーに 1 つ以上のコーデック コマンドを送信します。 バス ドライバーは、コーデックにコマンドを発行し、コマンドに対するコーデックの応答を取得し、呼び出し元に応答を出力します。
呼び出し元は、HDAUDIO_CODEC_TRANSFER構造体の配列内のコマンドを指定します。 各構造体には、コマンドとそのコマンドに対するコーデックの応答の両方のストレージが含まれています。 TransferCodecVerbs 呼び出す前に、呼び出し元は配列内の各構造体のコマンドを入力します。 各コマンドが完了すると、HD Audio バス ドライバーはコーデックの応答を取得し、それを構造体に書き込みます。 最後のコマンドが完了すると、呼び出し元は配列から応答を読み取ることができます。
ルーチンは、同期的または非同期的に動作できます。
- 呼び出し元が入力パラメーター コールバックの値 NULL を指定した場合、HD オーディオ バス ドライバーは、codecTransfer 配列内のコマンドを同期的に完了します。 (つまり、コーデックがすべてのコマンドを処理し、それらのコマンドへの応答が使用可能になった後にのみ、ルーチンが返されます)。
- 呼び出し元が コールバック パラメーターに対して非NULL 値を指定した場合、ルーチンは非同期的に動作します。 (つまり、ルーチンは、コーデックがすべてのコマンドを処理するのを待たずに、コマンドを内部キューに追加した直後に戻ります)。コーデックがコマンドを処理した後、HD オーディオ バス ドライバーはコールバック ルーチンを呼び出します。 非同期の場合、呼び出し元は、バス ドライバーがコールバック ルーチンを呼び出す前に、コマンドへの応答を読み取ろうとしないでください。
typedef VOID
(*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)
(HDAUDIO_CODEC_TRANSFER *, PVOID);
最初の呼び出しパラメーターは、コーデック コマンドとコールバックをトリガーした応答を含む codecTransfer 配列要素へのポインターです。 2 つ目の呼び出しパラメーターは、TransferCodecVerbs ルーチンの callbackContext パラメーターで指定したのと同じコンテキスト値です。
成功した場合、TransferCodecVerbs はSTATUS_SUCCESSを返します。 この状態コードの意味は、ルーチンが同期的に動作するか非同期的に動作するかによって異なります。
- 同期の場合 (コールバック が NULL )、STATUS_SUCCESSは、バス ドライバーが codecTransfer 配列内のすべてのコマンドをコーデックに持ち、ルーチンがそれらのコマンドに対するすべての応答を配列に書き込んだことを意味します。 ただし、呼び出し元は、個々の応答を確認して、それらが有効かどうかを判断する必要があります。 コーデックのタイムアウトまたは FIFO オーバーランが原因で、個々の応答が無効になる可能性があります。
- 非同期の場合 (コールバック が非NULL) の場合、STATUS_SUCCESSは、ルーチンが HD Audio バス ドライバーの内部キューにコマンドを正常に追加したことを意味します。 呼び出し元は、バス ドライバーがコールバック ルーチンを呼び出すまで、これらのコマンドへの応答を読み取ろうとしないでください。
コールバック パラメーターが NULL 場合、呼び出し元は IRQL PASSIVE_LEVELで実行されている必要があります。 コールバック が NULLでない場合、呼び出し元は IRQL = DISPATCH_LEVEL で < を呼び出すことができます。その場合、呼び出しはコーデックがすべてのコマンドを処理するのを待たずに直ちに戻ります。コマンドが完了すると、HD オーディオ バス ドライバーは IRQL DISPATCH_LEVELでコールバック ルーチンを呼び出します。
呼び出し元は、非ページ プールから codecTransfer 配列を割り当てる必要があります。
必要条件
| 要件 | 価値 |
|---|---|
| ターゲット プラットフォーム の | デスクトップ |
| ヘッダー | hdaudio.h (Hdaudio.h を含む) |
| IRQL | 「解説」セクションを参照してください。 |