Share via


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 イベントは、ストリーム状態を一時停止状態から停止状態に切り替えます。 ドライバーは、DMA エンジンなど、このイベントでストリーミング用に割り当てられたハードウェア リソースを解放する必要があります。 ストリームが停止状態になると、ドライバーは EvtAcxStreamPrepareHardware イベントを受け取って Pause 状態に移行するか、ACXSTREAM オブジェクトが破棄される可能性があります。

ACX イベントは、次の表で説明するように KS 状態に似ています。

開始状態 終了状態 呼び出された ACX ドライバー イベント メモ
STOP 取得 PrepareHardware ドライバーは、ハードウェアの割り当てと準備を実行します。
取得 PAUSE (通話なし)
PAUSE 実行 実行
実行 PAUSE 一時停止
PAUSE 取得 (通話なし)
取得 STOP ReleaseHardware ドライバーがハードウェア割り当てを解放する

ストリームの操作が完了すると、 EvtAcxStreamReleaseHardware の後に EvtAcxStreamFreeRtPackets が呼び出されます。 これにより、割り当てられた RT バッファーが解放される前に、解放ハードウェア フェーズで帯域幅の割り当て解除、DMA リソースの解放、およびその他の関連するクリーンアップを完了できます。

メモリクリーンアップ

ストリームのリソースの破棄は、ドライバーのストリーム コンテキストのクリーンアップ (破棄ではなく) で行うことができます。 オブジェクトのコンテキストで共有されているものを破棄してコールバックを破棄しないでください。 このガイダンスは、すべての ACX オブジェクトに適用されます。

破棄コールバックは、最後の ref がなくなった後、不明な場合に呼び出されます。

ハンドルが閉じられると、ストリームのクリーンアップ コールバックが呼び出されます。 これに対する 1 つの例外は、ドライバーがコールバックでストリームを作成したときです。 ACX がストリーム作成操作から戻る直前にこのストリームをストリーム ブリッジに追加できなかった場合、ストリームは非同期で取り消され、現在のスレッドは create-stream クライアントにエラーを返します。 ストリームには、この時点で 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 バージョンの概要」を参照してください。

要件

要件
Header acxstreams.h
IRQL PASSIVE_LEVEL

こちらもご覧ください