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 狀態),或音訊未流動,且音訊硬體未備妥(停止狀態)。
EvtAcxStreamReleaseHardware 事件會將串流狀態從暫停狀態轉換為停止狀態。 驅動程式應該釋放配置給此事件中串流的任何硬體資源,例如 DMA 引擎。 數據流處於 [停止] 狀態之後,驅動程式可能會收到 EvtAcxStreamPrepareHardware 事件,以轉換至 Pause 狀態或 ACXSTREAM 物件可能會終結。
ACX 事件類似於 KS 狀態,如下表所述。
開始狀態 | 結束狀態 | ACX 驅動程式事件已呼叫 | 筆記 |
---|---|---|---|
停 | 獲得 | PrepareHardware | 驅動程式會執行硬體配置和準備 |
獲得 | 暫停 | (沒有電話) | |
暫停 | 跑 | 跑 | |
跑 | 暫停 | 暫停 | |
暫停 | 獲得 | (沒有電話) | |
獲得 | 停 | ReleaseHardware | 驅動程式會發行硬體配置 |
使用數據流完成時,EvtAcxStreamFreeRtPackets 在 EvtAcxStreamReleaseHardware 之後呼叫。 這可讓發行硬體階段完成解除分配頻寬、釋放 DMA 資源和任何其他相關聯的清除,在配置 RT 緩衝區釋出之前發生。
記憶體清除
數據流資源的處置可以在驅動程序的數據流內容清除中完成(而非終結)。 絕對不要處置對象內容中共用的任何項目終結回呼。 本指南適用於所有 ACX 物件。
當最後一個 ref 消失之後,就會叫用終結回呼。
當句柄關閉時,會呼叫數據流的清除回呼。 其中一個例外狀況是驅動程式在其回呼中建立數據流時。 如果在從數據流建立作業傳回之前,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 版本概觀。
要求
要求 | 價值 |
---|---|
標頭 | acxstreams.h |
IRQL | PASSIVE_LEVEL |