基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)

在我的上一篇文章基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)中,我详细介绍了如何配置V4L2驱动程序的采集环境,那么在这篇文章中,我将详细分析V4L2采集视频的过程。

一、向驱动程序申请缓冲帧
缓冲帧,顾名思义就是在Linux驱动程序中用于临时存放数据的“容器”,在V4L2驱动程序中,也就是存放我们的视频流数据。而什么又是向驱动程序申请缓冲帧呢,因为在V4L2驱动程序中,其配备的缓冲帧的个数并不是固定的,每一次我们使用的时候都要根据我们的需求向V4L2驱动程序申请,这也体现了V4L2的强大以及设计的合理性,保证了不必要的资源浪费。下面介绍如何向V4L2驱动程序申请缓冲帧。
使用命令:VIDIOC_REQBUFS

    struct v4l2_requestbuffers req;
    //设定v4l2_requestbuffers的参数信息
    CLEAR (req);
    req.count               = 4; //缓存数量
    req.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE; //数据流类型,这个参数不能改变
    req.memory              = V4L2_MEMORY_MMAP;//使用内存映射方式。
    //申请缓冲数,使用VIDIOC_REQBUFS,注意上面的req.count虽然赋值为4,但是并不一定申请之后,得到的缓冲数也为4
    if (-1 == xioctl (fd, VIDIOC_REQBUFS, &req)) {
        if (EINVAL == errno) {
            LOGE("%s does not support memory mapping", dev_name);
            return ERROR_LOCAL;
        } else {
            return errnoexit ("VIDIOC_REQBUFS");
        }
    }
    //如果申请得到的缓冲4小于2的话,则表示没有充分的内存(内核空间,具有实际的物理内存)
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值