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 事件,以转换为暂停状态,或者可能会销毁 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 |