USB摄像头驱动之设置属性

本文档介绍了如何在USB摄像头驱动中设置属性,如亮度和曝光度。通过使用ioctl命令VIDIOC_QUERYCTRL, VIDIOC_G_CTRL和VIDIOC_S_CTRL进行查询、获取和设置。在驱动底层,需要实现相应函数,并依赖于uvc_ctrls数组和uvc_ctrl_mappings数组来定义和映射属性。通过VideoControl Interface的自定义描述符确定支持的属性,并通过usb_control_msg进行数据传输。" 138099487,10884488,ZoneInfo:Python中处理IANA时区的全面指南,"['Python', '时间处理', '数据库', '编程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

对于摄像头的属性有亮度,曝光度等等…,那怎么去获得/设置这些属性呢,在应用层使用ioctl命令:VIDIOC_QUERYCTRL,VIDIOC_G_CTRL
,VIDIOC_S_CTRL来查询,获取,设置当前摄像头的属性,所以在底层驱动中中我们必须来实现这些函数的定义,该函数原型如下

int (*vidioc_queryctrl)(struct file *file, void *fh,struct v4l2_queryctrl *a);
int (*vidioc_g_ctrl)(struct file *file,void *fh,struct v4l2_control *a);
int (*vidioc_s_ctrl)(struct file *file,void *fh,struct v4l2_control *a);

在这里插入图片描述
我们之前说过USB摄像头一般会分为两个接口,一个是VC用于控制,一个是VS用于传输,在之前我们已经把摄像头图像显示出来了,所以对于VS这部分是完成,现在我们看到VC控制部分,对于VC中的Unit和terminal在代码中称为实体entity,在uvc_ctrl.c里数组static struct uvc_control_info uvc_ctrls[],这个数组里每一项都对应一个属性,这个数组里就定义了UVC规范所支持的所有属性,我们拿出一个属性定义来说明下:

{
   
		.entity		= UVC_GUID_UVC_PROCESSING,
		.selector	= UVC_PU_BRIGHTNESS_CONTROL,
		.index		= 0,
		.size		= 2,
		.flags		= UVC_CTRL_FLAG_SET_CUR
				| UVC_CTRL_FLAG_GET_RANGE
				| UVC_CTRL_FLAG_RESTORE,
	},

我们设置亮度需要把数据发给硬件,发给VC中的哪个接口就由entity值来决定,显然上面该属性就是发给PU接口,PU接口就根据selector的值知道该属性是用来设置亮度的,index对应Process Unit Descriptor的bmControls[0],说明该属性是来设置亮度的,size表示发送的数据的大小,对于我们的设置支持哪些属性,这需要我们去看VideoControl Interface的自定义描述符(通过ls usb命令打印出),那在代码中我们怎么去设置这些属性呢,我们看到uvc_driver.c

uvc_drvier.c
uvc_ctrl_init_device    
    // 对于每一个entity(IT,PU,SU,OT等)
	list_for_each_entry(entity, &dev->entities, list) {
   
	    // 取出bmControls
	    bmControls = ....	    
	    // 计算bmControls里位值为1的个数,就是支持的属性个数
	    ncontrols += hweight8(bmControls[i]);    	    
	    // 为每一个属性分配一个struct uvc_control
	    entity->controls = kzalloc..    
	    // 设置这些struct uvc_control
	    ctrl 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值