通过V4L2接口控制曝光模式遇到的问题

最近在测试曝光模式的时候遇到了一个问题:当通过V4L2接口控制产品的曝光模式为自动曝光和手动曝光的时候,可以将其设置成手动曝光,但将其设置成自动曝光却失败了。

设置其他参数的时候就是没有问题的,在设置自动曝光的时候会返回一个 invalid param 错误,也就是说我传入的自动曝光模式参数有误。于是找到我当前电脑上的linux内核版本对应的UVC驱动的源码,通过源码可以看到,我们外部传入的参数1,2会被映射成驱动内部具体曝光模式对应的值,见如下结构体实例:

static const struct uvc_menu_info exposure_auto_controls[] = {
	{ 2, "Auto Mode" },
	{ 1, "Manual Mode" },
	{ 4, "Shutter Priority Mode" },
	{ 8, "Aperture Priority Mode" },
};

可以看到,我们传入的参数0,1,2,3最终会对应到这些项。

但是我传入参数 0 时,按照其默认这些选项来说应该是不会报invalid param错误的,除非在连接到video设备时,设备告知了主机其不支持某些选项,于是主机中UVC驱动将这些选项屏蔽了(这个具体实现还没在代码中找到,但是通过下面的USB抓包数据可以确定)。

于是我通过USB抓包工具抓取设备连接时的与主机的所有交互数据,其中一条数据如下:

对照UVC1.5协议对其进行分析可以发现,这是一条主机向设备通过GET_RES请求查询其曝光所支持的模式的数据,第二条为设备返回的数据,值为 0x05,我们找到UVC1.5协议中曝光模式相关规定,如下图所示:

可以看到,将0x05转换成二进制为 : 0101,按照这个表来对照的话是不支持自动曝光模式的,但是这个产品实际是支持自动曝光的,于是我找到产品代码,在其UVC相关代码中找到了返回曝光模式的GET_RES请求的代码,果然返回的是0x05,最后将这个改了应该就好用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值