最近给客户制作了修改相机数据的工具,通过dshow接口发送扩展命令时,0x01-0x1F命令都可以正常发送,定义了0x20以上的命令都失败了,错误代码为0x80070490
百度调查了很久,终于在windows官网的文档中找到了答案。 原本USB视频类驱动程序对UVC扩展单元的安装有强制性要求。 部分翻译如下。
”扩展单元上的控件(称为扩展单元控件 Id)必须连续编号为1到一些最大值 n。 如果有空白,则 USB 视频类驱动程序不会公开超出该间隔的控件。 USB 视频类驱动程序的当前实现将扩展单元上的控件数限制为31。“
受此限制,dshow最多支持0x01-0x1F命令,因为它由windows通用视频驱动控制相机。 如果大家的私人命令太多,可以通过多个扩展单元来实现。
另外,我怀疑bushound为什么可以发送0x20以上的命令。 请教了大人物,原来bushound是直接传输到驱动程序发送的,不通过windows视频类驱动程序。
官方网站链接: https://docs.Microsoft.com/en-us/windows-hardware/drivers/stream/device-requirements-for-us B