UVC摄像头开发(一)

  近期,要做一个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

Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 ?
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x05a9 OmniVision Technologies, Inc.
  idProduct          0x4519 Webcam Classic
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 0 
  bNumConfigurations      1
只有一个设备描述符。在 USB_Video_Example 1.5.pdf找到它的说明。

里面的每一项都有对应。

(3)configuration descriptor

 Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          481
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              128mA
只有一个配置描述符。

(4)Interface Association

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


(5)Interface Descriptor:

Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass        14 Video
      bInterfaceSubClass      1 Video Control
      bInterfaceProtocol      0 
      iInterface              2 
可以看到,有两个Interface Descriptor,旗下各有N个VideoControl Interface Descriptor和VideoStreaming Interface Descriptor。

(6)VideoControl Interface Descriptor:

     VideoControl Interface Descriptor:
        bLength                13
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdUVC               1.00
        wTotalLength           79
        dwClockFrequency       30.000000MHz
        bInCollection           1
        baInterfaceNr( 0)       1
      VideoControl Interface Descriptor:
        bLength                18
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             1
        wTerminalType      0x0201 Camera Sensor
        bAssocTerminal          0
        iTerminal               0 
        wObjectiveFocalLengthMin      0
        wObjectiveFocalLengthMax      0
        wOcularFocalLength            0
        bControlSize                  3
        bmControls           0x0000000a
          Auto-Exposure Mode
          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

        VideoStreaming Interface Descriptor:
        bLength                            27
        bDescriptorType                    36
        bDescriptorSubtype                  4 (FORMAT_UNCOMPRESSED)
        bFormatIndex                        1
        bNumFrameDescriptors                5
        guidFormat                            {59555932-0000-1000-8000-00aa00389b71}
        bBitsPerPixel                      16
        bDefaultFrameIndex                  1
        bAspectRatioX                       0
        bAspectRatioY                       0
        bmInterlaceFlags                 0x00
          Interlaced stream or variable: No
          Fields per frame: 2 fields
          Field 1 first: No
          Field pattern: Field 1 only
          bCopyProtect                      0

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

bBitsPerPixel:每个像素占16位。

         wWidth( 0)                        640
        wHeight( 0)                       480
        wWidth( 1)                        352
        wHeight( 1)                       288
        wWidth( 2)                        320
        wHeight( 2)                       240
        wWidth( 3)                        176
        wHeight( 3)                       144
        wWidth( 4)                        160
        wHeight( 4)                       120
支持这些分辨率。

 

  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值