KS相机驱动
+ -

AVStreamCamera

2025-02-19 21 0

AVStreamCamera是基于KS框架弄的一个虚拟相机。

当然,对于USB虚拟相机,之前搞了很多个了。都在USB中文网上有相关的技术文档。

115755608467

AVStream本人的理解是其MINI端口驱动分为三个层次:

  • 设备 - KSDEVICE_DESCRIPTOR
  • Filter - KSFILTER_DESCRIPTOR
    • Pin - KSPIN_DESCRIPTOR_EX
    • Node
    • Interfaces
    • connection

其三种类型分别向框架其对应的描述符(工厂),最终由系统创建其对应的实例。
121720308178

AVStreamCamera的工作流程

学习驱动代码的关键点就是理解代码流程及回调的功能。

对于一个AVStream相机的打开流程如下:

Create CCaptureFilter
//以下是支持的几种格式分辨率分别校验的过程
CCapturePin::IntersectHandler      STATUS_BUFFER_OVERFLOW 3
CCapturePin::IntersectHandler      STATUS_SUCCESS 5
CCapturePin::IntersectHandler      STATUS_BUFFER_OVERFLOW 3
CCapturePin::IntersectHandler      STATUS_SUCCESS 5
CCapturePin::IntersectHandler      STATUS_BUFFER_OVERFLOW 3
CCapturePin::IntersectHandler      STATUS_SUCCESS 5
CCapturePin::IntersectHandler      STATUS_BUFFER_OVERFLOW 3
CCapturePin::IntersectHandler      STATUS_SUCCESS 5

//打开相机时,指定的格式
CCapturePin::DispatchSetFormat  OldFormat=0000000000000000 Status=0
CCapturePin::DispatchCreate
Create CCapturePin
FromState:KSSTATE_STOP ------> ToState:KSSTATE_ACQUIRE

FromState:KSSTATE_ACQUIRE ------> ToState:KSSTATE_PAUSE

FromState:KSSTATE_PAUSE ------> ToState:KSSTATE_RUN

CCapturePin::Process 0
CCapturePin::Process 1
CCapturePin::CompleteMappings 0
CCapturePin::Process 2
CCapturePin::CompleteMappings 1

...

CCapturePin::SetState(FromState:KSSTATE_RUN ------> ToState:KSSTATE_PAUSE)
CCapturePin::SetState(FromState:KSSTATE_PAUSE ------> ToState:KSSTATE_ACQUIRE)
CCapturePin::SetState(FromState:KSSTATE_ACQUIRE ------> ToState:KSSTATE_STOP)

Cleanup CCapturePin
~CCapturePin
Cleanup CCaptureFilter

从日志来看:

  • Filter层面
    • 使用软件打开相机时,才会创建Filter
    • 调用IntersectHandler进行格式枚举及协商
    • DispatchSetFormat 格式确认
  • Pin层面
    • 创建数据流Pin
    • 调用CCapturePin::SetState,Pin工作状态变换
    • 调用CCapturePin::Process获数据传输

115846768151

0 篇笔记 写笔记

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

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

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