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 | RUN | 執行 | |
RUN | PAUSE | 暫停 | |
PAUSE | 獲得 | (沒有呼叫) | |
獲得 | STOP | ReleaseHardware | 驅動程式會釋出硬體配置 |
使用數據流完成時, EvtAcxStreamFreeRtPackets 會在 EvtAcxStreamReleaseHardware 之後呼叫。 這可讓發行硬體階段完成解除分配頻寬、釋放 DMA 資源和任何其他相關聯的清除,在釋放配置的 RT 緩衝區之後才會發生。
記憶體清除
數據流資源的處置可以在驅動程序的數據流內容清除中完成, (不會終結) 。 絕對不要處置對象內容終結回呼中共用的任何專案。 本指南適用於所有 ACX 物件。
當最後一個 ref 消失之後,就會叫用終結回呼。
關閉句柄時,會呼叫數據流的清除回呼。 這是驅動程式在其回呼中建立數據流時的一個例外狀況。 如果 ACX 無法在從 stream-create 作業傳回之前,將此數據流新增至其串流網橋,則會取消串流異步,而目前的線程會將錯誤傳回至 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 版本概觀。
規格需求
需求 | 值 |
---|---|
標頭 | acxstreams.h |
IRQL | PASSIVE_LEVEL |