当前位置: 首页 > news >正文

v4l2用户侧使用流程

前言

v4l2的用户侧使用方法的简单demo,参考:media/v4l/v4l2grab.c
实际上,v4l2的用户侧有libv4l开源库。用户可以使用此开源库快速搭建其用户侧代码。

流程

int main()
{// openfd = v4l2_open("/dev/video0", O_RDWR | O_NONBLOCK, 0);// set formatCLEAR(fmt);fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;fmt.fmt.pix.width       = 640;fmt.fmt.pix.height      = 480;fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24;fmt.fmt.pix.field       = V4L2_FIELD_INTERLACED;xioctl(fd, VIDIOC_S_FMT, &fmt);// request buffer// 申请的buffer留在内核CLEAR(req);req.count = 2;req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;req.memory = V4L2_MEMORY_MMAP;xioctl(fd, VIDIOC_REQBUFS, &req);buffers = calloc(req.count, sizeof(*buffers));// query buffer// 根据index获取buffer信息(length和offset),然后mmap获取虚拟地址并保存for (n_buffers = 0; n_buffers < req.count; ++n_buffers) {CLEAR(buf);buf.type        = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory      = V4L2_MEMORY_MMAP;buf.index       = n_buffers;xioctl(fd, VIDIOC_QUERYBUF, &buf);buffers[n_buffers].length = buf.length;buffers[n_buffers].start = v4l2_mmap(NULL, buf.length,PROT_READ | PROT_WRITE, MAP_SHARED,fd, buf.m.offset);}// queue buffer// buffer保存在内核,只需要告知index即可完成queuefor (i = 0; i < n_buffers; ++i) {CLEAR(buf);buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;buf.index = i;xioctl(fd, VIDIOC_QBUF, &buf);}// stream ontype = V4L2_BUF_TYPE_VIDEO_CAPTURE;xioctl(fd, VIDIOC_STREAMON, &type);// dequeue buffer + queue bufferfor (i = 0; i < 20; i++) {// 使用select或poll或epoll监控fd是否可读,如果可读则往下走CLEAR(buf);buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;buf.memory = V4L2_MEMORY_MMAP;xioctl(fd, VIDIOC_DQBUF, &buf);// 处理buffer,比如写到文件中xioctl(fd, VIDIOC_QBUF, &buf);}// stream offtype = V4L2_BUF_TYPE_VIDEO_CAPTURE;xioctl(fd, VIDIOC_STREAMOFF, &type);// munmapfor (i = 0; i < n_buffers; ++i)v4l2_munmap(buffers[i].start, buffers[i].length);// closev4l2_close(fd);
}
http://www.jsqmd.com/news/39653/

相关文章:

  • 2025 年终端数据安全软件公司推荐数篷科技(深圳)有限公司,数据安全领域的坚实力量
  • Day37(7)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-web-01
  • 网络协议工程 - eNSP及相关软件安装 - [eNSP, VirtualBox, WinPcap, Wireshark, Win7] - 教程
  • 20232314 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 20232314 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践
  • 题解:ABC232G Modulo Shortest Path
  • 如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)
  • 题解:P3791 普通数学题
  • 芒格变富的逻辑
  • 基于Ai元人文构想的关系图
  • Numerical results of ar-HTMDFP in AMS 2025
  • 题解:P10360 [PA 2024] Desant 3
  • 软件项目管理工具推荐|飞书项目 vs Asana vs ClickUp vs Jira
  • 11.13 模拟赛 T3
  • 再加个数学专题
  • 再加个数学专题
  • QF-Lib:用一个库搞定Python量化回测和策略开发
  • 动态路由协议
  • 软件工程学习日志2025.11.13
  • OpenCVSharp:ArUco 标记检测与透视变换
  • 2025-11-13 PQ v.Next日志记录
  • 2024年春招-美团-技术岗-第一批笔试
  • 完整教程:数值计算-线性方程组的迭代解法
  • vscode集成MCP Server
  • 2025.11.13
  • 一句话奶牛
  • 深入解析:三维旋转矩阵的左乘与右乘
  • HEVC视频扩展免费下载
  • 框架架构设计师备考第41天——软件可靠性建模、管理与设计​