UVC摄像头设备实现
+ -

UVC视频流接口(VideoStreaming Interface)

2022-03-09 1185 1

UVC视频流接口(VideoStreaming Interface)用于在 Host 和 Video 设备之间传输视频数据流。 每个接口可以有一个同步或批量数据端点。 支持同步视频传输的接口必须具有备用或转换接口,使主机能够根据带宽要求更改同步管道。 还必须提供零带宽备用设置作为默认备用设置(备用设置零,即设备关闭,无数据传输),它为主机软件提供通过切换到此备用接口来临时放弃 USB带宽的选项。

UVC示例中,视频流接口的零带宽备用设置由标准接口描述符和特定于类的VS接口描述符描述。
标准VS接口描述符提供接口号、属于该接口的端点数等。如果带宽为零,则转换接口的端点数为零。

类特定VS接口描述符用于描述支持的视频流格式、视频帧细节、静态图像帧细节、视频数据的颜色配置文件等。以下是这些特定于类的描述符的列表:

  • Input Header descriptor
  • Output Header descriptor
  • Payload Format descriptor
  • Video Frame descriptor
  • Still Image frame descriptor
  • Color Matching descriptor

Input Header descriptor

Input Header descriptor 用于包含IN端点的接口,输出头用于包含OUT端点的接口

USB_VS_INPUT_HEADER, /* 2 bDescriptorSubType - INPUT HEADER */
0x01, /* 3 bNumFormats - One format supported */
0x47, 0x00, /* 4 wTotalLength - Size of class-specific VS descriptors */
(VIDEO_DATA_EP_NUM | 0x80), /* 6 bEndpointAddress - Iso EP for video streaming */
0x00, /* 7 bmInfo - No dynamic format change */
0x02, /* 8 bTerminalLink - Denotes the Output Terminal */

上面的代码显示了支持的视频格式数量、传输视频数据的端点地址以及链接到此流接口的输出终端ID。

有效负载格式描述符描述视频格式。该描述符的字段如下所示:

USB_VS_FORMAT_UNCOMPRESSED, /* 2 bDescriptorSubType - FORMAT UNCOMPRESSED */
0x01, /* 3 bFormatIndex */
0x01, /* 4 bNumFrameDescriptors - 1 Frame descriptor followed */
0x59,0x55,0x59,0x32,
0x00,0x00,0x10,0x00,
0x80,0x00,0x00,0xAA,
0x00,0x38,0x9B,0x71, /* 5 guidFormat - YUY2 Video format */
BITS_PER_PIXEL, /* 21 bBitsPerPixel - 16 bits */
0x01, /* 22 bDefaultFrameIndex */

上面的代码显示视频流是未压缩的YUY2格式,每像素使用16位。

视频帧描述符提及帧分辨率、帧速率、视频缓冲区大小等。以下代码显示了该描述符的字段:

USB_VS_FRAME_UNCOMPRESSED, /* 2 bDescriptorSubType */
0x01, /* 3 bFrameIndex */
0x01, /* 4 bmCapabilities - Still image capture method 1 */
SHORT_CHARS(WIDTH), /* 5 wWidth - 480 pixels */
SHORT_CHARS(HEIGHT), /* 7 wHeight - 320 pixels */
WORD_CHARS(MIN_BIT_RATE), /* 9 dwMinBitRate */
WORD_CHARS(MAX_BIT_RATE), /* 13 dwMaxBitRate */
WORD_CHARS(MAX_FRAME_SIZE), /* 17 dwMaxVideoFrameBufSize */
WORD_CHARS(FRAME_INTERVAL), /* 21 dwDefaultFrameInterval (in 100ns units) */
0x01, /* 25 bFrameIntervalType */
WORD_CHARS(FRAME_INTERVAL), /* 26 dwFrameInterval (in 100ns units) */
/* USB Video resolution */
#define BITS_PER_PIXEL 16
#define WIDTH 480
#define HEIGHT 320
/* Frame rate */
#define FPS 30
#define MAX_FRAME_SIZE (WIDTH * HEIGHT * BITS_PER_PIXEL / 8)
#define MIN_BIT_RATE (MAX_FRAME_SIZE * FPS * 8)
#define MAX_BIT_RATE (MIN_BIT_RATE)
#define PAYLOAD_SIZE (1 * 1024)
/* Interval defined in 100ns units */
#define FRAME_INTERVAL (10000000/FPS)

该接口的另一个备用设置具有数据流等时端点,它是操作备用设置。在这种替代设置中,不会重复特定于类的描述符。

UVC示例的替代设置1的标准VS等时端点描述符如下所示:

/* Standard VS Isochronous Video Data Endpoint Descriptor */
0x07, /* 0 bLength */
USB_DESCTYPE_ENDPOINT, /* 1 bDescriptorType */
(VIDEO_DATA_EP_NUM | 0x80), /* 2 bEndpointAddress - IN Endpoint */
0x05, /* 3 bmAttributes - Isochronous EP (Asynchronous) */
0x00, 0x04, /* 4 wMaxPacketSize 1x 1024 bytes*/
0x01, /* 6 bInterval */

上面的代码显示,端点的最大数据包大小为1024字节,0x01的“bInterval”请求主机在每个微帧(125us)轮询端点。

一般来说,USB 视频设备支持一组视频参数组合(包括视频格式、帧大小和帧速率)以及具有不同最大数据包大小端点的多种备用设置。这使主机能够选择适当的备用设置,该设置仅提供给定视频参数组合所需的带宽。

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
UVC 视频流接口VS
和视频控制接口不同,视频流接口用于主机和设备视频功能之间进行传输视频数据。一个视频功能可以不包括视频流接口,也可以包含多个视频流接口视频流接口用于传输视频时,其传输端点为等时/同步传输端点或者批量传输端点。视频流接口用于传输静止图像时,其传输类型为批量传输端点。用于静止图片传输是可选的,不是必须的......
UVC 视频流接口控制请求
视频流接口控制请求用于设置或读取视频函数的特定视频流接口内接口控制的属性。bmRequestType(1)bRequest(1)wValue (2)wIndex(2)wLength(2)Data(26~34~48)00100001SET_CUR选择器CS<<......
UVC 视频流接口描述符
视频流接口描述符包含了所有完整的视频流接口信息。视频流接口信息以标准的视频流接口开头。视频流接口描述符由标准视频控制接口描述符以及各控制相关描述符组成。标准视频流接口描述符使用通用USB设备接口描述符数据结构。struct _INTERFACE_DESCRIPTOR_STRUCT; { BY......
再谈USB摄像头UVC视频流接口控制请求dwMaxVideoFrameSize和dwMaxPayloadTransferSize
刚开始的时候,我们做一件事是认真,一丝不苟。对于各个数据的考量力求做到精度,其实这个追求可能并不是因为我们因为项目上的要求,而是我们为了弄清一个事实,有了这个事实我们就可以随处吹牛逼,也成了我们在做新的类似的项目上的优势之资。言归正转,以前在windows下通过USB总线驱动虚拟的UVC摄像头都只......
UVC视频流接口(VideoStreaming Interface)
UVC视频流接口(VideoStreaming Interface)用于在 Host 和 Video 设备之间传输视频数据流。 每个接口可以有一个同步或批量数据端点。 支持同步视频传输的接口必须具有备用或转换接口,使主机能够根据带宽要求更改同步管道。 还必须提供零带宽备用设置作为默认备用设置(备用设......
USB摄像头UVC视频流描述符中的bFormatIndex和bFrameIndex
bFormatIndexUSB摄像头一般支持多种视频格式,比如MJPG,H264,YUY2,NV12,RGB等,这些不同的视频格式代表着传输的视频图像的数据组织方式。这些视频格式通过UVC视频流各视频流相关的类型描述符来进行描述符。在Windows系统下,我们可以通过PotPlayer来查看摄像头......
LINUX&UVC驱动视频流接口描述符与视频控制接口描述符的解析关系
UVC控制接口描述符包其下的子各类描述符代表着UVC设备的拓扑结构,关于UVC设备的控制一般都是通过UVC控制接口描述符各个终端,实例的特定类请求来实现的,其中也包括用于用户自定义通讯的扩展单元描述符。与UVC控制接口描述符相对的是UVC视频流接口描述符,UVC规范可以有0个或者多个。至于有多少个,......
uvc_parse_streaming分析
除过usb_driver_claim_interface函数功能有之外,uvc_parse_streaming主要是对申请的内存结构体struct uvc_streaming 进行初始化,其数据来源于对UVC视频流接口描述符的解析。视频流接口描述符的内存布局大致如下:视频流对应的接口描述符视频......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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