weixin_41730101 2018-02-11 04:17 采纳率: 0%
浏览 1025
已结题

视频采集卡使用common-buffer bus-master DMA刷新问题

项目基于AVstream开发视频采集卡,目前遇到在个别电脑上,采集视频中有雪花点,如果此时按F5键,雪花现象会立刻消失,几秒后重新出现,基于上述现象,猜测是DMA刷新问题导致的。
使用AllocateCommonBuffer分配两个视频帧大小物理内存,在设备中断中,交换前后buffer,分别送显和触发下一帧传送。搜索发现要使用FlushAdapterBuffers来刷新,但WDK提到common buffer master模式,不需要执行adaptercontrol,所不清楚FlushAdapterBuffers中MapRegisterBase参数从哪里获取到。

 BOOLEAN PflushAdapterBuffers(
  PDMA_ADAPTER DmaAdapter,
  PMDL Mdl,
  PVOID MapRegisterBase,
  PVOID CurrentVa,
  ULONG Length,
  BOOLEAN WriteToDevice
)

MapRegisterBase

Specifies the map registers allocated for the DMA operation. The system passes this value to the driver's AdapterControl routine.

使用公用缓冲区的master模式DMA传输 如果设备是总线主控模式,那么在分配公用缓冲区后就没有必要调用AllocateAdapterChannel、MapTransfer、FreeMapRegisters函数。 因为AllocateCommonBuffer也能保留必要的映射寄存器。每个总线主控设备都有一个适配器对象,该对象不与其它设备共享,因此不必等待。由于拥有可以在任何时间都能访问缓冲区的虚拟地址,又由于设备的总线主控能力允许使用物理地址(由AllocateCommonBuffer返回)访问该缓冲区,所以没有额外的工作需要做。 这是所有形式的DMA传输中最简单的。

  • 写回答

1条回答 默认 最新

  • threenewbee 2018-02-11 09:52
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料