UVC摄像头开发(一)

2023-05-16

近期,要做一个usb摄像头的开发,然后看了韦东山老师的第三期视频,讲UVC协议摄像头开发的教程。做一些记录,以免忘记。

1}当我们拿到一个摄像头,怎么知道它的一些信息呢?

(1)打开虚拟机,让它位于前台,插上摄像头,可以看到这样的界面。

然后连接,再在终端输入

#lsusb

就可以后到这么一句:

Bus 001 Device 003: ID 05a9:4519 OmniVision Technologies, Inc. Webcam Classic

可以看到,它是OmniVision公司的sensorVIP,PID分别为:05a9:4519
 再用   #dmesg   命令查看一下打印信息

 

2)我们从上面的内核打印信息可以看到,找到了uvc的设备,这是调用了内核的哪个文件的哪个函数呢?

  进入到内核目录:#cd /usr/src/linux-3.0/drivers/media/uvc

  搜索一下这条语句 :#grep "Found UVC"  * -nR

 找到它在uvc_driver.c中,可以知道,是调用了这里的程序。

(3) ls /dev/video*   可以看到它的设备节点

2}那我们怎么知道它支持的格式及分辨率等信息呢?

1) #lsusb -h    查看试用方法

  #lsusb  -v -d  ox05a9:    //-d之后带的是厂家id,不要忘了冒号

就可以看到一大串打印出来的信息。下面我们就通过打印出的信息分析一下这个摄像头。

(2)device descriptor

[html]  view plain  copy
  1. Device Descriptor:  
  2.   bLength                18  
  3.   bDescriptorType         1  
  4.   bcdUSB               2.00  
  5.   bDeviceClass          239 Miscellaneous Device  
  6.   bDeviceSubClass         2 ?  
  7.   bDeviceProtocol         1 Interface Association  
  8.   bMaxPacketSize0        64  
  9.   idVendor           0x05a9 OmniVision Technologies, Inc.  
  10.   idProduct          0x4519 Webcam Classic  
  11.   bcdDevice            1.00  
  12.   iManufacturer           1   
  13.   iProduct                2   
  14.   iSerial                 0   
  15.   bNumConfigurations      1  
只有一个设备描述符。在 USB_Video_Example 1.5.pdf 找到它的说明。

里面的每一项都有对应。

(3)configuration descriptor

[html]  view plain  copy
  1. Configuration Descriptor:  
  2.    bLength                 9  
  3.    bDescriptorType         2  
  4.    wTotalLength          481  
  5.    bNumInterfaces          2  
  6.    bConfigurationValue     1  
  7.    iConfiguration          0   
  8.    bmAttributes         0x80  
  9.      (Bus Powered)  
  10.    MaxPower              128mA  
只有一个配置描述符。

(4)Interface Association

[html]  view plain  copy
  1. Interface Association:  
  2.       bLength                 8  
  3.       bDescriptorType        11  
  4.       bFirstInterface         0  
  5.       bInterfaceCount         2  
  6.       bFunctionClass         14 Video  
  7.       bFunctionSubClass       3 Video Interface Collection  
  8.       bFunctionProtocol       0   
  9.       iFunction               2   
接口联合体描述符,这里也只有一个。 usb 摄像头有 , 一个或多个 videostreaming interface. 那到底有多少个视频流接口呢?第一个是谁?就在这个 IAD I/F 中。


(5)Interface Descriptor:

[html]  view plain  copy
  1. Interface Descriptor:  
  2.       bLength                 9  
  3.       bDescriptorType         4  
  4.       bInterfaceNumber        0  
  5.       bAlternateSetting       0  
  6.       bNumEndpoints           1  
  7.       bInterfaceClass        14 Video  
  8.       bInterfaceSubClass      1 Video Control  
  9.       bInterfaceProtocol      0   
  10.       iInterface              2   
可以看到,有两个Interface Descriptor,旗下各有N个VideoControl Interface Descriptor和VideoStreaming Interface Descriptor。

(6)VideoControl Interface Descriptor:

[html]  view plain  copy
  1. VideoControl Interface Descriptor:  
  2.    bLength                13  
  3.    bDescriptorType        36  
  4.    bDescriptorSubtype      1 (HEADER)  
  5.    bcdUVC               1.00  
  6.    wTotalLength           79  
  7.    dwClockFrequency       30.000000MHz  
  8.    bInCollection           1  
  9.    baInterfaceNr( 0)       1  
  10.  VideoControl Interface Descriptor:  
  11.    bLength                18  
  12.    bDescriptorType        36  
  13.    bDescriptorSubtype      2 (INPUT_TERMINAL)  
  14.    bTerminalID             1  
  15.    wTerminalType      0x0201 Camera Sensor  
  16.    bAssocTerminal          0  
  17.    iTerminal               0   
  18.    wObjectiveFocalLengthMin      0  
  19.    wObjectiveFocalLengthMax      0  
  20.    wOcularFocalLength            0  
  21.    bControlSize                  3  
  22.    bmControls           0x0000000a  
  23.      Auto-Exposure Mode  
  24.      Exposure Time (Absolute)  
可以看到,它有多个VideoControl Interface Descriptor, 总共有多少个呢

 很明显,最多有7个不同的vc接口描述符,分别是输入端点、输出端点、摄像头端点、选择单元、处理单元、编码单元、扩展单元
  怎么看它属于哪类描述符呢?

  从上面可以看出,有一个元素是 bDescriptorSubtype      2 (INPUT_TERMINAL) ,就是这个子类来描述的。

 那这些子类的值又是什么含义,怎么确定呢?

在文档中搜索后面的VC_INPUT_TERMINAL,可以找到 vc 接口描述符所包含的子类。

  根据不同的子类,可以找到不同的说明与上面打印的信息对应,例如这个INPUT_TERMINAL,它的各位对应同下:


描述符长度是13个字节;

bDescriptorType        36  就说是接口类型,它的取值如下:


然后是输入端点子类;端点ID是1;端点类型为Camera Sensor;

(7) VideoStreaming Interface Descriptor
vs接口也有很多子类,它们的值为:

1、FORMAT_UNCOMPRESSED

[html]  view plain  copy
  1. VideoStreaming Interface Descriptor:  
  2. bLength                            27  
  3. bDescriptorType                    36  
  4. bDescriptorSubtype                  4 (FORMAT_UNCOMPRESSED)  
  5. bFormatIndex                        1  
  6. bNumFrameDescriptors                5  
  7. guidFormat                            {59555932-0000-1000-8000-00aa00389b71}  
  8. bBitsPerPixel                      16  
  9. bDefaultFrameIndex                  1  
  10. bAspectRatioX                       0  
  11. bAspectRatioY                       0  
  12. bmInterlaceFlags                 0x00  
  13.   Interlaced stream or variable: No  
  14.   Fields per frame: 2 fields  
  15.   Field 1 first: No  
  16.   Field pattern: Field 1 only  
  17.   bCopyProtect                      0  

可以看到子类为FORMAT_UNCOMPRESSED,非压缩格式;
这种格式下支持5种分辨率。 bDefaultFrameIndex 默认使用第1种分辨率。

bBitsPerPixel:每个像素占16位。

[html]  view plain  copy
  1.  wWidth( 0)                        640  
  2. wHeight( 0)                       480  
  3. wWidth( 1)                        352  
  4. wHeight( 1)                       288  
  5. wWidth( 2)                        320  
  6. wHeight( 2)                       240  
  7. wWidth( 3)                        176  
  8. wHeight( 3)                       144  
  9. wWidth( 4)                        160  
  10. wHeight( 4)                       120  
支持这些分辨率。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVC摄像头开发(一) 的相关文章

  • 使用离线数据测试apollo7.0

    https zhuanlan zhihu com p 510712104 cd apollo 视觉测试 xff1a 1 启动dreamview 并选择车辆和地图 scripts bootstrap sh 2 启动transform模块 cy
  • 相机、激光雷达坐标系相互转换

    目录 读入外参和摄像头内参配置文件读入TF读入 激光雷达坐标系转到摄像头坐标系摄像头坐标系转到激光雷达坐标系 读入外参和摄像头内参 配置文件读入 std span class token double colon punctuation s
  • C++ thread的方式

    多线程的实现方式 xff0c 只做记录 xff0c 自己看 目录 第一种 在类中实现多线程第二种 在类外第三种 没有类第四种 pthread 定时触发总结附录 第一种 在类中实现多线程 新建thread对象 xff0c 传入类的成员函数名称
  • zynq 在ubuntu下移植ubuntu操作系统

    米联客的配套的文件是osrc lab 1 配置路径 在setting64 sh中把路径给更改一下 这里就是 改成ubuntu 并运行surce settings64 sh 2 rootfs 执行脚本 cfg rootfs sh 然后make
  • zynq 维修调试记录 客服支持 工作记录

    米联的板子用底板供电 xff0c 用JTAG往里面下程序 的时候也出现了如下问题 xff1a 跟客服进行沟通 xff0c 客服的回答是 xff1a 一般是两种可能 xff0c 一个是开发板坏了 xff0c 进行如下操作 xff0c 操作的程
  • ubuntu 16.04 安装apollo3.0(发布版)

    参考官网文档 xff1a https github com ApolloAuto apollo tree master docs https github com ApolloAuto apollo blob master docs how
  • 关于malloc返回地址无法访问

    正常情况下使用malloc申请内存 xff0c 要么是申请成功返回有效地址 xff0c 要么是内存申请失败 xff08 内存不足 xff09 返回NULL 如果出现返回了地址却无法访问的情况 xff0c 很有可能是前面代码访问内存时出现了越
  • docker里面安装Qt Creator

    sudo apt get install qt5 default qtcreator
  • 软连接ln -s 创建以及删除

    在 usr local 创建软连接 链接到 usr local include test dst文件夹 phe 64 phe usr local sudo ln s usr local include test dst test sourc
  • CAN报文:数据帧详解

    CAN报文 xff1a 数据帧详解 CAN报文CAN帧类型数据帧帧起始 Start Of Frame 仲裁段控制段数据段CRC段ACK段帧结束 End Of Frame CAN报文 CAN使用的是两条差分信号线 xff0c 只能表达一个信号

随机推荐

  • I2C总线和SPI总线

    I2C串行总线一般有两根信号线 xff0c 一根是双向的数据线SDA xff0c 另一根是时钟线SCL I2C协议 2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL SDA传输数据是 大端传输 xff08 字节高位
  • APM飞控学习之路:2 四旋翼的工作原理与系统组成

    一叶障目 xff0c 不见泰山 在研究四旋翼飞行器之前 xff0c 有必要从整体介绍其工作原理 主要部件 技术名词等基础知识 不然就像羊入虎口 xff0c 陷入一大堆不同层次的资料 xff0c 难觅出口 接下我就抛砖引玉 xff0c 尽自己
  • APM飞控学习之路:4 源码裁剪与下载

    月盈则亏 xff0c 水满则溢 当博主编译完成 xff0c 以为离成功更近一步准备下载的时候 xff0c 殊不知陷阱也早已准备好 xff0c 等待我的踏入 连上USB线 xff0c 下载 xff0c timeout xff0c timeou
  • 详解STM32CubeIDE 中 HAL库的串口中断接收函数 HAL_UART_Receive_IT

    MX串口配置方法见 xff1a CubeIDE 利用自带HAL库 串口收发 一 代码自动生成以后的项目及代码结构 xff1a main c中 xff0c 调用了串口初始化 串口初始化函数赋值了串口的参数 相当于底层的初始化 xff0c 配置
  • RTK-Real Time kinematic实时动态

    目前 xff0c GNSSj接收机约99 的时间都用作RTK模式进行测量 xff0c 只有1 的时间用作静态测量做控制网等 所以 xff0c 大部分人都习惯把GNSS接收机喊成RTK了 不过除去GNSS接收机 xff0c 你知道RTK是什么
  • USB-PD3.0(Power Delivery)充电协议

    USB PD xff08 Power Delivery xff09 是基于USB Type C的一种电源供电标准 xff0c 最大供电功率可达100瓦 xff08 W xff09 xff1b 随着USB Type C的普及 xff0c 越来
  • Lua ---- LFS库的使用

    lfs attributes filepath aname 获取路径指定属性 lfs chdir path 改变当前工作目录 xff0c 成功返回true xff0c 失败返回nil加上错误信息 lfs currentdir 获取当前工作目
  • USB2.0实际传输速度

    USB2 0规范中传输速度是480 Mbps 即60 MB s 但是很多USB2 0设备在实际工作时的数据传输速度却与此相差甚远 xff0c 比如用PC用U盘拷个东西 xff0c 往往比60MB s慢很多 xff0c 这是为什么呢 xff1
  • Type-C协议-CC检测原理

    Type C协议简介 xff08 CC检测原理 xff09 1 简介 越来越多的手机开始采用Type C作为充电和通信端口 xff0c Type C连接器实物和PIN定义如下图 xff1a Type C连接器中有两个管脚CC1和CC2 xf
  • 基地址和偏移地址

    首先必须明白 cpu和内存的区别 cpu 中央处理器 内存是物理数据存放的地方 cpu不直接存放数据而是通过内存来存放数据 cpu和内存之间通过20条地址总线相连接 xff0c 地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具
  • RZ、NRZ、NRZ1、曼彻斯特编码

    1 RZ Return Zero Code 编码 也称为归零码 xff0c 特性就是在一个周期内 xff0c 用二进制传输数据位 xff0c 在数据位脉冲结束后 xff0c 需要维持一段时间的低电平 RZ编码又分为两种 xff1a 单极性归
  • LTE中RB和RE、REG、CCE的定义

    一 RB RE REG CCE定义 xff1a 1 RB Resource Block xff1a 频率上连续12个子载波 xff0c 时域上一个slot xff0c 称为1个RB xff0c 即1RB 61 12个子载波 RB 61 12
  • UART 波形

    先介绍一些概念 起始位 先发出一个逻辑 0 的信号 xff0c 表示传输数据的开始 校验位 xff1a 数据位加上这一位后 xff0c 使得 1 的位数应为偶数 偶校验 或奇数 奇校验 xff0c 以此来校验数据传送的正确性 就比如传输 A
  • UART中的硬件流控RTS与CTS

    在RS232中本来CTS 与RTS 有明确的意义 xff0c 但自从贺氏 HAYES 推出了聪明猫 SmartModem 后就有点混淆了 xff0c 不过现在这种意义为主流意义的 xff0c 各大芯片制造厂家对UART控制器的流控基本采用H
  • AC-DC电源

    电源是什么 xff1f 电源是将来自能量源 xff08 如供电网 xff09 的电流转换为负载 xff08 如电机或电子设备 xff09 用电所需的电压和电流值的电气设备 电源的目的是以适当的电压和电流为负载供电 因此电流必须以受控的方 式
  • VYSOR-投屏软件

    前言 使用Vysor软件进行投屏 无需root 示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 Vysor是什么 xff1f vysor是一个免root实现电脑控制手机的chrome插件 xff0c 不需要root
  • Camera ZSL

    camera的ZSL是什么 ZSL Zero Shutter Lag 零快门延迟 ubiFocus 高通对照片后期的一种处理技术 xff0c 可以利用多张照片来实现拍照不对焦 xff0c 拍好之后随便选择对焦点的功能 原文链接 xff1a
  • Unity3D中uGUI事件系统简述及使用方法总结

    Unity3D的uGUI系统的将UI可能触发的事件分为12个类型 xff0c 即EventTriggerType枚举的12个值 如下图所示 xff1a 先以PointerClick为例 这个是用于某点点击事件 其他事件都可以根据相同的办法调
  • USB 2.0 A型、B型、Mini和Micro接口 type-c 定义及封装

    USB全 称Universal Serial Bus xff08 通用串行总线 xff09 xff0c 目前USB 2 0接口分为四种类型A型 B型 Mini型还有后来补充的Micro型接口 xff0c 每种接口都分插头和插座两个部分 xf
  • UVC摄像头开发(一)

    近期 xff0c 要做一个usb摄像头的开发 xff0c 然后看了韦东山老师的第三期视频 xff0c 讲UVC协议摄像头开发的教程 做一些记录 xff0c 以免忘记 1 当我们拿到一个摄像头 xff0c 怎么知道它的一些信息呢 xff1f