v4l2 设备操作(1)

 

 

v4l2 设备操作(1)

2011-7-1 18:02:10

1  打开设备

   用户层操作
   fd_camera = open(CAMERA_DEV, O_RDONLY);
  
   内核层
  
   使用struct camera_context_s 来描述摄像头的上下文
   struct pxa_camera_driver_status_t 来描述状态
   static int pxa_camera_minor = 0;
    static p_camera_context_t g_camera_context;
   static struct pxa_camera_driver_status_t g_camdrv_status;
   
    如果状态处于suspended,返回失败
   
    初试化状态的wait_outd0cs等待队列
   
    通知ipmc一个事件
   
    将自己加入到d0cs的等待队列中
   
    直到d0cs好了或超时。
    
    接着初试化各种参数。
   
    为摄像头设置电压,时钟
   
    设置中断掩码
   
    清空报告链表,buf队列
   
   
 
2  枚举支持的视频输入
    ret = ioctl(fd_camera, VIDIOC_ENUMINPUT, &vinput);
   
    输入的ID不能超过SENSOR_NUMBER
   
    将支持的sensor的ID 返回
   
   
   
3  选择一个视频输入

  ioctl(fd_camera, VIDIOC_S_INPUT, &desiredcamera)
 
  首先判断输入的sensor ID是否有效
  然后deinit
  设置上下文的相应的camera_functions方法
  然后init
 
 4 设置参数
   
   ioctl(fd_camera, VIDIOC_S_PARM, &parm)
  
   设置 struct v4l2_streamparm 流参数
  

 5  设置采集格式
 
   ioctl(fd_camera, VIDIOC_S_FMT, &format)
  
    设置 struct v4l2_format,验证后存放在camera的状态中


 6 申请n个buffer,逐一进行映射,
 
   ioctl(fd_camera, VIDIOC_REQBUFS, &requestbuffers)
  
   ioctl (fd_camera, VIDIOC_QUERYBUF, &buffer)
  
   mmap
  
   注意映射出来是4K上取整的
  
   ioctl (fd_camera, VIDIOC_QBUF, &buffer)
  
 7  开始采集
  
    ioctl (fd_camera, VIDIOC_STREAMON, &buftype)
   
 9   释放
 
  ioctl (fd_camera, VIDIOC_STREAMOFF, &buftype)
  munmap
  close
   
以上就是整体的调用框架.

查看v4l2-common.c 可以看出通过的ioctl命令,以及v4l2 v4l 之间的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值