EVT_ACX_STREAM_PREPARE_HARDWARE コールバック関数 (acxstreams.h)
EvtAcxStreamPrepareHardware イベントは、ストリーミング用のハードウェアを準備するようにドライバーに指示します。
構文
EVT_ACX_STREAM_PREPARE_HARDWARE EvtAcxStreamPrepareHardware;
NTSTATUS EvtAcxStreamPrepareHardware(
ACXSTREAM Stream
)
{...}
パラメーター
Stream
ACXSTREAM オブジェクトは、回線によって作成されたオーディオ ストリームを表します。 ストリームは、親回線の要素に基づいて作成された要素の一覧で構成されます。 詳細については、ACX - ACX オブジェクトの概要を参照してください。
戻り値
呼び出しが成功した場合に STATUS_SUCCESS
を返します。 それ以外の場合は、適切なエラー コードが返されます。 詳細については、NTSTATUS 値 の使用に関するを参照してください。
備考
AcxStream では、さまざまな状態がサポートされています。 これらの状態は、オーディオが流れている (RUN 状態)、オーディオがフローしていないが、オーディオ ハードウェアが準備されている (PAUSE 状態)、またはオーディオが流れず、オーディオ ハードウェアが準備されていない (STOP 状態) 場合を示します。
EvtAcxStreamPrepareHardware イベントは、ストリームの状態を Stop 状態から Pause 状態に遷移します。 ドライバーは、DMA エンジンなど、このイベントのストリーミングに必要なハードウェア リソースを割り当てる必要があります。
ストリームが一時停止状態になると、ドライバーは、EvtAcxStreamRun イベントを受け取って実行状態に遷移するか、ドライバーが停止状態に遷移する EvtAcxStreamReleaseHardware イベントを受け取ることがあります。
ACX イベントは、次の表に示すように KS 状態に似ています。
開始状態 | 終了状態 | 呼び出された ACX ドライバー イベント | 筆記 |
---|---|---|---|
止める | 取得する | PrepareHardware | ドライバーがハードウェアの割り当てと準備を実行する |
取得する | 休止 | (通話なし) | |
休止 | 走る | 走る | |
走る | 休止 | 休止 | |
休止 | 取得する | (通話なし) | |
取得する | 止める | ReleaseHardware | ドライバーがハードウェア割り当てを解放する |
EvtAcxStreamAllocateRtPackets EvtAcxStreamPrepareHardware より前に呼び出され、EvtAcxStreamPrepareHardware の前に RT パケットの割り当てが行われるのを許可します。
バッファー割り当てと DMA
通常、バッファー割り当てには、DMA ハードウェアで使用できるようにシステム メモリの割り当てのみが含まれます。 通常、バッファー割り当てはストリーミング ハードウェアには影響しません。 ハードウェア準備フェーズは、帯域幅の予約、DMA のプログラミング、ストリームの実行要求の準備などのタスクを完了することで、ドライバーがストリームを実行する準備を行う際に使用されます。 通常、準備ハードウェア コードでは、割り当てられたバッファーを使用して DMA と関連アクティビティを準備し、ストリームを開始する準備をします。
メモリクリーンアップ
パケットの割り当て (システム上の物理メモリ) は EvtAcxStreamPrepareHardware の前に行われ、そのリリース (EvtAcxStreamFreeRtPackets) は EvtAcxStreamReleaseHardware の後に行われます。 このパターンは、上位レイヤーのオーディオ ストリームセットアップ フロー (ks allocate buffer prop init) に埋め込まれている既存のレガシ動作です。
ストリームのリソースの破棄は、ドライバーのストリーム コンテキストのクリーンアップで行うことができます (破棄されません)。 オブジェクトのコンテキスト破棄コールバックで共有されているものは破棄しないでください。 このガイダンスは、すべての ACX オブジェクトに適用されます。
破棄コールバックは、最後の ref がなくなった後、不明な場合に呼び出されます。
ストリームのクリーンアップ コールバックは、ハンドルが閉じられたときに呼び出されます。 これに対する 1 つの例外は、ドライバーがコールバックでストリームを作成したときです。 ストリーム作成操作から戻る直前に ACX がこのストリームをストリーム ブリッジに追加できなかった場合、ストリームは非同期で取り消され、現在のスレッドは作成ストリーム クライアントにエラーを返します。 ストリームには、この時点で mem 割り当てを割り当てないようにする必要があります。
例
使用例を次に示します。
ACX_STREAM_CALLBACKS streamCallbacks;
ACX_STREAM_CALLBACKS_INIT(&streamCallbacks);
streamCallbacks.EvtAcxStreamPrepareHardware = Codec_EvtStreamPrepareHardware;
...
status = AcxStreamInitAssignAcxStreamCallbacks(StreamInit, &streamCallbacks);
#pragma code_seg("PAGE")
NTSTATUS
Codec_EvtStreamPrepareHardware(
_In_ ACXSTREAM Stream
)
{
PSTREAM_CONTEXT ctx;
NTSTATUS status;
PAGED_CODE();
ctx = GetStreamContext(Stream);
status = AllocateStreamHardware(Stream);
if (NT_SUCCESS(status))
{
ctx->StreamState = AcxStreamStatePause;
}
return status;
}
ACX の要件
最小 ACX バージョン: 1.0
ACX バージョンの詳細については、ACX バージョンの概要 参照してください。
必要条件
要件 | 価値 |
---|---|
ヘッダー | acxstreams.h |
IRQL | PASSIVE_LEVEL |
関連項目
- acxstreams.h ヘッダー を する
- EVT_ACX_STREAM_RUN_HARDWARE
- EVT_ACX_STREAM_PAUSE_HARDWARE
- EVT_ACX_STREAM_RELEASE_HARDWARE