OV511视频采集设计文档(3)

发布时间:2019-08-29 07:36:42编辑:auto阅读(1582)

    6.       采集到的数据不能显示;
    原因:关键是没有设置vd->picture.palette,将其设置为与vd->mmap.format相同值即可。如果设置的是YUV420格式,则数据可以用YUVviewer播放,如果数据格式设为RGB24则还需加上BMP头后数据才能显示为图像。
           其中RGB24图像格式为:每个像素点包含RGB三个分量,且三分量交替排列,即(RGB);(RGB);(RGB);……这样交替出现,如果不加BMP头图像大小就为width*height*3.
           YUV格式又分为很多种,各种格式的YUV分量的比例以及排列顺序不一样,比如UYUV就是[u,y,v,y][u,y,v,y]交替排列,比例为YUV=422,图像大小就为width*height*2.
    yuv420则不一样,首先是比例,每行都只有U分量或者V分量,YUV=420402
    其次排列形式也不一样,YUV420三分量不是交替排列,而是各自分块排列,所有y分量之后才是u分量,最后是v分量。
     
    如一幅4*4的图片其像素排列为:
    y     y     y     y
    y     y     y     y
    y     y     y     y
    y     y     y     y
     
    u     u
    u     u
     
    v     v
    v     v
    图片大小为width*height*1.5.
     
    7.       可以成功采集到连续的视频了,但是存在的对连续视频的帧采集速度太慢,加入时
    间函数测了一下,每秒只能采集一到两帧,且主要是将数据写入文件部分耗时太多,
    原因:写入文件的目录为“/temp.YUV”,这个目录还是在PC机上,写入时还是要通过网线传到电脑上,将目录改为“/tmp/temp.YUV”就可以大为缩短时间,“/tmp”目录是在板子上的本地目录,这可以在PC上打开/home/nfs/tmp和在板子上打开/tmp查看内容发现内容不同来验证。
     
    xiyong8260的补充:
    2008-5-29
    1、编译内核,使用make menuconfig加上ov511(在usb选项中)的和vedio for linux驱动,
    编译的时候错误,报告videodev.h文件不能找到version.h文件,后来修改/usr/local/arm/…. videodev.h文件,删除包含version.h,就好了。
     
    2、启动内核,会打印下面的信息:
    hub.c: new USB device usb-ohci-1, assigned address 2
    ov511.c: USB OV511+ video device found
    ov511.c: model: Unknown
    ov511.c: Camera type (108) not recognized
    ov511.c: Please notify mark@alpha.dyndns.org of the name,
    ov511.c: manufacturer, model, and this number of your camera.
    ov511.c: Also include the output of the detection process.
    ov511.c: Sensor is an OV7620
    Looking up port of RPC 100005/1 on 192.168.10.135
    ov511.c: Device registered on minor 0
    说明检测到了OV511的设备,但是model不认识,查看源代码,camlist中不包含108的设备号;
     
    3、编写了一个测试程序,打开/dev/video0设备
    建立设备号 /dev/videio0 c 81 0,测试结果不能打开设备,怀疑是没有这个设备,
    查看源代码,发现是driver/meida/video/videodev.c文件处理的video0设备,
    进一步发现没有运行videodev_init程序
    以前的代码是通过MODULE的方式运行的,
    #ifdef MODULE            
    int init_module(void)
    {
       return videodev_init();
    }
    现在修改为
    module_init(videodev_init);
    module_exit(videodev_exit);
    但是发现还是没有运行又发现需要在函数前增加_init的标记才能运行
    static int __init
    videodev_init(void)
    现在能够运行了在启动信息中可以发现如下的信息
    Video for Linux One (2.2.16). Major device: 81
    Video for Linux Two (V0.20). Major device: 81
    使用cat /proc/devices可以看到设备名字:81 v4l1/2
    [root@192 /]# cat /proc/devices
    Character devices:
      1 mem
      2 pty/m%d
      3 pty/s%d
      4 vc/0
      5 ptmx
      7 vcs
     10 misc
     13 input
     29 fb
     81 v4l1/2
     89 i2c
     90 mtd
    128 ptm
    136 pts/%d
    162 raw
    180 usb
    204 ttyS%d
    205 cua%d
    254 s3c2440-ts
    Block devices:
      1 ramdisk
      7 loop
     31 mtdblock
    同时在dev目录下自动建立了下面的节点:
    /dev/v4l/video
     
    2008-5-31
    1、今天尝试着编译了webcam-server-0.50
    使用2.95.3编译器,显示不能找到jpeg库,重新编译了jpeg库,还是有些问题,干脆直接使用3.3.2的编译器;
    ./configure –prefix=/usr/local/arm/3.3.2/ -srcdir=/home/xiyong/vedio/webcam_server-0.50
    然后修改Makefile src/Makefile
    cc=/usr/local/arm/3.3.2/bin
    报错:没有找到fd
    修改:webcam_server.c的那几个struct定义到main开头即可
     
    直接make,会在src/目录下生成webcam_server文件,拷贝到/home/nfs目录下
    建立节点:/dev/video0 c 81 0
    运行 ./webcam_server目录
    在计算机的IE浏览器中输入 http://192.168.10.199:8888可以看到采集到的图像
    点击刷新,图片会不断刷新。
     
     
    改变输出文件目录以后采集速度可以达到每秒45帧,但是一般的视频播放都要求每秒15帧以上,所以相对说来采集速度还是太慢,暂时还没有好的解决方案。
    xx:1984720日生,重庆市人。07级硕士研究生,研究方向为:嵌入式与通信网络。

关键字