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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划