UVC添加视频格式
1. 概述¶
USB Host根据在设备枚举获取到的格式描述符和帧描述符来确定UVC设备支持的视频格式,如需添加视频格式或者在已有的视频格式上添加其他分辨率的格式,有如下步骤:
-
添加格式描述符或者帧描述符;设备枚举结束后,在host播放器可看到对应的视频格式;
-
Host需要播放对应格式视频时,host将对应的视频格式和分辨率信息等下发到UVC设备;
-
UVC设备接收到对应的信息后,根据信息设置当前的视频格式和分辨率等信息;
-
Host再次获取信息,如果UVC设备返回的信息和Host保持一致,Host开始下发IN请求来进行传输。因此,添加视频格式后,这一部分也需要在应用部分添加对应的格式信息;
-
发送时需要根据不同的格式,获取对应的格式数据,调用uvc发送api来发送video data。
2. 增添操作¶
2.1.描述符部分的修改¶
描述符的部分定义在uvc.c和uvc.h文件。uvc.h涉及新增格式结构体定义和部分宏定义,uvc.h是对应格式描述符的添加。
以添加YUY2格式为例:
-
在uvc.h定义YUY2的格式结构体和分辨率结构体。


-
在
uvc.h的uvc数据接口添加yuy2结构体
-
在
uvc.h修改宏定义-
UVC_NUM_FORMATS
表示支持的视频格式数量
-
UVC_VS_HDR_FULL_LEN
UVC VS数据接口头部总长度,由于添加了格式,总长度需要变更
-
新增的UVC_NUM_YUY2_FRAME
新增YUY2分辨率个数
-
新增的UVC_DT_DESC_YUY2_SIZE
新增YUY2的长度
具体修改可以参考下图。

-
-
uvc.c里添加yuv2描述符在变量
static struct uvc_alt0_data_descriptor alt0_data_desc里加入yuv2的描述符。包括yuyv format描述符和各种分辨率描述符。具体如下图所示。(注:分辨率描述符只列出一部分)

2.2. 应用部分的修改¶
应用部分的修改是因为host播放器选定对应格式的对应分辨率来下发cmd到device, device需要根据下发的cmd信息来设定参数。这部分的修订在uvc_video.h文件中的uvc_formats变量,根据已有的定义,添加对应的format信息。

2.3. 帧发送修订¶
UVC发送api:
void sstar_usbd_uvc_sent_packet(void *addr, u32 size)
新增新的视频格式后,需要获取对应视频格式frame后,通过此api发送。