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