作者:曾永刚
转自:http://zyg0227.blog.51cto.com/1043164/316941
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 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可以看到采集到的图像
点击刷新,图片会不断刷新。
五. 存在的问题和拟采取的解决方案
改变输出文件目录以后采集速度可以达到每秒
4,
5帧,但是一般的视频播放都要求每秒
15帧以上,所以相对说来采集速度还是太慢,暂时还没有好的解决方案。
六. 作者简介
xx:
1984年
7月
20日生,重庆市人。
07级硕士研究生,研究方向为:嵌入式与通信网络。