Linux&UVC驱动
+ -

LINUX&UVC处理单元描述符

2024-03-19 18 0

不同的UVC版本,其UVC处理单元描述格式稍有不同。
关于UVC处理单元描述符各字段的详细说明可详见:https://www.usbzh.com/article/detail-84.html

对于UVC1.1/1.5版本,其内容如下:

  UINT8  bLength;
  UINT8  bDescriptorType;
  UINT8  bDescriptorSubtype;
  UINT8  bUnitID;
  UINT8  bSourceID;
  UINT16 wMaxMultiplier;
  UINT8 bControlSize;
  UINT8 bmControls[3];
  UINT8 iProcessing;
  UINT8 bmVideoStandards;

而对于UVC1.0则其内容如下:

  UINT8  bLength;
  UINT8  bDescriptorType;
  UINT8  bDescriptorSubtype;
  UINT8  bUnitID;
  UINT8  bSourceID;
  UINT16 wMaxMultiplier;
  UINT8 bControlSize;
  UINT8 bmControls[2];
  UINT8 iProcessing;

UVC1.0相对于UVC1.1/1.5,其bControlSize的值从2变成了3,故bmControls数组变从2变成了3字节。
另一个就是多了一个bmVideoStandards字节。
所以,UVC1.1/UVC1.5总的长度bLength为13字节,而UVC1.0为11字节。

case UVC_VC_PROCESSING_UNIT:
        n = buflen >= 8 ? buffer[7] : 0;
        p = dev->uvc_version >= 0x0110 ? 10 : 9;

        if (buflen < p + n) {
            uvc_trace(UVC_TRACE_DESCR, "device %d videocontrol "
                "interface %d PROCESSING_UNIT error\n",
                udev->devnum, alts->desc.bInterfaceNumber);
            return -EINVAL;
        }

        unit = uvc_alloc_entity(buffer[2], buffer[3], 2, n);
        if (unit == NULL)
            return -ENOMEM;

        memcpy(unit->baSourceID, &buffer[4], 1);
        unit->processing.wMaxMultiplier =get_unaligned_le16(&buffer[5]);
        unit->processing.bControlSize = buffer[7];
        unit->processing.bmControls = (u8 *)unit + sizeof(*unit);
        memcpy(unit->processing.bmControls, &buffer[8], n);
        if (dev->uvc_version >= 0x0110)
            unit->processing.bmVideoStandards = buffer[9+n];

        if (buffer[8+n] != 0)
            usb_string(udev, buffer[8+n], unit->name, sizeof(unit->name));
        else
            sprintf(unit->name, "Processing %u", buffer[3]);

        list_add_tail(&unit->list, &dev->entities);
        break;

0 篇笔记 写笔记

UVC的版本区别之处理单元描述符
UVC规范自发布到现在,已经有UVC1.0,UVC1.1和UVC1.5三个版本了。在Windows环境下,支持的最广泛的是UVC1.0,从Win7开始支持UVC1.1,从Win8开始支持UVC1.5.我们常用的UVC摄像头一般为了支持更加广泛的操作系统,一般情况下UVC的固件是UVC1.0,但随着固......
UVC 处理单元描述符
处理单元描述符的ID使用bUnitID字段标识。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。bSourceID字段用于描述此处理单元的连接。它包含此处理单元通过其输入引脚连接到的设备或终端的ID。bSourceID必须引用同一视频功能中的单元或终端。bmControls字段是一个位图......
LINUX&UVC处理单元描述符
不同的UVC版本,其UVC处理单元描述格式稍有不同。关于UVC处理单元描述符各字段的详细说明可详见:https://www.usbzh.com/article/detail-84.html对于UVC1.1/1.5版本,其内容如下: UINT8 bLength; UINT8 bDescr......
UAC 处理单元描述符
UAC处理单元描述符全称Processing Unit Descriptor,缩写这PUD.处理单元描述符和其它音频控制的单元/终端描述一样,也具有一个惟一的ID标识字段UnitID。UAC处理单元的功能处理单元(PU)表示音频功能内部的一个功能块,它将逻辑输入通道,分为一个或多个群集,并分成若干......
UAC 上下混音处理单元描述符
上下混合处理单元是UAC处理单元描述的一类,使用上下混合处理单元描述符来描述。UAC1.0上下混音处理单元描述符定义字段偏移字段字段长度值类型说明0bLength1数字该描述符的总长度:15+n+2*m1bDescriptorType1常量描述符类型......
UAC 立体扩展处理单元描述符
UAC1.0 立体扩展处理单元描述符定义字段偏移字段字段长度值类型说明0bLength1数字该描述符的总长度:15+n+2*m1bDescriptorType1常量描述符类型,CS_INTERFACE2bDescriptorSubtype1常......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!