KS相机驱动
+ -

Pin回调SetDeviceState

2025-02-26 9 0

当KSPIN改变状态时,调用该回调。

typedef struct {
  PFNKSPINIRP  Create;
  PFNKSPINIRP  Close;
  PFNKSPIN  Process;
  PFNKSPINVOID  Reset;
  PFNKSPINSETDATAFORMAT  SetDataFormat;
  PFNKSPINSETDEVICESTATE  SetDeviceState; //改变状态
  PFNKSPIN  Connect;
  PFNKSPINVOID  Disconnect;
  const KSCLOCK_DISPATCH*  Clock;
  const KSALLOCATOR_DISPATCH*  Allocator;
} KSPIN_DISPATCH, *PKSPIN_DISPATCH;

设置状态的函数声名为:

NTSTATUS
  AVStrMiniPinSetDeviceState(
    IN PKSPIN  Pin,
    IN KSSTATE  ToState,
    IN KSSTATE  FromState);
    );

对应的状态有4个,而FromState给示的是上一下状态,所以有了状态的切换。

typedef enum {
  KSSTATE_STOP;
  KSSTATE_ACQUIRE;
  KSSTATE_PAUSE;
  KSSTATE_RUN;
} KSSTATE;
  • KSSTATE_STOP:最小资源消耗状态
  • KSSTATE_ACQUIRE :正在获取资源
  • KSSTATE_PAUSE :正准备运行到KSSTATE_RUN状态。
  • KSSTATE_RUN :正在进行流传输

状态切换

打开相机时

CCapturePin::SetState FromState:KSSTATE_STOP ———> ToState:KSSTATE_ACQUIRE
CCapturePin::SetState FromState:KSSTATE_ACQUIRE ———> ToState:KSSTATE_PAUSE
CCapturePin::SetState FromState:KSSTATE_PAUSE ———> ToState:KSSTATE_RUN

从工作到暂停时:

CCapturePin::SetState FromState:KSSTATE_RUN ———> ToState:KSSTATE_PAUSE

从暂停时到恢复运行:

CCapturePin::SetState FromState:KSSTATE_PAUSE ———> ToState:KSSTATE_RUN

从暂停时到停止:

CCapturePin::SetState FromState:KSSTATE_PAUSE ———> ToState:KSSTATE_ACQUIRE
CCapturePin::SetState FromState:KSSTATE_ACQUIRE ———> ToState:KSSTATE_STOP
Cleanup CCapturePin
~CCapturePin
Cleanup CCaptureFilter

从工作到停止:

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

总结

150435516355

  • KSSTATE_STOP :就是停止
  • KSSTATE_ACQUIRE:从STOP到KSSTATE_ACQUIRE ,就要创建资源,为准备打开。从PAUSE到ACQUIRE可以释放资源
  • KSSTATE_RUN:工作之前必是KSSTATE_PAUSE

0 篇笔记 写笔记

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

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

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