当前位置: 技术问答>linux和unix
关于OV511视频采集速度的问题
来源: 互联网 发布时间:2016-05-12
本文导语: 最近在做linux下基于s3c2440嵌入式板的视频采集,用的是OV511芯片的摄像头,遇到一个问题,采集连续视频的速度很慢,只有每秒4,5帧的样子,采集部分代码是: frame=0; vd->mmap.frame=frame; ioctl(vd->fd,VIDIOCMCATURE,&(vd->mmap)//...
最近在做linux下基于s3c2440嵌入式板的视频采集,用的是OV511芯片的摄像头,遇到一个问题,采集连续视频的速度很慢,只有每秒4,5帧的样子,采集部分代码是:
frame=0;
vd->mmap.frame=frame;
ioctl(vd->fd,VIDIOCMCATURE,&(vd->mmap)//开始一帧的捕获
vd->framestat[frame]=1;
for(number=0;numbermap+vd->mbuf.offsets[frame];//获取当前帧地址
frame=(frame+1)%2;
v4l_capture(vd,frame);//捕获下一帧
}
int v4l_grab_sync(vd,frame)
{
ioctl(vd->fd,VIDIOCSYNC,&(vd->mmap.frame);
vd->framestat[frame]=0;
vd->mmap.frame=frame;
}
int v4l_capture(vd,frame)
{
ioctl(vd->fd,VIDIOCMCATURE,&(vd->mmap)
vd->framestat[frame]=1;
}
用时间函数测了一下,发现时间基本上是消耗在v4l_grab_sync(vd,frame)这一步上,大概每帧需要0.2秒,不知道该怎么改进程序才能提高采集速度,是在应用程序里做改动,还是需要到OV511的驱动程序里做相应改动,有知道的大哥希望能不吝赐教,小弟先行谢过。
frame=0;
vd->mmap.frame=frame;
ioctl(vd->fd,VIDIOCMCATURE,&(vd->mmap)//开始一帧的捕获
vd->framestat[frame]=1;
for(number=0;numbermap+vd->mbuf.offsets[frame];//获取当前帧地址
frame=(frame+1)%2;
v4l_capture(vd,frame);//捕获下一帧
}
int v4l_grab_sync(vd,frame)
{
ioctl(vd->fd,VIDIOCSYNC,&(vd->mmap.frame);
vd->framestat[frame]=0;
vd->mmap.frame=frame;
}
int v4l_capture(vd,frame)
{
ioctl(vd->fd,VIDIOCMCATURE,&(vd->mmap)
vd->framestat[frame]=1;
}
用时间函数测了一下,发现时间基本上是消耗在v4l_grab_sync(vd,frame)这一步上,大概每帧需要0.2秒,不知道该怎么改进程序才能提高采集速度,是在应用程序里做改动,还是需要到OV511的驱动程序里做相应改动,有知道的大哥希望能不吝赐教,小弟先行谢过。
|
我觉得,你可以去了解一下 "双缓冲"了,呵呵……
我们做的时候,在s3c2410上(比你的主频要低很多),画面还算流畅。
我在2440上使用zc301p,使用 读设备 的方法,也没这么慢呀。
怎么还用ov511呢?换个当前流行的,直接就jpeg压缩,输出jpeg格式
我们做的时候,在s3c2410上(比你的主频要低很多),画面还算流畅。
我在2440上使用zc301p,使用 读设备 的方法,也没这么慢呀。
怎么还用ov511呢?换个当前流行的,直接就jpeg压缩,输出jpeg格式
|
1)v4l_grab_sync里 是不是有较多的memory copy?
如果有的话,建议作优化
2)可以把v4l_grab_sync放在单独线程里来作。
3)注意到你用v4l,而不是v4l2。你用的是2。4的kernel?学习也好,工作目的也好,
改到2.6吧。
如果有的话,建议作优化
2)可以把v4l_grab_sync放在单独线程里来作。
3)注意到你用v4l,而不是v4l2。你用的是2。4的kernel?学习也好,工作目的也好,
改到2.6吧。