【USB】USB video class (UVC)相关概念学习

news2025/1/3 2:52:55
  • UVC协议

IAD

全称Interface Association Descriptor

This is used to describe that two or more interfaces are associated to the same function. An ‘association’ includes two or more interfaces and all of their alternate setting interfaces.

  • IAD用来描述由两个或者多个接口联合组成的一个功能。
  • 每个视频功能,由一个视频控制接口(VideoControl interface)和多个视频流接口(VideoStreaming interfaces)组成。
    • IAD用来描述由视频控制接口和视频流接口组成的集合。
  • 如果这个设备使用了IAD那么它的设备描述符中的bDeviceClass, bDeviceSubClass, bDeviceProtocol字段应该分别被设置为 0xEF, 0x02 and 0x01
  • IAD组成:
    在这里插入图片描述
    • 示例如下:
      -  saafd
      • 首先是描述符长度,包含bLength字段,总长为8。
      • 描述符类型bDescriptorType,可以参考下表:
        • 在这里插入图片描述
        • 11 代表接口关联描述符
      • bFirstInterface指的是这个接口关联描述符,所包含的接口的起始接口号。接口关联描述符表示的是一个功能,比如说视频是一个功能,音频是一个功能。而视频这个功能有可能包含多个接口(interface)。IAD规定了,同一个IAD中包含的接口号(bInterfaceNumber)必须是连续的。这样就可以通过起始接口号,以及接口数量来确定该IAD中所包含的所有接口。
      • bInterfaceCount如上所属,表示该IAD包含的接口数量。

      The preferred implementation, for existing device classes, is to use the interface class, subclass and protocol field values from the first interface in the list of associated interfaces.

      • bFunctionClass,bFunctionSubClass, bFunctionProtocol建议使用IAD所包含的第一个接口对应的值。
      • iFunction该IAD对应的字符串描述符的索引。

描述符

设备描述符

  • 分两种情况,一种对外只暴露一个视频控制接口,另一种暴露视频接口集合(IAD)。我们主要讨论第二种,暴露IAD的。
  • 暴露IAD的设备表明,class信息在interface级别才能找到。所以其 bDeviceClass, bDeviceSubClass, bDeviceProtocol字段应该分别被设置为 0xEF, 0x02 and 0x01。关于这些字段的详细解释可以在USB Interface Association Descriptor
    Device Class Code and Use Model中找到。示例如下:
    在这里插入图片描述

配置描述符

UVC的配置描述符和标准USB设备的配置描述符是一致的。

接口关联描述符(IAD, Interface Association Descriptor)

If the VideoControl interface is part of a Video Interface Collection, the iFunction field in the
IAD and the iInterface field in the Standard VC interface descriptor for this Video Interface
Collection must be equal.

  • 如果视频控制接口是IAD的一部分,那么IAD的iFunction字段必须和视频控制接口的iInterface 字段相等,如下:
  • 在这里插入图片描述

VideoControl Interface Descriptors

Standard VC Interface Descriptor

标准的视频控制接口描述符,和USB标准接口描述符一样,如下,bInterfaceProtocol字段协议和示例有差异
在这里插入图片描述
在这里插入图片描述

Class-Specific VC Interface Descriptor

  • 类型相关的描述符,其bDescriptorType字段为36代表它是类型相关的接口描述符

参考资料

  • USB 2.0 Specification
  • usb video class

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次JVM垃圾收集全过程

目录 JVM堆内存分配 JVM垃圾收集完整过程(带图解) 在介绍垃圾收集过程之前,有必要先对JVM堆内存做一个回顾,因为讲垃圾收集主要针对的是堆内存。 JVM堆内存分配 在JDK1.8之前,JVM堆内存主要分为新生代、老年代和永…

Kafka和Flink双剑合璧,Confluent收购Immerok引起业内广泛讨论

2023年开年开源界就出了一个大新闻,1月6日Kafka的商业化公司Confluent创始人宣布签署了收购 Immerok 的最终协议,而Immerok是一家为 Apache Flink 提供完全托管服务的初创公司,其创始团队正是Flink的创始团队。 无论是Kafka还是Flink&#x…

MQ 消息丢失、重复、积压问题,如何解决?

引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。 系统解耦:用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如京豆服务的系统需求无论如…

你安全吗?丨生活中常见的黑产行为有哪

作者丨黑蛋电视剧《你安全吗?》我也追完了,到了终结篇。在结尾,网安黑产头子马平川终于因为陷害秦淮攻击虎迫系统被查出来就是虎迫内奸,随后也被一系列证据指出饮料厂等薅羊毛事件背后都有马平川的影子:今天我们就来聊…

python基础学习--数据类型、语句、函数

python的语法比较简单,采用缩进形式,如下: 在这里# print absolute value of an integer: a 100 if a > 0:print(a) else:print(-a)插入代码片以“#”开头的语句是注释。 注意:python是大小写敏感的,如果先写错了…

在线 OJ 项目(二) · 操作数据库 · 设计前后端交互的 API · 实现在线编译运行功能

一、操作数据库前的准备二、封装操作数据库数据的相关操作三、设计前后端交互的 API四、实现在线编译运行功能一、操作数据库前的准备 设计数据库表 我们需要对数据库中存储的题目进行操作. 创建一个 “题目表” oj_table 题目的序号 id. 作为题目表的自增主键。 标题 title.…

Android之常见的使用技巧

文章目录1.全局获取Context的技巧2.使用Intent传递对象Serializable方式Parcelable方式3.定制自己的日志工具4.深色主题5.Java和Kotlin代码之间的转换1.全局获取Context的技巧 在Android中,你会发现有很多地方都需要用到Context,例如:弹出To…

设计模式在项目中的运用

一、如何管理庞大而复杂的项目开发?1、从设计原则和思想的角度来看,如何应对庞大而复杂的项目开发?① 封装与抽象:“一切皆文件”:封装了不同类型设备的访问细节,抽象为统一的文件访问方式,更高层的代码就能…

windows下解决Git报错: LF will be replaced by CRLF the next time Git touches it

问题 在命令行执行git add *的时候,提示Warning: 通常情况下是在 Windows环境中才会遇到。 原因 Uinx/Linux采用换行符LF表示下一行(LF:LineFeed,中文意思是换行),即:\n&#xff1…

Visual Transformer开端——ViT及其代码实现

深度学习知识点总结 专栏链接: https://blog.csdn.net/qq_39707285/article/details/124005405 此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器…

购买和登录Linux云服务器

目录 云服务器的购买 SSH登录云服务器 云服务器的购买 我们以腾讯云为例, 其他的服务器厂商也是类似。 1. 进入腾讯云官方网站:学生云服务器_云校园特惠套餐 - 腾讯云 (tencent.com) 2. 登陆网站(可以使用微信登陆) 3.购买云服务器 购买最低级即可,对于…

36/365 java 类的加载 链接 初始化 ClassLoader

1.类的加载,链接,初始化 注意点: Class对象是在类的加载过程中生成的(类的数据(static,常量,代码)在方法区,Class类对象在堆中),这个Class类对象作为方法区中…

Canvas 实现台球假想球精准定位

1. 前言 台球是一个让人非常着迷的运动项目,充满了各种计算逻辑,十分有趣。 对于初学者,母球、目标球、袋口三者在一条线上的时候,是非常容易进球的,但对于三者不在一条线上时,就是需要假想球的帮助&…

Windows 上安装 Insomnia 代替 Postman

Windows 上安装 Insomnia 代替 PostmanInsomnia 概述官网地址下载和安装 Insomnia使用 InsomniaInsomnia 概述 Insomnia 是一个开源桌面应用程序,它提供了设计、调试和测试API的简单方法。 通过对开发者友好的界面、内置的自动化和可扩展的插件生态系统&#xff0…

自动驾驶中间件:量产落地的关键技术

/ 导读 /对于初入自动驾驶行业的人来说,各色各样的新型传感器、线控系统、芯片域控制器、算法软件似乎是自动驾驶未来实现的重中之重,对于中间件大多数人可能都不太熟悉,有些甚至从未听说过其存在。但中间件却也是极为重要的一环,…

设计模式-创建型模式

目录 4.创建型模式 4.1 单例设计模式 4.1.1 单例模式的结构 4.1.2 单例模式的实现 4.1.3 存在的问题 4.1.4 JDK源码解析-Runtime类 4.2 工厂模式 4.2.1 概述 4.2.2 简单工厂模式 4.2.3 工厂方法模式 4.2.4 抽象工厂模式 4.2.5 模式扩展 4.2.6 JDK源码解析-Collecti…

Kotlin~生成器模式

介绍 主要作用 逐步构造复杂对象,该对象的属性更多的扩展属性,如Glide的使用。 组成 Builder:提供逐步创建产品的步骤 Director:创建可复用的特定产品(规定Builder规定一系列的步骤创建产品,非必须&…

21新版FL Studio水果电音编曲Daw宿主软件好不好用?

首先是FL Studio(以下简称FL)的逻辑和其它宿主软件都不太一样,FL的逻辑就与众不同。FL的逻辑也可以分为三部分:通道机架、混音台和播放列表。在Live里每个发送轨都可以插入一个乐器以及若干个效果器。你有200个发送轨,…

vcenter 起不来报错VMware ESX 找不到虚拟磁盘“vCenter Server 7.0U3_12.vmdk”。请确认路径有效并重试

针对无快照时丢失.vmdk描述符文件:基础磁盘文件为-flat.vmdk是存在的 那个可以进行恢复操作步骤如下1.确定 flat.vmdk基础磁盘文件的大小(字节)2.创建与flat.vmdk相同大小的新的空虚拟磁盘。3.重命名新创建的.vmdk磁盘的描述符文件匹配原始虚…

如何运行一个py项目

在pycharm中打开项目文件确保安装python环境此时是使用python3.7版本,没有的话需要添加环境:add interpreter在anaconda(安装参考https://blog.csdn.net/m0_67357141/article/details/123633490)中选择基础环境(base&a…