UVC添加视频格式

Version1.0


1. 概述

USB Host根据在设备枚举获取到的格式描述符和帧描述符来确定UVC设备支持的视频格式,如需添加视频格式或者在已有的视频格式上添加其他分辨率的格式,有如下步骤:

  1. 添加格式描述符或者帧描述符;设备枚举结束后,在host播放器可看到对应的视频格式;

  2. Host需要播放对应格式视频时,host将对应的视频格式和分辨率信息等下发到UVC设备;

  3. UVC设备接收到对应的信息后,根据信息设置当前的视频格式和分辨率等信息;

  4. Host再次获取信息,如果UVC设备返回的信息和Host保持一致,Host开始下发IN请求来进行传输。因此,添加视频格式后,这一部分也需要在应用部分添加对应的格式信息;

  5. 发送时需要根据不同的格式,获取对应的格式数据,调用uvc发送api来发送video data。


2. 增添操作


2.1.描述符部分的修改

描述符的部分定义在uvc.cuvc.h文件。uvc.h涉及新增格式结构体定义和部分宏定义,uvc.h是对应格式描述符的添加。

以添加YUY2格式为例:

  1. 在uvc.h定义YUY2的格式结构体和分辨率结构体。

  2. uvc.h的uvc数据接口添加yuy2结构体

  3. uvc.h修改宏定义

    • UVC_NUM_FORMATS

      表示支持的视频格式数量

    • UVC_VS_HDR_FULL_LEN

      UVC VS数据接口头部总长度,由于添加了格式,总长度需要变更

    • 新增的UVC_NUM_YUY2_FRAME

      新增YUY2分辨率个数

    • 新增的UVC_DT_DESC_YUY2_SIZE

      新增YUY2的长度

    具体修改可以参考下图。

  4. 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发送。