使用等时管道的数据流

USBCAMD2通过请求两次包含 32 个数据包的传输,开始在等时通道上进行流式处理。 每个数据包的最大大小对应于所选备用设置中的最大大小。

注意 异时序管道上的流式处理独立于 Microsoft DirectShow 流式处理。

当出现以下两个条件之一时,双缓冲区的时序传输请求将持续提交到USBCAMD2,并且仅当出现以下两个条件之一时停止:

  1. 发出停止 DirectShow 流的状态(KSSTATE_STOP)。

  2. 相机微型驱动程序通过在调用 USBCAMD_SetIsoPipeState 时,在 PipeStateFlags 参数中传递 USBCAMD_STOP_STREAMING 标志,来请求 USBCAMD2 停止等时流传输。

流式处理过程中,USBCAMD2和相机微型驱动程序重复以下过程,直到流式处理停止:

  1. USBCAMD2针对从USB总线驱动程序接收到的每个数据包,调用相机微型驱动程序的CamProcessUSBPacketEx回调函数(在 IRQL = DISPATCH_LEVEL)。 相机微型驱动程序必须在出现错误条件时设置相应的错误标志。 如果使用 CamProcessUSBPacketExFrameComplete 参数检测到新的视频帧的开头,微型驱动程序还必须设置新的视频帧标志。

  2. 相机微型驱动程序确定视频帧完成后,USBCAMD2调用相机微型驱动程序的 CamProcessRawVideoFrameEx 回调函数(从工作线程的上下文)来处理视频帧(如果需要执行颜色空间转换或解压缩)。 USBCAMD2将已完成的原始帧返回给stream.sys类驱动程序,在IRQL = PASSIVE_LEVEL的情况下由相机微型驱动程序进行处理。 例如,如果帧数据不足或解压缩期间发生错误,则 CamProcessRawVideoFrameExBytesReturned 参数必须设置为 0。