主题 : 【mini6410】采集CAM130 OV9650 CMOS摄像头数据?? 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 39408
精华: 0
发帖: 52
金钱: 260 两
威望: 52 点
综合积分: 104 分
注册时间: 2011-03-08
最后登录: 2013-03-12
楼主  发表于: 2011-10-27 16:07

 【mini6410】采集CAM130 OV9650 CMOS摄像头数据??

  


   想用V4L2 API接口去采集控制CMOS摄像头数据,不知道是不是和USB摄像头一样操作?

  准备设置双缓冲区循环采集
  
  求指点!

附相关程序代码:

  //摄像头相关的数据结构
struct cmos_camera_device
{
    int fd;
    struct v4l2_capability capability;
    struct v4l2_format fmt;
    struct v4l2_buffer tV4L2buf;
};

//应用程序缓冲区
typedef struct VideoBuffer
{
    void *start;
    size_t length;
}VideoBuffer;
/**********************初始化摄像头***************************/
int cmos_camera_device_init(struct cmos_camera_device *ucDevice,struct VideoBuffer v_buf[])
{
    if((ucDevice->fd = open("/dev/video0",O_RDWR)) == -1) //打开设备              
                   return -1;
    if(ioctl(ucDevice->fd,VIDIOC_QUERYCAP,&ucDevice->capability) == -1) //获取设备信息
        return -2;
    ucDevice->fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    if(ioctl(ucDevice->fd,VIDIOC_G_FMT,&(ucDevice->fmt)) == -1)//获取格式
        return -3;
    if(ucDevice->fmt.fmt.pix.pixelformat!=V4L2_PIX_FMT_YUYV) //如果不是此摄像头支持格式则退出
        return -4;
    if(ioctl(ucDevice->fd,VIDIOC_S_FMT,&ucDevice->fmt) == -1) //设置格式
         return -5;
    
    struct v4l2_requestbuffers req;
    req.count = 2;
    req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    req.memory = V4L2_MEMORY_MMAP;
    if(ioctl(ucDevice->fd,VIDIOC_REQBUFS,&req) == -1 ||((req.count)<2)) //申请缓冲区个数:2
        return -6;
    
    ucDevice->tV4L2buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    ucDevice->tV4L2buf.memory = V4L2_MEMORY_MMAP;
    ucDevice->tV4L2buf.index = 0;  //要获取内核视频缓冲区的信息编号
    if(ioctl(ucDevice->fd,VIDIOC_QUERYBUF,&ucDevice->tV4L2buf) == -1)
        return -7;
    
    ucDevice->tV4L2buf.index = 1;//要获取内核视频缓冲区的信息编号
    if(ioctl(ucDevice->fd,VIDIOC_QUERYBUF,&ucDevice->tV4L2buf) == -1)//缓冲区入队
        return -8;
    
    v_buf[0].start=NULL;
    v_buf[1].start=NULL;
    //申请2个缓冲区
级别: 新手上路
UID: 53184
精华: 0
发帖: 18
金钱: 90 两
威望: 18 点
综合积分: 36 分
注册时间: 2011-08-02
最后登录: 2012-05-27
1楼  发表于: 2012-04-02 20:24
反正我的从获取设备信息那里就卡住了~
级别: 新手上路
UID: 51702
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2011-07-06
最后登录: 2012-05-05
2楼  发表于: 2012-04-04 20:11
/dev/video0对吗?板子上/dev目录下有好几个video文件,只有一个是对的,貌似。
cmos摄像头没用过,反正我USB摄像头对应的是/dev/video2
级别: 新手上路
UID: 61667
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2012-01-04
最后登录: 2013-03-27
3楼  发表于: 2012-04-20 14:50
我用的是usb摄像头的怎么到信息获取那里也卡住了?
级别: 侠客
UID: 47708
精华: 0
发帖: 108
金钱: 565 两
威望: 113 点
综合积分: 216 分
注册时间: 2011-05-24
最后登录: 2019-03-17
4楼  发表于: 2012-05-01 18:44
我的没报错,可采到的都是黑屏
级别: 新手上路
UID: 1953
精华: 0
发帖: 15
金钱: 85 两
威望: 16 点
综合积分: 30 分
注册时间: 2008-10-14
最后登录: 2014-05-07
5楼  发表于: 2014-02-19 17:55
楼主的好了没
级别: 新手上路
UID: 52906
精华: 0
发帖: 29
金钱: 145 两
威望: 29 点
综合积分: 58 分
注册时间: 2011-07-27
最后登录: 2015-08-03
6楼  发表于: 2014-02-27 00:01

 回 5楼(dgxll) 的帖子

我也在调试,发现设备文件节点名不对。   内核是 友善的linux 2.6.28.6..
级别: 新手上路
UID: 103538
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2014-04-28
最后登录: 2014-05-16
7楼  发表于: 2014-04-29 15:22

 回 2楼(usafchn) 的帖子

请问你用的是什么usb摄像头呢?
级别: 新手上路
UID: 103538
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
综合积分: 12 分
注册时间: 2014-04-28
最后登录: 2014-05-16
8楼  发表于: 2014-04-29 15:23

 回 3楼(jm洺) 的帖子

请问你用的是什么usb摄像头呢??是在mini6410上吗?