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运行,因此 上下文 点的数据应位于非分页内存中。

[in] WriteToDevice

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

返回值

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

返回代码 描述
NO_ERROR 该作已成功执行。
ERROR_NOT_ENOUGH_MEMORY 此作没有足够的系统资源。

言论

若要准备 DMA 传输作,VideoPortStartDma

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

要求

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

另请参阅

HwVidExecuteDma

VP_DMA_ADAPTER

VideoPortCompleteDma

VideoPortGetDmaAdapter