USBCAMD2 微型驱动程序操作

USBCAMD2 摄像头微型驱动程序通常运行如下:

例如,若要使用 USBCAMD2 指定相机微型驱动程序的其他回调函数,相机微型驱动程序在 USBCAMD_DEVICE_DATA2 结构中指定其入口点。 然后,微型驱动程序调用 USBCAMD_InitializeNewInterface ,将初始化的 USBCAMD_DEVICE_DATA2 结构传递给 USBCAMD2。 然后,USBCAMD2 然后在必要时调用微型驱动程序的回调函数。

注意

USBCAMD2 仅出于向后兼容性的目的而支持 USBCAMD_DEVICE_DATA 结构。

微型驱动程序必须调用 USBCAMD_AdapterReceivePacket ,以将其未处理的任何 SRB 发送到 USBCAMD2 进行处理。

USBCAMD 库回调函数 描述微型驱动程序实现的回调函数,以及它们是可选的还是必需的。

以下过程列表说明了发送到相机微型驱动程序的 SRB 的一般处理流程:

微型驱动程序的SRB_INITIALIZE_DEVICE处理程序

组件 操作
相机微型驱动程序 通过调用 USBCAMD_InitializeNewInterface初始化 USBCAMD2,指示内核模式下的视频或仍在原始处理要求,例如启用设备事件。
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 获取 USB 设备和配置描述符。
USBCAMD2 调用微型驱动程序的 CamConfigureEx 回调函数。
相机微型驱动程序 完成配置。 选择备用设置和最大传输大小。 填充 USBCAMD_Pipe_Config_Descriptor 结构的数组。
USBCAMD2 分析 USBCAMD_Pipe_Config_Descriptor 结构的数组。
USBCAMD2 调用微型驱动程序的 CamInitialize 回调函数。
相机微型驱动程序 完成初始化。 设置设备电源并激活相机上的默认设置。
USBCAMD2 stream.sys 类驱动程序提供流数和流描述符大小。

微型驱动程序的SRB_GET_STREAM_INFO处理程序

组件 操作
相机微型驱动程序 stream.sys 类驱动程序提供 HW_STREAM_INFORMATION 流信息结构。
相机微型驱动程序 在类驱动程序的HW_STREAM_HEADER结构中填写指向设备属性集数组指针stream.sys。
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 填写流标头中的引脚数。
USBCAMD2 公开设备事件表(如果有)。
USBCAMD2 修复流信息表中的条目值。 (捕获或仍) 设置类别名称。
USBCAMD2 填写指向流属性数组的指针。

微型驱动程序的SRB_INITIALIZATION_COMPLETE处理程序

组件 操作
相机微型驱动程序 使用 IRP_MJ_PNP 和 IRP_MN_QUERY_INTERFACE 获取 USBCAMD2 的GUID_USBCAMD_INTERFACE。

微型驱动程序的SRB_GET_DEVICE_PROPERTY处理程序

组件 操作
相机微型驱动程序 获取相机微型驱动程序处理的属性,例如 PROPSETID_VIDCAP_VIDEOPROCAMPPROPSETID_VIDCAP_CAMERACONTROLPROPSETID_VIDCAP_VIDEOCONTROL,以及任何其他自定义属性集。

微型驱动程序的SRB_SET_DEVICE_PROPERTY处理程序

组件 操作
相机微型驱动程序 通过获取PROPSETID_VIDCAP_VIDEOPROCAMP、PROPSETID_VIDCAP_CAMERACONTROLPROPSETID_VIDCAP_VIDEOCONTROL的参数以及任何其他自定义属性集,设置相机微型驱动程序处理的属性。

微型驱动程序的SRB_GET_DATA_INTERSECTION处理程序

组件 操作
相机微型驱动程序 KSDATARANGE 结构返回 KSDATAFORMAT 结构。
相机微型驱动程序 检查 (VideoInfoHeader.AvgTimePerFrame) 请求的帧速率是否在所请求的视频格式的上限和下限内。 如果超出限制,微型驱动程序应更正 pSrb-CommandData.IntersectInfo-Datarange>> 中的以下值:VideoInfoHeader.AvgTimePerFrame、VideoInfoHeader.dwBitRate。

微型驱动程序的SRB_OPEN_STREAM处理程序

组件 操作
相机微型驱动程序 验证视频格式。
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 保存相机微型驱动程序接受的视频格式。
USBCAMD2 调用微型驱动程序的 CamAllocateBandwidthEx 回调函数,以基于视频格式数据分配带宽,并获取视频格式的最大缓冲区大小。
相机微型驱动程序 计算满足所请求帧速率和输出窗口大小的常时等量通道的最大数据包大小。
相机微型驱动程序 通过调用 USBCAMD_SelectAlternateInterface 选择最近的备用设置。 微型驱动程序应为 USBCAMD2 提供相机可以生成的最大帧大小。
相机微型驱动程序 在相机上设置硬件缩放。 将相机控件设置为注册表中存储的值,或者设置为默认设置(如果第一次)。
相机微型驱动程序 确保 VideoInfoHeader.AvgTimePerFrame (帧速率) 在视频格式的限制范围内,如果不符合限制,请更正。
USBCAMD2 调用微型驱动程序的 CamStartCaptureEx 回调函数。
相机微型驱动程序 将硬件设置为捕获模式。
USBCAMD2 初始化常时常量传输或批量传输。

微型驱动程序的SRB_CLOSE_STREAM处理程序

组件 操作
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 取消提交到 USBCAMD2 的挂起 IRP。 将任何挂起的数据 SRB 返回到 stream.sys 类驱动程序。
USBCAMD2 调用微型驱动程序的 CamStopCaptureEx 回调函数。
相机微型驱动程序 向相机发送停止捕获命令。
USBCAMD2 调用微型驱动程序的 CamFreeBandwidthEx 回调函数以释放常时等量总线带宽(如果适用)。
相机微型驱动程序 选择空闲备用设置。
USBCAMD2 释放与 USB 管道关联的资源。

微型驱动程序的SRB_UNINITIALIZE_DEVICE处理程序

组件 操作
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 如果任何流仍处于打开状态,请为每个流调用微型驱动程序的 CamStopCaptureExCamFreeBandwidthEx 回调函数来关闭它们。
USBCAMD2 调用微型驱动程序的 CamUnInitialize 回调函数。
相机微型驱动程序 清理和释放资源。

微型驱动程序的SRB_SURPRISE_REMOVAL处理程序

组件 操作
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 取消挂起的数据 SRB,并返回具有STATUS_CANCELLED的 SDB。
USBCAMD2 在所有打开的流上调用微型驱动程序的 CamStopCaptureExCamFreeBandwidthEx 回调函数。
USBCAMD2 返回SRB_SURPRISE_REMOVAL后出现的任何读/写 SRB 的STATUS_CANCELLED。

微型驱动程序的SRB_SET_DATA_FORMAT处理程序

组件 操作
相机微型驱动程序 验证新的视频格式。
相机微型驱动程序 调用 USBCAMD_SetVideoFormat
USBCAMD2 使用关联的流扩展保存新格式。

微型驱动程序的SRB_CHANGE_POWER_STATE从电源打开到电源关闭处理程序

组件 操作
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 如果适用,停止常量管道上的流式处理,或取消挂起的批量传输或中断传输。
USBCAMD2 调用微型驱动程序的 CamStopCaptureEx 回调函数。
相机微型驱动程序 将停止捕获命令发送到硬件。

微型驱动程序的SRB_CHANGE_POWER_STATE从“关机”到“开机”处理程序

组件 操作
相机微型驱动程序 调用 USBCAMD_AdapterReceivePacket
USBCAMD2 在常时等量管道上重启流式处理(如果适用),或者将批量传输或中断传输重新提交到 USB 类。
相机微型驱动程序 将相机设置和相机功耗还原到正常水平。
USBCAMD2 调用微型驱动程序的 CamStopCaptureEx 回调函数。
USBCAMD2 调用微型驱动程序的 CamStartCaptureEx 回调函数。