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: 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
级硕士研究生,研究方向为:嵌入式与通信网络。