UVC规范(USB摄像头)
+ -

UVC视频格式细节详解及分类大全

2024-03-25 679 0

UVC支持各类的视频格式,如I420,YUY2,MJPG,H264等格式,但这些格式有的是归为统一一类的,如YUY2和NV12就归为无压缩的格式。

对于UVC视频流格式,其统一的视频流格式描述符如下:

typedef struct _VIDEO_FORMAT_DESCRIPTOR
    UINT8  bLength;  
    UINT8  bDescriptorType;
    UINT8  bDescriptorSubtype;
}VIDEO_FORMAT_DESCRIPTOR;

其中bDescriptorType为0x24(视频特定类描述符类型)时,代表的是Video Streaming Interface。
而bDescriptorSubtype的值可取: https://www.usbzh.com/article/detail-91.html 中的一些值。但这些值其实具有逻辑上的层次结构。虽然数字值是累计的。

VS_FORMAT_UNCOMPRESSED

VS_FORMAT_UNCOMPRESSED值为0x05,表示无压缩的视频格式。常见的格式有:YUY2,NV12,M420,I420等。以上的子分类通过其GUID来区分标识。

Format GUID
YUY2 32595559-0000-0010-8000-00AA00389B71
NV12 3231564E-0000-0010-8000-00AA00389B71
M420 3032344D-0000-0010-8000-00AA00389B71
I420 30323449-0000-0010-8000-00AA00389B71

具体详见:UVC YUV2、NV12、M420、I420无压缩视频帧描述符GUID https://www.usbzh.com/article/detail-119.html

VS_FORMAT_FRAME_BASED

VS_FORMAT_FRAME_BASED的值为0x10,其下一般包括H264H265压缩的视频格式。其通过GUID来区分具体的格式。

对于VS_FORMAT_FRAME_BASED和VS_FORMAT_UNCOMPRESSED格式,其结构体一是一致的。

typedef struct _H265_H264_VIDEO_FORMAT_DESCRIPTOR
{
    UINT8  bLength;  
    UINT8  bDescriptorType;
    UINT8  bDescriptorSubtype;
    UINT8  bFormatIndex;
    UINT8  bNumberFrameDescriptor;
    GUID   guidFormat; //UINT[16]
    UINT8  bBitsPerPixel;
    UINT8  bDefaultFrameIndex;
    UINT8  bAspectRatioX;
    UINT8  bAspectRatioY;
    UINT8  bmInterlaceFlags;
    UINT8  bCopyProtect;
    UINT8  bVariableSize;    
}H265_VIDEO_FORMAT_DESCRIPTOR;

typedef struct _UNCOMPRESSED_VIDEO_FORMAT_DESCRIPTOR
{
    UINT8  bLength;
    UINT8  bDescriptorType;
    UINT8  bDescriptorSubtype;
    UINT8  bFormatIndex;
    UINT8  bNumberFrameDescriptor;
    GUID   guidFormat:指定了; //UINT[16]
    UINT8  bBitsPerPixel;
    UINT8  bDefaultFrameIndex;
    UINT8  bAspectRatioX;
    UINT8 bAspectRatioY;
    UINT8 bmInterlaceFlags;
    UINT8 bCopyProtect;
}UNCOMPRESSED_VIDEO_FORMAT_DESCRIPTOR

VS_FORMAT_MJPEG

VS_FORMAT_MJPEG值为0x06,其下一般只有一种视频帧格式,VS_FRAME_MJPEG.
VS_FRAME_MJPEG的值为0x07

VS_FORMAT_DV/UVC_VS_FORMAT_DV

UVC_VS_FORMAT_DV值为0x0C,该格式下没有帧格式描述符。
该格式下buffer[8]的代7位代表着具体的子格式,最高为为1时为60HZ,为0时为50HZ.

switch (buffer[8] & 0x7f) {
case 0:
    strscpy(format->name, "SD-DV", sizeof(format->name));
    break;
case 1:
    strscpy(format->name, "SDL-DV", sizeof(format->name));
    break;
case 2:
    strscpy(format->name, "HD-DV", sizeof(format->name));
    break;
deafult:
    break;
    }

strlcat(format->name, buffer[8] & (1 << 7) ? " 60Hz" : " 50Hz",    sizeof(format->name));
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 篇笔记 写笔记

常用图像像素格式 NV12、NV2、I420、YV12、YUYV
常用图像像素格式 RGB 和 YUV,像素格式描述了像素数据存储所用的格式,定义了像素在内存中的编码方式。RGB 和 YUV 为两种经常使用的像素格式。1.RGB 格式一般较为熟悉,RGB图像具有三个通道 R、G、B,分别对应红、绿、蓝三个分量,由三个分量的值决定颜色;这三种颜色称为 三原色,将它......
Linux支持的UVC视频格式
Linux支持的UVC视频格式位于linux-5.6.11linux-5.6.11driversmediausbuvcuvc_driver.c文件下:其数组结构定义如下:static struct uvc_format_desc uvc_fmts[] = { { .n......
YUV2摄像头相关数据大小计算
视备支持的分辨率格式如下:当我们使用YUV2 1280x720x10格式打开摄像头,通过BUSHOUND抓包如下:Length Phase Data ......
DirectShow摄像头视频格式格式UUID-GUID大全
使用DirectShow开发Windows摄像头Capture时,对于每一种支持的格式,都有一个与之对应的UUID.现将各UUID总结整理如下:(后续持续更新)以下UUID来自windows系统uuids.h,目标路径为:C:Program Files (x86)Windows Kits1......
USB中文网出品-UVC视频格式协商协议分析工具
有没有对USB摄像头在打开时数据协商时的UVC视频流接口控制请求的几十个字节分析有时有点郁闷,手动分析又麻烦,写个工具感觉又划不来。有时没办法为,为了定位问题所在,还得手动分析,但这几十个字节在分析时还得不停地查文档。我们知道UVC随着版本的不同,其VS_PROBE_CONTROL和VS_COM......
H264基本原理
本文的转载得到了零声教育的QQ同意。前言H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本。但为了用好H264,我们还是要对H2......
USB相机UVC支持多视频格式关键点及配置描述符自动填充代码
一般的UVC相机会支持多种视频格式如MJPG,YUV2,NV12,H264等常见的格式,另外也会支持多种分辨率,如常见的1920x1080,当然也会支持一些特别的分辨率如4K的3840x2160。另外在固定视频格式和视频分辨率下,支持的帧率是由视频帧描述符确定的。由于自己平时虚拟的都是固件格式和固......
UVC视频格式细节详解及分类大全
UVC支持各类的视频格式,如I420,YUY2,MJPG,H264等格式,但这些格式有的是归为统一一类的,如YUY2和NV12就归为无压缩的格式。对于UVC视频流格式,其统一的视频流格式描述符如下:typedef struct _VIDEO_FORMAT_DESCRIPTOR UINT8......
LINUX&UVC驱动枚举视频格式
vidioc_enum_fmt_vid_cap 和 vidioc_enum_fmt_vid_out 是Linux内核中V4L2(Video for Linux 2)驱动程序中的两个ioctl命令,用于枚举视频设备的捕获(capture)和输出(output)格式。vidioc_enum_fmt_......
LINUX&UVC视频格式协商VS_PROBE_CONTROLL
UVC视频的协商其实走的是VS_PROBE_CONTROLL请求,使用该请求可以获取一个默认的视频格式、分辨率。当然,如果用户指定非默认的,会也使用VS_PROBE_CONTROLL请求来验证是否存在。无论是默认的还是新指定的,最终协商完成后,都会使用VS_COMMIT_CONTROL请求最后进行提......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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