UVC规范(USB摄像头)
+ -

UVC MJPEG视频帧描述符

2021-03-31 3880 0

Motion-JPEG视频格式描述符

Offset Field Size Value Description
0 bLength 1 Number 此描述符的大小,以字节为单位:11
1 bDescriptorType 1 Constant CS_INTERFACE描述符类型。
2 bDescriptorSubtype 1 Constant VS_FORMAT_MJPEG描述符子类型
3 bFormatIndex 1 Number 该格式描述符的索引
4 bNumFrameDescriptors 1 Number 与此格式相对应的后续帧描述符的数量
5 bmFlags 1 Number 指定此格式的特征
D0: FixedSizeSamples. 1 = 是
所有其他位保留供将来使用,应将其重置为零。
6 bDefaultFrameIndex 1 Number 此流的最佳帧索引(用于选择分辨率)
7 bAspectRatioX 1 Number 图片长宽比的X维度。
8 bAspectRatioY 1 Number 图片长宽比的Y维度。
9 bmInterlaceFlags 1 Bitmap 指定隔行信息。 如果此流支持“摄像机终端”中的扫描模式控件,则此字段应反映隔行模式中使用的字段格式。(PAL中的顶部字段是字段1,NTSC中的顶部字段是字段2。):
D0: 隔行扫描流或变量。 1 =是
D1: 每帧的字段。 0= 字段2, 1 = 字段1
D2: 字段1优先. 1 = 是
D3: 已预留
D5..4: 字段模式
00 = 仅字段1
01 = 仅字段2
10 = 字段1和2的规则模式
11 = 字段1和2的随机模式
D7..6: 保留。 不使用。
10 bCopyProtect 1 B oolean 指定是否应限制视频流的复制:
0: 无限制
1: 限制重复

bFrameIndex字段包含此帧描述符的从一开始的索引,并且主机请求使用它来设置和获取所使用格式的当前帧索引。 对于设备支持的每个相应的格式描述符,此索引都是基于一个的。

支持的帧间隔范围可以是连续范围或一组离散值。 对于连续范围,dwMinFrameInterval,dwMaxFrameInterval和dwFrameIntervalStep指示范围的限制和粒度。 对于离散值,dwFrameInterval(x)字段指示在此帧大小下支持的帧间隔范围(以及帧速率)。 帧间隔是以100ns为单位的单个解码视频帧的平均显示时间。

MJPEG视频帧描述符标识以下内容。

Offset Field Size Value Description
0 bLength 1 Number 当bFrameIntervalType为0时,此描述符的大小以字节为单位。当bFrameIntervalType> 0时,此描述符的大小以字节为单位:26+(4 * n)
1 bDescriptorType 1 Constant CS_INTERFACE描述符类型
2 bDescriptorSubtype 1 Constant VS_FRAME_MJPEG描述符子类型
3 bFrameIndex 1 Number 该帧描述符的索引
4 bmCapabilities 1 Number D0: 支持静止图像指定此帧设置是否支持静止图像。 这仅适用于具有使用静止图像捕获方法1的IN视频终结点的VS接口,在所有其他情况下应将其设置为0。
D1: 固定帧速率指定设备是否在与此帧描述符关联的流上提供固定帧速率。 如果启用了固定速率,则设置为1;否则,设置为1。 否则,设置为0。
D7..2: 保留,设置为0。
5 wWidth 2 Number 解码后的位图帧的宽度(以像素为单位)
7 wHeight 2 Number 解码后的位图帧的高度(以像素为单位)
9 dwMinBitRate 4 Number 指定默认压缩质量下的最小比特率和最长帧间隔(以bps为单位),可以以该速率传输数据。
13 dwMaxBitRate 4 Number 指定默认压缩质量下的最大比特率和最短帧间隔(以bps为单位),可以以该速率传输数据。
17 dwMaxVideoFrameBufferSize 4 Number 不建议使用此字段。 指定压缩器将产生的视频(或静止图像)帧的最大字节数。“视频探测和提交”控件的dwMaxVideoFrameSize字段替换此描述符字段。 为了与实现本规范较早版本的主机软件兼容,应选择该字段的值。
21 dwDefaultFrameInterval 4 Number 指定设备要指示用作默认值的帧间隔。 这必须是以下字段中所述的有效帧间隔。
25 bFrameIntervalType 1 Number 指示如何设置帧间隔:0:连续帧间隔1..255:支持的离散帧间隔数(n)
26… 请参阅以下帧间隔表。

连续帧间隔

Offset Field Size Value Description
26 dwMinFrameInterval 4 Number 支持的最短帧间隔(以最高帧速率),以100ns为单位。
30 dwMaxFrameInterval 4 Number 支持的最长帧间隔(最低帧速率),以100ns为单位。
34 dwFrameIntervalStep 4 Number 表示帧间隔范围的粒度,以100ns为单位。

离散帧间隔

Offset Field Size Value Description
26 dwFrameInterval(1) 4 Number 支持的最短帧间隔(以最高帧速率),以100ns为单位。
26+(4*n)-4 dwFrameInterval(n) 4 Number 支持的最长帧间隔(最低帧速率),以100ns为单位。
视频样本

每个MJPEG帧均被视为单个视频样本。 视频样本由一个或多个有效载荷传输(如视频设备的USB设备类别规范中定义)组成。

对于同步管道,每个(微)帧将包含单个有效载荷传输。 每次有效负载传输将由一个有效负载报头组成,紧随其后是一个或多个数据事务中的有效负载数据(对于高速高带宽端点,最多为3个数据事务)。

对于散装管道,每个有效载荷传输的第一个散装数据包应在包的开头包含一个有效载荷报头,然后是有效载荷数据,并根据需要扩展到其他散装数据事务

MJPEG有效载荷信息

MJPEG有效负载的每一帧都通过JPEG压缩进行编码,并在其头之前包含一个标题,该标题包含诸如压缩表和霍夫曼编码表之类的压缩参数的必需和可选定义。 必需和可选参数用“标记”标识,并包含标记段。

每个帧的结构如下。

  • SOI (图像开始, 0xFFD8) – 必要
  • APPn (应用标记, 0xFFEn) – 可选,除非使用隔行视频,在这种情况下,需要带有“ AVI1”标记和字段ID信息的APP0段。
  • DRI (定义重启间隔, 0xFFDD) – 可选
  • DQT (定义量化表, 0xFFDB) – 必要
  • DHT (定义霍夫曼表, 0xFFC4) – 可选, 如果未指定,则使用JPEG标准(ISO 10918-1)第K.3.3节中指定的标准表。
  • SOF0 (帧开始, 0xFFC0)- 必要. 不支持所有其他SOFn段。
  • SOS (扫描开始, 0xFFDA) – 必要
  • 编码图像数据 – 必要
  • RSTn (重新启动次数, 0xFFDn) – 可选
  • EOI (图片结尾, 0xFFD9) - 必要

图像数据需要以下内容:

  • 颜色编码 - YCbCr
  • 每像素位数 - 每个颜色分量8个(在过滤/二次采样之前)
  • 二次抽样 - 422
  • 基线顺序DCT (SOF0)
  • 所有关键帧

MJPG视频帧格式结构体定义


// Motion-JPEG Video Format Descriptor
typedef struct _MJPEG_VIDEO_FORMAT_DESCRIPTOR
{
   UINT8  bLength;
   UINT8  bDescriptorType;
   UINT8  bDescriptorSubtype;
   UINT8  bFormatIndex;
   UINT8  bNumberFrameDescriptor;
   UINT8  bmFlags;
   UINT8  bDefaultFrameIndex;
   UINT8  bAspectRationX;
   UINT8  bAspectRationY;
   UINT8  bmInterlaceFlags;
   UINT8  bCopyProtect;
} MJPEG_VIDEO_FORMAT_DESCRIPTOR;

// Motion-JPEG Video Format Frame Descriptor
typedef struct _MJPEG_VIDEO_FRAME_DESCRIPTOR
{
   UINT8  bLength;
   UINT8  bDescriptorType;
   UINT8  bDescriptorSubtype;
   UINT8  bFrameIndex;
   UINT8  bmCapabilities;
   UINT16 wWidth;
   UINT16 wHeight;
   UINT32 dwMinBitRate;
   UINT32 dwMaxBitRate;
   UINT32 dwMaxVideoFrameBufferSize;
   UINT32 dwDefaultFrameInterval;
   UINT8  bFrameIntervalType;
   UINT32 dwFrameInterval;
} MJPEG_VIDEO_FRAME_DESCRIPTOR;

MJPG视频帧格式示例

   ----- Video Streaming MJPEG Frame Type Descriptor -----
---> This is the Default (optimum) Frame index
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x07 (MJPEG Frame Type)
bFrameIndex              : 0x01
bmCapabilities           : 0x00
wWidth                   : 0x0500 (1280)
wHeight                  : 0x02D0 (720)
dwMinBitRate             : 0x1A5E0000 (442368000 bps -> 55.296 MB/s)
dwMaxBitRate             : 0x1A5E0000 (442368000 bps -> 55.296 MB/s)
dwMaxVideoFrameBufferSize: 0x001C224D (1843789 bytes)
dwDefaultFrameInterval   : 0x00051615 (33.3333 ms -> 30.0000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x00051615 (33.3333 ms -> 30.0000 fps)
Data (HexDump)           : 1E 24 07 01 00 00 05 D0 02 00 00 5E 1A 00 00 5E   .$.........^...^
                           1A 4D 22 1C 00 15 16 05 00 01 15 16 05 00         .M"...........

        ----- Video Streaming MJPEG Frame Type Descriptor -----
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x07 (MJPEG Frame Type)
bFrameIndex              : 0x02
bmCapabilities           : 0x00
wWidth                   : 0x03C0 (960)
wHeight                  : 0x021C (540)
dwMinBitRate             : 0x0ED4E000 (248832000 bps -> 31.104 MB/s)
dwMaxBitRate             : 0x0ED4E000 (248832000 bps -> 31.104 MB/s)
dwMaxVideoFrameBufferSize: 0x000FD44D (1037389 bytes)
dwDefaultFrameInterval   : 0x00051615 (33.3333 ms -> 30.0000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x00051615 (33.3333 ms -> 30.0000 fps)
Data (HexDump)           : 1E 24 07 02 00 C0 03 1C 02 00 E0 D4 0E 00 E0 D4   .$..............
                           0E 4D D4 0F 00 15 16 05 00 01 15 16 05 00         .M............

        ----- Video Streaming MJPEG Frame Type Descriptor -----
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x07 (MJPEG Frame Type)
bFrameIndex              : 0x03
bmCapabilities           : 0x00
wWidth                   : 0x0350 (848)
wHeight                  : 0x01E0 (480)
dwMinBitRate             : 0x0BA54000 (195379200 bps -> 24.422 MB/s)
dwMaxBitRate             : 0x0BA54000 (195379200 bps -> 24.422 MB/s)
dwMaxVideoFrameBufferSize: 0x000C6E4D (814669 bytes)
dwDefaultFrameInterval   : 0x00051615 (33.3333 ms -> 30.0000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x00051615 (33.3333 ms -> 30.0000 fps)
Data (HexDump)           : 1E 24 07 03 00 50 03 E0 01 00 40 A5 0B 00 40 A5   .$...P....@...@.
                           0B 4D 6E 0C 00 15 16 05 00 01 15 16 05 00         .Mn...........

        ----- Video Streaming MJPEG Frame Type Descriptor -----
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x07 (MJPEG Frame Type)
bFrameIndex              : 0x04
bmCapabilities           : 0x00
wWidth                   : 0x0280 (640)
wHeight                  : 0x01E0 (480)
dwMinBitRate             : 0x08CA0000 (147456000 bps -> 18.432 MB/s)
dwMaxBitRate             : 0x08CA0000 (147456000 bps -> 18.432 MB/s)
dwMaxVideoFrameBufferSize: 0x0009624D (614989 bytes)
dwDefaultFrameInterval   : 0x00051615 (33.3333 ms -> 30.0000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x00051615 (33.3333 ms -> 30.0000 fps)
Data (HexDump)           : 1E 24 07 04 00 80 02 E0 01 00 00 CA 08 00 00 CA   .$..............
                           08 4D 62 09 00 15 16 05 00 01 15 16 05 00         .Mb...........

        ----- Video Streaming MJPEG Frame Type Descriptor -----
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x07 (MJPEG Frame Type)
bFrameIndex              : 0x05
bmCapabilities           : 0x00
wWidth                   : 0x0280 (640)
wHeight                  : 0x0168 (360)
dwMinBitRate             : 0x06978000 (110592000 bps -> 13.824 MB/s)
dwMaxBitRate             : 0x06978000 (110592000 bps -> 13.824 MB/s)
dwMaxVideoFrameBufferSize: 0x00070A4D (461389 bytes)
dwDefaultFrameInterval   : 0x00051615 (33.3333 ms -> 30.0000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x00051615 (33.3333 ms -> 30.0000 fps)
Data (HexDump)           : 1E 24 07 05 00 80 02 68 01 00 80 97 06 00 80 97   .$.....h........
                           06 4D 0A 07 00 15 16 05 00 01 15 16 05 00         .M............
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 Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
UVC YUV2、NV12、M420、I420无压缩视频帧描述符GUID
无压缩数据格式的官方文档为:USB_Video_Payload_Uncompressed_1.5.pdf,其下载地址为:https://www.usb.org/sites/default/files/USB_Video_Class_1_5.zip UVC无压缩的数据格式支持四种数据格式类型,见下表......
UVC MJPEG视频帧描述符
Motion-JPEG视频格式描述符OffsetFieldSizeValueDescription0bLength1Number此描述符的大小,以字节为单位:111bDescriptorType1ConstantCS_INTERFACE描述符类型。......
UVC 视频帧描述符
视频帧描述符(简称帧描述符)用于描述解码后的视频以及基于帧格式支持的静止图像帧尺寸和其他帧特定特性。帧描述符(如果需要)紧跟在相关的格式之后.UVC已经定义的数据帧格式类型见下表(以VS_FRAME开头):描述符类型值VS_UNDEFINED0x00VS_INPUT_HEADER0x01VS_OUT......
UVC H264视频帧描述符
H264视频格式结构体定义typedef struct _H264_VIDEO_FORMAT_DESCRIPTOR{ UINT8 bLength; UINT8 bDescriptorType; UINT8 bDescriptorSubtype; UIN......
UVC H265视频帧描述符
H265视频帧描述符和H264视频帧描述符结构体一样,只是参数不同而已。H265视频格式结构体定义typedef struct _H265_VIDEO_FORMAT_DESCRIPTOR{ UINT8 bLength; UINT8 bDescriptorType; ......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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