共用方式為


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 事件會將數據流狀態從 [停止] 狀態轉換為 [暫停] 狀態。 驅動程式應該配置此事件中串流所需的任何硬體資源,例如 DMA 引擎。

一旦數據流處於Pause狀態,驅動程式可能會收到 EvtAcxStreamRun 事件以轉換至 [執行] 狀態,或驅動程式可能會收到 EvtAcxStreamReleaseHardware 事件,以轉換為 Stop 狀態。

ACX 事件類似於 KS 狀態,如下表所述。

啟動狀態 結束狀態 呼叫 ACX 驅動程式事件 備註
STOP 獲得 PrepareHardware 驅動程式會執行硬體配置和準備
獲得 PAUSE (無通話)
PAUSE RUN 執行
RUN PAUSE 暫停
PAUSE 獲得 (沒有呼叫)
獲得 STOP ReleaseHardware 驅動程式釋放硬體配置

EvtAcxStreamAllocateRtPackets 會在 EvtAcxStreamPrepareHardware 之前呼叫,以允許在 EvtAcxStreamPrepareHardware 之前進行 RT 封包配置。

緩衝區配置和 DMA

緩衝區配置通常只牽涉到配置系統記憶體的方式,以便與 DMA 硬體搭配使用。 一般而言,緩衝區配置不會對串流硬體有任何影響。 準備硬體階段是用來讓驅動程式準備好執行數據流,方法是完成保留頻寬、程序設計 DMA 等工作,以及完成要求執行數據流的準備。 一般而言,準備硬體程序代碼會利用配置的緩衝區來準備 DMA 和相關活動,以便開始數據流。

記憶體清除

在 EvtAcxStreamPrepareHardware 之前,封包配置 (系統上) 實體記憶體完成,而且其發行 (EvtAcxStreamFreeRtPackets) 會在 EvtAcxStreamReleaseHardware 之後完成。 此模式是內嵌在上層音訊數據流設定流程中的現有舊版行為, (ks 配置緩衝區屬性 init) 。

數據流資源的處置可以在驅動程序的數據流內容清除中完成, (不會終結) 。 絕對不要處置對象內容終結回呼中共用的任何專案。 本指南適用於所有 ACX 物件。

當最後一個 ref 消失之後,就會叫用終結回呼,但未知。

當句柄關閉時,會呼叫數據流的清除回呼。 這是驅動程式在其回呼中建立數據流時的其中一個例外狀況。 如果 ACX 無法在從數據流建立作業傳回之前,將此數據流新增至其數據流網橋,則會取消數據流異步,而目前的線程會將錯誤傳回至 create-stream 用戶端。 數據流目前不應該配置任何 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

另請參閱