• Android开发之《USB Camera》


    SimpleWebCam Source Code:https://bitbucket.org/neuralassembly/simplewebcam/src

    1. USB摄像头UVC兼容(如今大部分兼容)

    2. 设备是否支持USB-OTG

    3. 是够在/dev目录下创建了设备(shell执行ls -l /dev/v*,看到video0 video1)

    4. 如果没有/dev设备,需要写一个固件(UVC)跟硬件通信

    什么是UVC?

    UVC,全称:USB video class或video device class,是Microsoft与另外几家设备厂商联合退出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一。

    主流操作系统 (如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later) 都已提供UVC设备驱动,符合UVC规格的硬件设备在不需要安装任何驱动程序下即可在主机中正常使用。

    怎样判断一个摄像头是否属于UVC规范?

    1. 使用lsusb命令,找出摄像头设备号(Vendor ID)和产品号(Product ID)

    2. 查找是否有视频类接口信息

    # lsusb -d VID: PID -v | grep "14 Video"

    如果兼容,则会输出如下信息:

    bFunctionClass 14 Video

    bInterfaceClass 14 Video

    bInterfaceClass 14 Video

    bInterfaceClass 14 Video

    否则,则是一个non-UVC设备

    ----------------------

    camera控制主要参考v4l2接口 

    v4l2 Camera详细设置

    v4l2_streamparm

    ----------------------

    C语言 select函数使用

    fd_set readfd;  
    struct timeval timeout;  
      
    FD_ZERO(&readfd);   //初始化readfd  
    FD_SET(gps_fd, &readfd);   //把gps_fd加入readfd  
    timeout.tv_sec = 3;   //设置3秒超时  
    timeout.tv_usec = 0;  
      
    j = select(gps_fd+1, &readfd, NULL, NULL, &timeout);   //用select对gps_fd进行轮循  
    if( j>0 ){  
        if( FD_ISSET(gps_fd, &readfd) ){   //如果gps_fd可读  
            i = read(gps_fd, buf, SIZE);  
            buf[i] = '';  
        }  
    }  

    YUV

    640x480, 30
    
    1280x720, 9
    
    1920x1080, 6
    
    MJPEG:
    
    640x480, 61612
    
    1280x720, 60
    
    1920x1080, 30

    MJPEG解码
    可以参考这个文件frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp,这里面调用的libskia.so,libskia里调用的硬解码接口hw_jpeg_deco
     
     
    在v4l2读出的帧中找到SOF0(Start Of Frame 0),插入个huffman表就可以用libjpeg解码成rgb。
    可以参考mjpg-streamer中input_uvc目录下的代码,或者我刚调试好的 :https://github.com/joeshang/joycar/blob/master/module/v4l2_camera/decoder_mjpeg.c
  • 相关阅读:
    ServletConfig类
    坑爹的去哪儿网订酒店经历
    python + opencv + pycharm +语音生成
    最近看到的工作要求
    pip in windows
    路由器外接硬盘做nas可行吗?
    阅读201706
    scrum学习
    学习concurrency programming进展
    Reactor/Proactor的比较 (ZZ)
  • 原文地址:https://www.cnblogs.com/alanfang/p/6726755.html
Copyright © 2020-2023  润新知