UVC规范(USB摄像头)
+ -

UVC视频C语言宏定义

2024-03-25 23 0
原文转自:https://elixir.bootlin.com/linux/v5.5-rc2/source/include/uapi/linux/usb/video.h#L49

/* --------------------------------------------------------------------------
 * UVC constants
 */

/* A.2. Video Interface Subclass Codes */
#define UVC_SC_UNDEFINED                0x00
#define UVC_SC_VIDEOCONTROL                0x01
#define UVC_SC_VIDEOSTREAMING                0x02
#define UVC_SC_VIDEO_INTERFACE_COLLECTION        0x03

/* A.3. Video Interface Protocol Codes */
#define UVC_PC_PROTOCOL_UNDEFINED            0x00
#define UVC_PC_PROTOCOL_15                0x01

/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */
#define UVC_VC_DESCRIPTOR_UNDEFINED            0x00
#define UVC_VC_HEADER                    0x01
#define UVC_VC_INPUT_TERMINAL                0x02
#define UVC_VC_OUTPUT_TERMINAL                0x03
#define UVC_VC_SELECTOR_UNIT                0x04
#define UVC_VC_PROCESSING_UNIT                0x05
#define UVC_VC_EXTENSION_UNIT                0x06

/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */
#define UVC_VS_UNDEFINED                0x00
#define UVC_VS_INPUT_HEADER                0x01
#define UVC_VS_OUTPUT_HEADER                0x02
#define UVC_VS_STILL_IMAGE_FRAME            0x03
#define UVC_VS_FORMAT_UNCOMPRESSED            0x04
#define UVC_VS_FRAME_UNCOMPRESSED            0x05
#define UVC_VS_FORMAT_MJPEG                0x06
#define UVC_VS_FRAME_MJPEG                0x07
#define UVC_VS_FORMAT_MPEG2TS                0x0a
#define UVC_VS_FORMAT_DV                0x0c
#define UVC_VS_COLORFORMAT                0x0d
#define UVC_VS_FORMAT_FRAME_BASED            0x10
#define UVC_VS_FRAME_FRAME_BASED            0x11
#define UVC_VS_FORMAT_STREAM_BASED            0x12

/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */
#define UVC_EP_UNDEFINED                0x00
#define UVC_EP_GENERAL                    0x01
#define UVC_EP_ENDPOINT                    0x02
#define UVC_EP_INTERRUPT                0x03

/* A.8. Video Class-Specific Request Codes */
#define UVC_RC_UNDEFINED                0x00
#define UVC_SET_CUR                    0x01
#define UVC_GET_CUR                    0x81
#define UVC_GET_MIN                    0x82
#define UVC_GET_MAX                    0x83
#define UVC_GET_RES                    0x84
#define UVC_GET_LEN                    0x85
#define UVC_GET_INFO                    0x86
#define UVC_GET_DEF                    0x87

/* A.9.1. VideoControl Interface Control Selectors */
#define UVC_VC_CONTROL_UNDEFINED            0x00
#define UVC_VC_VIDEO_POWER_MODE_CONTROL            0x01
#define UVC_VC_REQUEST_ERROR_CODE_CONTROL        0x02

/* A.9.2. Terminal Control Selectors */
#define UVC_TE_CONTROL_UNDEFINED            0x00

/* A.9.3. Selector Unit Control Selectors */
#define UVC_SU_CONTROL_UNDEFINED            0x00
#define UVC_SU_INPUT_SELECT_CONTROL            0x01

/* A.9.4. Camera Terminal Control Selectors */
#define UVC_CT_CONTROL_UNDEFINED            0x00
#define UVC_CT_SCANNING_MODE_CONTROL            0x01
#define UVC_CT_AE_MODE_CONTROL                0x02
#define UVC_CT_AE_PRIORITY_CONTROL            0x03
#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL        0x04
#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL        0x05
#define UVC_CT_FOCUS_ABSOLUTE_CONTROL            0x06
#define UVC_CT_FOCUS_RELATIVE_CONTROL            0x07
#define UVC_CT_FOCUS_AUTO_CONTROL            0x08
#define UVC_CT_IRIS_ABSOLUTE_CONTROL            0x09
#define UVC_CT_IRIS_RELATIVE_CONTROL            0x0a
#define UVC_CT_ZOOM_ABSOLUTE_CONTROL            0x0b
#define UVC_CT_ZOOM_RELATIVE_CONTROL            0x0c
#define UVC_CT_PANTILT_ABSOLUTE_CONTROL            0x0d
#define UVC_CT_PANTILT_RELATIVE_CONTROL            0x0e
#define UVC_CT_ROLL_ABSOLUTE_CONTROL            0x0f
#define UVC_CT_ROLL_RELATIVE_CONTROL            0x10
#define UVC_CT_PRIVACY_CONTROL                0x11

/* A.9.5. Processing Unit Control Selectors */
#define UVC_PU_CONTROL_UNDEFINED            0x00
#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL        0x01
#define UVC_PU_BRIGHTNESS_CONTROL            0x02
#define UVC_PU_CONTRAST_CONTROL                0x03
#define UVC_PU_GAIN_CONTROL                0x04
#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL        0x05
#define UVC_PU_HUE_CONTROL                0x06
#define UVC_PU_SATURATION_CONTROL            0x07
#define UVC_PU_SHARPNESS_CONTROL            0x08
#define UVC_PU_GAMMA_CONTROL                0x09
#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL    0x0a
#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL    0x0b
#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL        0x0c
#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL    0x0d
#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL        0x0e
#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL        0x0f
#define UVC_PU_HUE_AUTO_CONTROL                0x10
#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL        0x11
#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL        0x12

/* A.9.7. VideoStreaming Interface Control Selectors */
#define UVC_VS_CONTROL_UNDEFINED            0x00
#define UVC_VS_PROBE_CONTROL                0x01
#define UVC_VS_COMMIT_CONTROL                0x02
#define UVC_VS_STILL_PROBE_CONTROL            0x03
#define UVC_VS_STILL_COMMIT_CONTROL            0x04
#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL        0x05
#define UVC_VS_STREAM_ERROR_CODE_CONTROL        0x06
#define UVC_VS_GENERATE_KEY_FRAME_CONTROL        0x07
#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL        0x08
#define UVC_VS_SYNC_DELAY_CONTROL            0x09

/* B.1. USB Terminal Types */
#define UVC_TT_VENDOR_SPECIFIC                0x0100
#define UVC_TT_STREAMING                0x0101

/* B.2. Input Terminal Types */
#define UVC_ITT_VENDOR_SPECIFIC                0x0200
#define UVC_ITT_CAMERA                    0x0201
#define UVC_ITT_MEDIA_TRANSPORT_INPUT            0x0202

/* B.3. Output Terminal Types */
#define UVC_OTT_VENDOR_SPECIFIC                0x0300
#define UVC_OTT_DISPLAY                    0x0301
#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT            0x0302

/* B.4. External Terminal Types */
#define UVC_EXTERNAL_VENDOR_SPECIFIC            0x0400
#define UVC_COMPOSITE_CONNECTOR                0x0401
#define UVC_SVIDEO_CONNECTOR                0x0402
#define UVC_COMPONENT_CONNECTOR                0x0403

/* 2.4.2.2. Status Packet Type */
#define UVC_STATUS_TYPE_CONTROL                1
#define UVC_STATUS_TYPE_STREAMING            2

/* 2.4.3.3. Payload Header Information */
#define UVC_STREAM_EOH                    (1 << 7)
#define UVC_STREAM_ERR                    (1 << 6)
#define UVC_STREAM_STI                    (1 << 5)
#define UVC_STREAM_RES                    (1 << 4)
#define UVC_STREAM_SCR                    (1 << 3)
#define UVC_STREAM_PTS                    (1 << 2)
#define UVC_STREAM_EOF                    (1 << 1)
#define UVC_STREAM_FID                    (1 << 0)

/* 4.1.2. Control Capabilities */
#define UVC_CONTROL_CAP_GET                (1 << 0)
#define UVC_CONTROL_CAP_SET                (1 << 1)
#define UVC_CONTROL_CAP_DISABLED            (1 << 2)
#define UVC_CONTROL_CAP_AUTOUPDATE            (1 << 3)
#define UVC_CONTROL_CAP_ASYNCHRONOUS            (1 << 4)
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 篇笔记 写笔记

UVC 扩展单元描述符
扩展单元描述符允许硬件设计者定义任意一组控制接口,使类驱动程序可以在设备与供应商提供的主机软件之间进行通讯控制。扩展单元描述符ID由bUnitID字段中的值唯一标识描述符。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。guidExtensionCode字段包含特定于供应商的代码,该代......
Linux V4L2 UVC摄像头框架浅析
V4L2 :video for linux version 2 ,是 Linux 里一套标准的视频驱动,它支持 UVC 标准的摄像头。本文来分析一下它的核心框架。整个v4l2的框架分为三层:在应用层,我们可以在 /dev 目录发现 video0 类似的设备节点,上层的摄像头程序打开设备节点进行......
打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
UVC 视频流接口VS
和视频控制接口不同,视频流接口用于主机和设备视频功能之间进行传输视频数据。一个视频功能可以不包括视频流接口,也可以包含多个视频流接口。视频流接口用于传输视频时,其传输端点为等时/同步传输端点或者批量传输端点。视频流接口用于传输静止图像时,其传输类型为批量传输端点。用于静止图片传输是可选的,不是必须的......
UVC 请求错误码控制
请求错误码控制用于返回主机初始化后各单元、终端、端点的状态。bmRequestTypebRequestwValuewIndexwLengthData10100001GET_CURGET_INFO02接口1bDevicePowerModebDevicePowerMode:0x00:无错误,请求成功。0......
UVC摄像头扩展单元功能的开发步骤是什么?
写在扩展单元的题外话本人在开发支持UVC扩展单元的directShow应用时,必现并不需要注册接口,只需要在其源过滤器参照后续的代码枚举相关的接口如IKsControl,IKsTopologyInfo定位到指定的扩展单元接口后,直接使用其对应的IKsControl::KsProperty即可实现扩展......
UVC 描述符及描述符布局
USB设备的描述符用于向主机报告其设备的属性信息,UVC设备属于USB设备的一种,故和通用的USB设备一样,也包含设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符。UVC设备在也定义了一些特有的描述符,用于对USB视频设备的扩展。这些特有的UVC描述符和通用的USB描述符,共同组成了UV......
UVC1.0和UVC 1.1有什么区别
符合uvc1.1的设备应将类特定VC接口中的bcdUVC标志设置为0x110。此外,如果存在可选的处理单元描述符,则符合1.1的设备应执行以下操作:将bmVideoStandards字段添加到处理单元描述符。更新处理单元中的bLength字段。更新wTotalLength以反映处理单元的较大PU大小......
UVC 等时传输中的URB_ISOCH_TRANSFER
通过UVC规范可知,视频图像数据的读取可使用两种端点传输方式,分别为:BULK 块/批量传输方式ISO 等时/同步传输方式在Windows内核中,USB数据的读取是通过URB来进行传输的,其结构体是一个大大的共用体,根据数据传输的方式对应其不同的结构体,其内容如下:typedef _Struct_s......
UVC摄像头的延迟reduce latency
一般的ISP,200W30帧来说,sensor进来缓存一帧就是33ms+vpu处理时间大概10ms+jpeg编码时间16ms+USB传输时间200KB大概7、8ms,最后就是windows上的显示延迟时间,如果JPEG编码出来缓存不止一帧,时间就更长了,所以一般会超过100多ms另外,网络传输如使......
UVC 相机终端描述符
相机端点描述符使用bTerminalID来标识其惟一的ID,所有的请求必须使用此ID。wTerminalType用来描述相关的物理实体的信息。typedef struct _CAMERA_TERMINAL_DESCRIPTOR UINT8 bLength; UINT8 bDescr......
UVC Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
UVC 选择单元控制请求
选择单元控制描述符设置或读取视频功能的选择器单元内的选择器控件的属性。选择器单元表示视频流源选择器。CUR、MIN和MAX属性的有效范围是从1到选择器单元的输入管脚数。这个值可以在选择器单元描述符的bNrInPins字段中找到。RES属性只能有一个值。控制选择子SU_INPUT_SELECT_CON......
DirectShow播放UVC设备第二路码流方法
双码流播放Graphi图如上。双码流视频设备有两路捕获输出pin, RenderStream函数只会连接第一路pin,要播放第二路码流需要手动获取第二路pin,然后去连接解码器,再手动连接render,就可以显示了。示例代码// m_pGB 是 IGraphBuilder对象// m_pBF......
UVC的版本区别之处理单元描述符
UVC规范自发布到现在,已经有UVC1.0,UVC1.1和UVC1.5三个版本了。在Windows环境下,支持的最广泛的是UVC1.0,从Win7开始支持UVC1.1,从Win8开始支持UVC1.5.我们常用的UVC摄像头一般为了支持更加广泛的操作系统,一般情况下UVC的固件是UVC1.0,但随着固......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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