使用常时等量管道的数据流

USBCAMD2 通过请求 32 个数据包的两次传输,在常量管道上开始流式传输。 每个数据包的最大大小对应于所选备用设置中的最大大小。

注意 常时等量管道上的流式处理独立于 Microsoft DirectShow 流式处理。

双缓冲区常时等量传输请求会持续提交到 USBCAMD2,并且仅在出现以下两种情况之一时停止:

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

  2. 相机微型驱动程序请求 USBCAMD2 停止常时等量流式处理,方法是在调用 USBCAMD_SetIsoPipeState 时传递 PipeStateFlags 参数中的 USBCAMD_STOP_STREAMING 标志。

流式处理正在进行时,USBCAMD2 和相机微型驱动程序会重复以下过程,直到流式处理停止:

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

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