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

6.       采集到的数据不能显示;
原因:关键是没有设置 vd->picture.palette, 将其设置为与 vd->mmap.format 相同值即可。如果设置的是 YUV420 格式,则数据可以用 YUVviewer 播放, 如果数据格式设为 RGB24 则还需加上 BMP 头后数据才能显示为图像。
       其中 RGB24 图像格式为:每个像素点包含 R G B 三个分量,且三分量交替排列,即( R G B );( R G B );( R G B ); …… 这样交替出现,如果不加 BMP 头图像大小就为 width*height*3.
       YUV 格式又分为很多种,各种格式的 Y U V 分量的比例以及排列顺序不一样,比如 UYUV 就是 [u,y,v,y][u,y,v,y] 交替排列,比例为 Y U V=4 2 2 ,图像大小就为 width*height*2.
yuv420 则不一样,首先是比例,每行都只有 U 分量或者 V 分量, Y U V=4 2 0 4 0 2
其次排列形式也不一样, 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 [email protected] 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 �Cprefix=/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 可以看到采集到的图像
点击刷新,图片会不断刷新。
 
 
五.     存在的问题和拟采取的解决方案
改变输出文件目录以后采集速度可以达到每秒 4 5 帧,但是一般的视频播放都要求每秒 15 帧以上,所以相对说来采集速度还是太慢,暂时还没有好的解决方案。
六.     作者简介
xx: 1984 7 20 日生,重庆市人。 07 级硕士研究生,研究方向为:嵌入式与通信网络。

你可能感兴趣的:(视频,文档,设计,采集,休闲)