GetShapeDmaFramesAvailable
获取可供读取的帧数。Syntax
Parameters
context _In_Type: SHAPE_DMA_CONTEXT* 指向 SHAPE_DMA_CONTEXT 结构的指针。
Return value
Type: UINT32 可供读取的帧数。Remarks
你可以通过确保音频缓冲区足够大且以规则时间间隔(与缓冲区大小相关)对数据进行流式传输来避免直接内存访问 (DMA) 命令被阻塞。例如,如果你一次流式传输四个硬件帧,请确保缓冲区中包含这些帧数的若干倍(至少为八帧的双缓冲),以便硬件能够在游戏的读指针之前写入。或者,你可以在提交下一个流程图之前强制清空缓冲区(消费、更新 DMA 读指针,然后提交流程图)。有关详细信息,请参阅 SHAPE 概述 中的阻塞的命令。 DMA 系统支持读写功能,并具备浮点与整数之间的自动转换。DMA 系统使用循环缓冲区,该缓冲区包含以 128 个采样为一块的去交错采样。 DMA 处理器允许可扩展硬件音频处理引擎 (SHAPE) 将数据从混合缓冲区发送到主系统内存,并将数据从主系统提取到混合缓冲区以供进一步处理。DMA 以块为单位进行,一次传输一个音频帧的数据。为便于对块交错数据的处理,通过跳跃值指定在读取或写入采样时(从基地址开始)要跳过的系统内存中音频帧块的数量。因此,多声道流每个声道都需要一个 DMA 上下文。 音频数据采样始终以 32 位值进行读写,根据 SHAPE_DMA_CONTEXT 结构的floatConvert 标志的指定,可以是整数或浮点数。请注意,DMA 的方向(读或写)是在 DMA 命令中指定的,而不是在 DMA 上下文中。这有助于减少数据带宽的占用。DMA 引擎不具备信号处理能力,但可以执行浮点到整数(或整数到浮点)的转换。这使应用程序 CPU 能够以浮点格式处理数据采样。
若要计算 DMA 缓冲区的大小,请使用以下公式:
