USBCAMD2 微型驱动程序操作
USBCAMD2 摄像头微型驱动程序通常运行如下:
相机微型驱动程序从其 DriverEntry 例程调用USBCAMD_DriverEntry。 当微型驱动程序调用 USBCAMD_DriverEntry时,它会将微型驱动程序的 AdapterReceivePacket 回调函数传递给 USBCAMD2。 然后,USBCAMD2 将微型驱动程序注册到 stream.sys 类驱动程序。
然后,相机微型驱动程序可以接收各种流请求块, (SRB) 在其 AdapterReceivePacket 回调函数中进行处理,包括:
相机微型驱动程序确定它必须如何处理每个 SRB。 微型驱动程序可以调用 USBCAMD2 微型驱动程序库中的例程,以帮助处理 SRB。 这些例程通常以 USBCAMD_ 前缀开头。
例如,若要使用 USBCAMD2 指定相机微型驱动程序的其他回调函数,相机微型驱动程序在 USBCAMD_DEVICE_DATA2 结构中指定其入口点。 然后,微型驱动程序调用 USBCAMD_InitializeNewInterface ,将初始化的 USBCAMD_DEVICE_DATA2 结构传递给 USBCAMD2。 然后,USBCAMD2 然后在必要时调用微型驱动程序的回调函数。
微型驱动程序必须调用 USBCAMD_AdapterReceivePacket ,以将其未处理的任何 SRB 发送到 USBCAMD2 进行处理。
USBCAMD 库回调函数 描述微型驱动程序实现的回调函数,以及它们是可选的还是必需的。
以下过程列表说明了发送到相机微型驱动程序的 SRB 的一般处理流程:
微型驱动程序的SRB_INITIALIZE_DEVICE处理程序
微型驱动程序的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处理程序
微型驱动程序的SRB_SET_DEVICE_PROPERTY处理程序
微型驱动程序的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处理程序
微型驱动程序的SRB_UNINITIALIZE_DEVICE处理程序
微型驱动程序的SRB_SURPRISE_REMOVAL处理程序
微型驱动程序的SRB_CHANGE_POWER_STATE从电源打开到电源关闭处理程序
微型驱动程序的SRB_CHANGE_POWER_STATE从“关机”到“开机”处理程序