KS相机驱动
+ -

AVStream数据流

2025-02-19 12 0

在老式的StreamClass驱动中,驱动程序负责维护自己的数据队列(SRB : Stream Requst Block Queues),但是对于AVStream驱动则是通过Stream Pointer抽像,实现对AVSteam数据帧的引用。

对于以引脚为中心的处理(pin-centeric processing)的大数据迷你驱动,使用流指针管理其自己的数据队列。每一个Pin都有自己独立的数据缓冲区队列。当数据包到达引脚时(无论是读还是写请求),AVStream都会将数据包添加其队列中,然后调用其对于的管脚处理派遣函数CCapturePin::DispatchProcess.

所以,AVStream是不直接使用数据流指针的。

  • 前导边沿指针永远指向Pin队列的最新的Frame
  • 后导边沿指针永远指向Pin队列的最旧的Frame

对于pin-centric的驱动,可通对过如下操作

  • 创建
    -迷你驱动可以通过KsStreamPointerClone创建新的数据流指针。
  • 操作
    • KsStreamPointerAdvance
    • KsStreamPointerUnlock
    • KsStreamPointerAdvanceOffsets
  • 结束
    • [可选]KsStreamPointerUnlock
    • KsStreamPointerDelete.

minidriver负责进行移前streampointer,但是对于下面两种情况,则由则由系统实现。

  • 第一种:新帧到来时,先前队列为空,则AVStream框架自动将前沿反映针指向该frame
  • 第二种;前沿指针指向一个frame,但是与其关联的IPR已经被取消,则AVStream则前沿使其指向一个新的frame.

即使一个frame没有被stream pointer引用,其也会在leading和tailing之间的队列,直到它被取消。

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!