VideoPortStartDma 函数 (video.h)

VideoPortStartDma 函数为 DMA 操作准备系统。 只要有适当的资源可用, VideoPortStartDma 就会创建散点/收集列表,初始化系统资源,并调用视频微型端口驱动程序提供的 HwVidExecuteDma 例程来执行 DMA 操作。

语法

VIDEOPORT_DEPRECATED VIDEOPORT_API VP_STATUS VideoPortStartDma(
  [in]      IN PVOID           HwDeviceExtension,
  [in]      IN PVP_DMA_ADAPTER VpDmaAdapter,
  [in]      IN PVOID           Mdl,
  [in]      IN ULONG           Offset,
  [in, out] IN OUT PULONG      pLength,
  [in]      IN PEXECUTE_DMA    ExecuteDmaRoutine,
  [in]      IN PVOID           Context,
  [in]      IN BOOLEAN         WriteToDevice
);

参数

[in] HwDeviceExtension

指向微型端口驱动程序的设备扩展的指针。

[in] VpDmaAdapter

指向 VP_DMA_ADAPTER 结构的指针,该结构表示总线-主适配器。 此结构是从对 VideoPortGetDmaAdapter 的调用中返回的。

[in] Mdl

指向描述缓冲区的 MDL 的指针。 此指针是从对视频端口驱动程序的 VideoPortLockBuffer 函数的调用中返回的。

[in] Offset

指定 DMA 操作开始的缓冲区中的字节偏移量。 Mdl 参数描述此缓冲区。

[in, out] pLength

指向一个变量的指针,该变量指定请求的传输大小(以字节为单位),该变量将接收要传输的实际大小。 发生以下任一事件时,变量将更新: VideoPortStartDma 返回或调用 HwVidExecuteDma 。 因此,即使在 VideoPortStartDma 返回之前,也可以安全地从 HwVidExecuteDma 中读取此变量。

[in] ExecuteDmaRoutine

指向微型端口驱动程序提供的 HwVidExecuteDma 回调例程的指针。 VideoPortStartDma 调用此例程来对硬件寄存器进行编程并启动实际的 DMA 操作。

[in] Context

指向要传递给微型端口驱动程序 的 HwVidExecuteDma 回调例程的驱动程序确定上下文的指针。 由于 HwVidExecuteDma 回调例程在DISPATCH_LEVEL运行, 因此 Context 指向的数据应位于非分页内存中。

[in] WriteToDevice

指定 DMA 传输的方向。 值为 TRUE 表示从缓冲区传输到设备,值为 FALSE 表示从设备到缓冲区的传输。

返回值

VideoPortStartDma 返回以下状态代码之一:

返回代码 说明
NO_ERROR 操作已成功执行。
ERROR_NOT_ENOUGH_MEMORY 没有足够的系统资源用于此操作。

注解

若要准备 DMA 传输操作, VideoPortStartDma

  • 刷新主机处理器缓存中的内存区域。
  • 生成散点/收集列表。
  • 调用视频微型端口驱动程序的 HwVidExecuteDma 回调。
可能并非所有请求的数据都已传输,因为传输的实际内存量受驱动程序可用的映射寄存器数的限制。 此函数的调用方应检查 在 pLength 返回的实际传输大小,以确定是否仍要传输其他数据。 如果是这样,微型端口驱动程序应调用 VideoPortStartDma (,随后 ,VideoPortCompleteDma) 满足整个传输请求所需的次数。

要求

要求
最低受支持的客户端 在 Windows XP 和更高版本的 Windows 操作系统中可用。
目标平台 桌面
标头 video.h (包括 Video.h)
Library Videoprt.lib
DLL Videoprt.sys
IRQL <=DISPATCH_LEVEL

另请参阅

HwVidExecuteDma

VP_DMA_ADAPTER

VideoPortCompleteDma

VideoPortGetDmaAdapter