L4V2框架下APP编写ioctl流程

本文详细介绍了如何在L4V2框架中编写摄像头应用,涉及设备查询、格式设置、缓冲区管理、视频流控制等步骤,展示了从硬件抽象到软件操作的具体流程。
摘要由CSDN通过智能技术生成

摄像头L4V2框架编写APP,对获取数据的由抽象硬件到软件ioctl操作有具体流程。

在这里插入图片描述

查询设备能力属性

 struct v4l2_capability cap;
    ioctl(fd, VIDIOC_QUERYCAP, &cap);

枚举格式

struct v4l2_fmtdesc fmtdesc;
    fmtdesc.index = fmt_index; 
    fmtdesc.type  = V4L2_BUF_TYPE_VIDEO_CAPTURE;  
    ioctl(fd, VIDIOC_ENUM_FMT, &fmtdesc);

枚举帧大小

struct v4l2_frmsizeenum fsenum;
        fsenum.pixel_format = fmtdesc.pixelformat;
        fsenum.index = frame_index;
        ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &fsenum);

设置格式

struct v4l2_format fmt;
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    fmt.fmt.pix.width = 1024;
    fmt.fmt.pix.height = 768;
    fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG;
    fmt.fmt.pix.field = V4L2_FIELD_ANY;
    ioctl(fd, VIDIOC_S_FMT, &fmt);

申请buffer

struct v4l2_requestbuffers rb;
    rb.count = 32;
    rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    rb.memory = V4L2_MEMORY_MMAP;
    ioctl(fd, VIDIOC_REQBUFS, &rb);

查询buffer是否申请成功

struct v4l2_buffer buf;
    buf.index = i;
    buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    buf.memory = V4L2_MEMORY_MMAP;
    ioctl(fd, VIDIOC_QUERYBUF, &buf);

buffer放入空闲链表

 struct v4l2_buffer buf;
    buf.index = i;
    buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    buf.memory = V4L2_MEMORY_MMAP;
    ioctl(fd, VIDIOC_QBUF, &buf);

启动摄像头

   type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
   ioctl(fd, VIDIOC_STREAMON, &type);

buffer取出队列

struct v4l2_buffer buf;
    buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    buf.memory = V4L2_MEMORY_MMAP;
    ioctl(fd, VIDIOC_DQBUF, &buf);

使用id的 ioctrl命令

//查询设备支持的控制属性
struct v4l2_queryctrl   qctrl;
    qctrl.id = V4L2_CID_BRIGHTNESS; 
    ioctl(fd, VIDIOC_QUERYCTRL, &qctrl);  
//获取当前的控制值
struct v4l2_control ctl;
    ctl.id = V4L2_CID_BRIGHTNESS;
    ioctl(fd, VIDIOC_G_CTRL, &ctl);     
//设置当前的控制值
  struct v4l2_control c;
    c.id = V4L2_CID_BRIGHTNESS; 
    c.value = 99;
    ioctl(h->fd, VIDIOC_S_CTRL, &c);    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值