UVC摄像头技术笔记
+ -

YUV2摄像头相关数据大小计算

2021-05-22 1360 0

视备支持的分辨率格式如下:
1615434596343

当我们使用YUV2 1280x720x10格式打开摄像头,通过BUSHOUND抓包如下:

Length    Phase  Data                                                                          Description   
--------  -----  ----------------------------------------------------------------------------------- ------
    CTL    21 01 00 05  00 02 01 00                                                            SET CUR       
 1  OUT    02                                                                                  .             
    CTL    a1 81 00 01  01 00 1a 00                                                            GET CUR       
    CTL    21 01 00 01  01 00 1a 00                                                            SET CUR       
26  OUT    00 00 02 01  40 42 0f 00  00 00 00 00  00 00 1e 00  00 00 00 00  00 00 00 00  00 00 
    CTL    a1 81 00 01  01 00 1a 00                                                            GET CUR       
    CTL    a1 83 00 01  01 00 1a 00                                                            GET MAX       
    CTL    a1 82 00 01  01 00 1a 00                                                            GET MIN       
    CTL    21 01 00 01  01 00 1a 00                                                            SET CUR       
26  OUT    00 00 02 01  40 42 0f 00  00 00 00 00  00 00 1e 00  00 00 00 20  1c 00 00 00  00 00 
    CTL    a1 81 00 01  01 00 1a 00                                                            GET CUR       
    CTL    21 01 00 02  01 00 1a 00                                                            SET CUR       
26  OUT    00 00 02 01  40 42 0f 00  00 00 00 00  00 00 1e 00  00 00 00 20  1c 00 00 0c  00 00 
    CTL    01 0b 06 00  01 00 00 00                                                            SET INTERFACE 
    CTL    a1 83 00 14  00 01 0a 00                                                            GET MAX       
    CTL    21 01 00 14  00 01 0a 00                                                            SET CUR       
10  OUT    a3 01 5d 02  9a 02 53 03  1d 00                                                    
    CTL    a1 81 00 14  00 01 0a 00                                                            GET CUR       
    CTL    a1 83 00 14  00 01 0a 00                                                            GET MAX       
    CTL    a1 87 00 14  00 01 0a 00                                                            GET DEF       
    CTL    21 01 00 14  00 01 0a 00                                                            SET CUR       
10  OUT    00 00 00 00  00 00 00 00  10 00                                                      
    CTL    a1 81 00 14  00 01 0a 00                                                            GET CUR       
    CTL    a1 83 00 14  00 01 0a 00                                                            GET MAX       
    CTL    21 01 00 14  00 01 0a 00                                                            SET CUR       
10  OUT    9d 01 2d 02  98 02 27 03  1d 00                                                     
    CTL    a1 81 00 14  00 01 0a 00                                                            GET CUR       
`

通过SET_CUR提交到视频流接口的数据长度为26可知,此UVC摄像头使用的UVC版本为1.0。

  • wPFrameRate:
  • bmHint = 00 00
  • bFormatIndex = 02
  • bFrameIndex = 01
  • dwFrameInterval = 40 42 0f 00 = 0x000f4240 = 1,000,000 ns = 100ms即每秒10帧
  • wKeyFrameRate = 00 00
  • wPFrameRate = 00 00
  • wCompQuality = 00 00
  • wCompWindowSize = 1e 00 = 30
  • wDelay = 00 00
  • dwMaxVideoFrameSize =00 20 1c 00 = 0x001C2000==1,843,200
  • dwMaxPayloadTransferSize = 00 0c 00 00 = 0x00000c00=3072,即一个USBD_ISO_PACKET_DESCRIPTOR的最大数据长度。

其对应的描述符如下:

---> This is the Default (optimum) Frame index
bLength                  : 0x1E (30 bytes)
bDescriptorType          : 0x24 (Video Streaming Interface)
bDescriptorSubtype       : 0x05 (Uncompressed Frame Type)
bFrameIndex              : 0x01
bmCapabilities           : 0x00
wWidth                   : 0x0500 (1280)
wHeight                  : 0x02D0 (720)
dwMinBitRate             : 0x08CA0000 (147456000 bps -> 18.432 MB/s) = 1280*720*2*8*10=147,456,000
dwMaxBitRate             : 0x08CA0000 (147456000 bps -> 18.432 MB/s) 
dwMaxVideoFrameBufferSize: 0x001C2000 (1843200 bytes)                = 1280*720*2=1,843,200
dwDefaultFrameInterval   : 0x000F4240 (100.0000 ms -> 10.000 fps)
bFrameIntervalType       : 0x01 (1 discrete frame interval supported)
adwFrameInterval[1]      : 0x000F4240 (100.0000 ms -> 10.000 fps)
Data (HexDump)           : 1E 24 05 01 00 00 05 D0 02 00 00 CA 08 00 00 CA   .$..............
                           08 00 20 1C 00 40 42 0F 00 01 40 42 0F 00         .. ..@B...@B..

下面对照 UVC 视频流接口控制请求 进行数据分析:

dwMaxVideoFrameSize(0x18):00 20 1c 00 即0x001c2000=1843200=1280*720*2,由于这里为YUV2格式,所以2个Y对应一个UV,所以数据帧的总大小为1280*720*2,具体可参见 YUV数据格式 一节。

打开摄像头时,选择接口的内容如下:

 CTL    01 0b 06 00  01 00 00 00                      SET INTERFACE

可见选择接口ID=1,转换接口为6的接口内的端点,其描述符如下:

        ---------------- Interface Descriptor -----------------
bLength                  : 0x09 (9 bytes)
bDescriptorType          : 0x04 (Interface Descriptor)
bInterfaceNumber         : 0x01
bAlternateSetting        : 0x06
bNumEndpoints            : 0x01 (1 Endpoint)
bInterfaceClass          : 0x0E (Video)
bInterfaceSubClass       : 0x02 (Video Streaming)
bInterfaceProtocol       : 0x00
iInterface               : 0x00 (No String Descriptor)
Data (HexDump)           : 09 04 01 06 01 0E 02 00 00                        .........

        ----------------- Endpoint Descriptor -----------------
bLength                  : 0x07 (7 bytes)
bDescriptorType          : 0x05 (Endpoint Descriptor)
bEndpointAddress         : 0x81 (Direction=IN EndpointID=1)
bmAttributes             : 0x05 (TransferType=Isochronous  SyncType=Asynchronous  EndpointType=Data)
wMaxPacketSize           : 0x1400
 Bits 15..13             : 0x00 (reserved, must be zero)
 Bits 12..11             : 0x02 (2 additional transactions per microframe -> allows 683..1024 bytes per packet)
 Bits 10..0              : 0x400 (1024 bytes per packet)
bInterval                : 0x01 (1 ms)
Data (HexDump)           : 07 05 81 05 00 14 01                              .......

可以看到,该USB使用的是同步/等时传输,端点最大包为1024字节,可额外传输2次,所以最大传输的字节数为1024*(2+1)=0xc00

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......
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无压缩的数据格式支持四种数据格式类型,见下表......
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
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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