UVC 负载数据头

UVC学习笔记是以最新的UVC1.5为基础,带你学习和了解最新的UVC规范和协议。

UVC数据传输时,每次USB传输,数据包中有一个负载数据头(Payload Header Information),数据头后为有效的数据。其数据包格式见图:

UVC数据格式

负载数据头为最大为12个字节,包括固定的前2字节的负载数据头和10个字节的扩展负载数据头。

数据偏移 数据标识 长度 数据类型 描述
0 bHeaderLength 1 数字 负载数据长(包括bHeaderLength)
1 bmHeaderInfo 1 位图 采样数据的信息
/ dwPresentationTime 4 数字 时间戳(PTS)
/ scrSourceClock 6 数字 设备时钟源
  • bHeaderLength占一个字节,表示帧头的数据长度(包括自己)。
  • bmHeaderInfo 占一个字节,表示的信息比较多。

    • BIT0:经常在0和1之间切换。每次切换表示一个新帧数据的产生。
    • BIT1:帧的结束标志位。这个是可选的。
    • BIT2:如果标识为1,说明 dwPresentationTime有效并被传输。
    • BIT3:如果标识为1,说明dwSourceClock有效并被传输。
    • BIT4:特定位,详见 individual payload specifications的用法。
    • BIT5:如果为1,表示后面的为抓取的静态图片数据,仅支持2,3方法
    • BIT6:如果为1,表示传输错误
    • BIT7:如果为1,表示是负载数据头的最后一个字节,即bHeaderLength=2.
  • dwPresentationTime占4个字节:
    演示时间戳(PTS)。设备中的源时钟,帧捕获时的时钟。

  • scrSourceClock 占6个字节,包含2部分:

    • D31..D0: Source Time Clock in nativedevice clock units
    • D42..D32: 1KHz SOF token counter
    • D47..D43: Reserved, set to zero

在以下情况下,则dwPresentationTime and dwSourceClock 必须有效。

  • 设备有多个视频或者音频源;
  • 音视频需要同步的;
  • 视频流中不包含同步信息;

H264视频和静态图像有效载荷帧头数据示例

下面我们通过BUSBOUD抓取一个H264摄像头的数据并进行分析举例,这里我们每包只抓取前16个字节

  30.3  IN     0c 0c 00 00  00 00 00 00  00 00 00 00  00 00 00 01 
  30.3  IN     0c 0c 00 00  00 00 00 00  00 00 00 00  2f fa b1 0a 
  30.3  IN     0c 0c 00 00  00 00 00 00  00 00 00 00  69 c8 92 51 
  30.3  IN     0c 0e 00 00  00 00 00 00  00 00 00 00  ed e7 3e 2c 
  30    IN                                                        
  30.3  IN     0c 0d 00 00  00 00 00 00  00 00 00 00  00 00 00 01 
  30.3  IN     0c 0d 00 00  00 00 00 00  00 00 00 00  ae 0c 8e 63 
  30.3  IN     0c 0d 00 00  00 00 00 00  00 00 00 00  63 68 78 d0 
  30.3  IN     0c 0f 00 00  00 00 00 00  00 00 00 00  d0 93 b5 aa 
  30    IN                                                        
  30.3  IN     0c 0c 00 00  00 00 00 00  00 00 00 00  00 00 00 01 
  30.3  IN     0c 0c 00 00  00 00 00 00  00 00 00 00  df ac 8a 22 
  30.3  IN     0c 0c 00 00  00 00 00 00  00 00 00 00  55 e3 23 cc 
  30.3  IN     0c 0e 00 00  00 00 00 00  00 00 00 00  3c f8 30 f4

可以看到,视频图像数据负载头长度为0x0c12个字节。
通过第二个字节的变化,可知抓取了3帧视频帧的数据,每帧数据分为4包。
第一帧从0C变成0E,其中起始帧位位0,变成0E后,结束帧置位。
第二帧从0d开始,可以看到起始帧位从第一帧的0变成了1.
而BIT2和BIT3都存在,却被填充了00.

YUV2视频和静态图像有效载荷帧头数据示例

每包只抓取前16个字节

Device  Phase  Data                                               
------  -----  ---------------------------------------------------
   6.1  IN     0c 0f 00 20  00 00 00 20  00 00 00 20  df 80 df 83 
   6.1  IN     0c 0e 01 20  00 00 01 20  00 00 01 20  e0 80 e0 83 
   6.1  IN     0c 0f 02 20  00 00 02 20  00 00 02 20  df 80 dd 83 
   6.1  IN     0c 0e 03 20  00 00 03 20  00 00 03 20  e3 7f e4 83 
   6.1  IN     0c 0f 04 20  00 00 04 20  00 00 04 20  df 80 e0 83 
   6.1  IN     0c 0e 05 20  00 00 05 20  00 00 05 20  e4 7f e0 83 
   6.1  IN     0c 0f 06 20  00 00 06 20  00 00 06 20  e2 80 de 83 
   6.1  IN     0c 0e 07 20  00 00 07 20  00 00 07 20  e2 7f e1 83 
   6.1  IN     0c 0f 08 20  00 00 08 20  00 00 08 20  e1 7f e1 83 
   6.1  IN     0c 0e 09 20  00 00 09 20  00 00 09 20  e0 7f e0 82 
   6.1  IN     0c 0f 0a 20  00 00 0a 20  00 00 0a 20  df 7f df 83
作者使用windows开发UVC摄像头驱动,欢迎加入字节流官方QQ群:952873936或联系站长进行技术交流。
字节流是站长多年来的工作经验和技术总结,和站长一起学习,每天都有进步。
微信公众号
字节流公众号  字节流QQ群:952873936
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

Powered by bytekits.com,汇天下文字,成非凡梦想!!!