PALLOCATE_CAPTURE_DMA_ENGINE回调函数 (hdaudio.h)
例 AllocateCaptureDmaEngine
程为捕获流分配 DMA 引擎。
例程的 AllocateCaptureDmaEngine
函数指针类型定义如下。
语法
PALLOCATE_CAPTURE_DMA_ENGINE PallocateCaptureDmaEngine;
NTSTATUS PallocateCaptureDmaEngine(
[in] PVOID _context,
[in] UCHAR CodecAddress,
[in] PHDAUDIO_STREAM_FORMAT StreamFormat,
[out] PHANDLE Handle,
[out] PHDAUDIO_CONVERTER_FORMAT ConverterFormat
)
{...}
参数
[in] _context
指定来自HDAUDIO_BUS_INTERFACE的 Context 成员的上下文值,HDAUDIO_BUS_INTERFACE_V2或HDAUDIO_BUS_INTERFACE_BDL结构。
[in] CodecAddress
指定编解码器地址。 此参数标识 (SDI) 行中的串行数据,编解码器将捕获数据提供给 HD 音频总线控制器。 具有 n 个 SDI 引脚的总线控制器可以支持最多 n 个 编解码器,其地址范围为 0 到 n-1。
[in] StreamFormat
指定请求的流格式。 此参数指向 HDAUDIO_STREAM_FORMAT类型的调用 方分配结构,该结构指定流的数据格式。
[out] Handle
检索 DMA 引擎的句柄。 此参数指向调用方分配的 HANDLE 变量,例程在其中写入标识 DMA 引擎的句柄。
[out] ConverterFormat
检索转换器格式。 此参数指向调用方分配的 HDAUDIO_CONVERTER_FORMAT 类型的结构,例程将编码格式写入其中。
返回值
AllocateCaptureDmaEngine
如果调用成功保留 DMA 引擎,则返回STATUS_SUCCESS。 否则,可能的返回值包括下表中的错误代码。
返回代码 | 说明 |
---|---|
|
指示 DMA 引擎无法分配足够的内部 FIFO 存储来支持请求的流格式。 |
|
指示没有可用的 DMA 引擎或请求超过可用的带宽资源。 |
|
指示参数值之一不正确 (无效参数值或指针) 错误。 |
注解
此例程分配捕获 DMA 引擎,并指定流的数据格式。 如果成功,例程将输出调用方随后用于标识 DMA 引擎的句柄。
例 AllocateCaptureDmaEngine
程 (DMA 引擎) 保留硬件资源,但不配置 DMA 硬件。 调用此例程以保留 DMA 引擎后,函数驱动程序必须将 DMA 缓冲区分配给 DMA 引擎,并将引擎配置为使用该缓冲区:
- 如果使用 HDAUDIO_BUS_INTERFACE 版本的 HD Audio DDI,则函数驱动程序调用 AllocateDmaBuffer 例程,让 HD Audio 总线驱动程序为 DMA 传输分配数据缓冲区,并将 DMA 引擎设置为使用该缓冲区。
- 如果使用 DDI 的HDAUDIO_BUS_INTERFACE_BDL版本,函数驱动程序将调用 AllocateContiguousDmaBuffer 来分配 DMA 缓冲区,并调用 SetupDmaEngineWithBdl 例程来设置 DMA 引擎以使用该缓冲区。
AllocateCaptureDmaEngine
后,可以通过调用 ChangeBandwidthAllocation 来更改流的格式。
通过 handle 参数,例程输出一个句柄,调用方使用该句柄在后续调用 AllocateDmaBuffer、 ChangeBandwidthAllocation、 FreeDmaBuffer、 SetupDmaEngineWithBdl 和 SetDmaEngineState 时标识分配的 DMA 引擎。 函数驱动程序通过调用 FreeDmaEngine 释放句柄。
通过 converterFormat 参数,例程输出调用方可用于对输入转换器进行编程的流描述符值。 例程将 streamFormat 参数中的信息编码为 16 位整数。 有关详细信息,请参阅 HDAUDIO_CONVERTER_FORMAT。
成功调用 AllocateCaptureDmaEngine
后,DMA 引擎立即处于重置流状态。 在调用 SetDmaEngineState 以将 DMA 引擎更改为正在运行、暂停或停止状态之前,客户端必须先为引擎分配 DMA 缓冲区。
例如,Windows 驱动程序模型 (WDM) 音频驱动程序 AllocateCaptureDmaEngine
在执行 NewStream 方法 (,请参阅 IMiniportWavePci::NewStream) 。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | hdaudio.h (包括 Hdaudio.h) |
IRQL | PASSIVE_LEVEL |