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之间的队列,直到它被取消。