Pin回调SetDeviceState
当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
总结
- KSSTATE_STOP :就是停止
- KSSTATE_ACQUIRE:从STOP到KSSTATE_ACQUIRE ,就要创建资源,为准备打开。从PAUSE到ACQUIRE可以释放资源
- KSSTATE_RUN:工作之前必是KSSTATE_PAUSE