uvc摄像头代码解析4

本文深入探讨了UVC(USB Video Class)摄像头的代码解析,重点关注了uvc_parse_format函数,它涉及UVC格式描述符的解析。文章详细讲解了格式描述符的结构和作用,同时阐述了如何设置摄像头的颜色空间,对于理解和操作UVC设备具有指导意义。
摘要由CSDN通过智能技术生成

7.uvc_parse_format

7.1 uvc格式描述符

struct uvc_format_desc { //uvc格式描述符
char *name; //uvc格式描述符名字
__u8 guid[16];//全局唯一ID
__u32 fcc; //压缩格式
};
7.2 uvc解析1个格式描述符

static int uvc_parse_format(struct uvc_device *dev,struct uvc_streaming *streaming, struct uvc_format *format,__u32 **intervals, unsigned char *buffer, int buflen)
{
	struct usb_interface *intf = streaming->intf;	//获取usb接口
	struct usb_host_interface *alts = intf->cur_altsetting;	//获取usb_host_interface
	struct uvc_format_desc *fmtdesc;	//uvc格式描述符
	struct uvc_frame *frame;	//uvc帧
	const unsigned char *start = buffer;
	unsigned int interval;
	unsigned int i, n;
	__u8 ftype;

	format->type = buffer[2];	//uvc格式类型
	format->index = buffer[3];	//uvc格式索引
	switch (buffer[2]) {	//uvc格式类型
	case UVC_VS_FORMAT_UNCOMPRESSED:

case UVC_VS_FORMAT_FRAME_BASED:

		n = buffer[2] == UVC_VS_FORMAT_UNCOMPRESSED ? 27 : 28;	//获取描述符大小
		if (buflen < n) {	//检验buflen大小
			uvc_trace(UVC_TRACE_DESCR, "device %d videostreaming interface %d FORMAT error\n",dev->udev->devnum,alts->desc.bInterfaceNumber);
			return -EINVAL;
		}
		/* Find the format descriptor from its GUID. */
		fmtdesc = uvc_format_by_guid(&buffer[5]);	//获取uvc格式描述符
		if (fmtdesc != NULL) {	//设置uvc格式编码格式名字
			strlcpy(format->name, fmtdesc->name,sizeof format->name);
			format->fcc = fmtdesc->fcc;	//设置uvc格式的fcc(压缩格式)
		} 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值