v4l2用户侧使用流程

news/2025/11/13 20:43:01/文章来源:https://www.cnblogs.com/moon-sun-blog/p/19219509

前言

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.mzph.cn/news/964694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年终端数据安全软件公司推荐数篷科技(深圳)有限公司,数据安全领域的坚实力量

在数字化浪潮席卷全球的当下,数据已然成为企业的核心资产,其安全防护至关重要。随着 AI、云计算等新兴技术的广泛应用,数据安全面临着前所未有的挑战,如数据泄露、非法访问等风险日益加剧。在此背景下,一款可靠的…

Day37(7)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-web-01

HTTP状态码大全 https://cloud.tencent.com/developer/chapter/13553package com.itheima;import jakarta.servlet.http.HttpServletResponse; import org.springframework.http.ResponseEntity; import org.springfra…

网络协议工程 - eNSP及相关软件安装 - [eNSP, VirtualBox, WinPcap, Wireshark, Win7] - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20232314 2025-2026-1 《网络与系统攻防技术》实验五实验报告

一、实验内容从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取信息。 尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并查询获取该好友所在的具体地理位置。 使用nmap开源软件对靶机环境…

深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践

深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

题解:ABC232G Modulo Shortest Path

由于 \(\forall i,a_i < m,b_i < m\),所以可能的边权要么是 \(a_i+b_j\),要么是 \(a_i+b_j-m\),下文简称其为一类边和二类边。 暴力建图太浪费了,发现与一个 \(a_i\) 的连边是二类边的 \(b_j\) 的值单调不减…

如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)

如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)​手把手教你如何通过 .dmg 安装包安装 MySQL 8.0.20 数据库。一、下载安装包(如果你还没下) 安装包下载:https://pan.quark.cn/s/459eb1a02c4…

题解:P3791 普通数学题

考虑做类似数位 dp 的东西。 首先把 \(n,m\) 各加一,限制转换为 \(i<n,j<m\)。 套路地枚举 \(i,j\) 和 \(n,m\) 二进制下第一个不同的位置,则更低位就可以任取了。不难发现这个时候 \(i \operatorname{xor} j …

芒格变富的逻辑

芒格变富的逻辑 金钱:金钱只是数字,资产才有价值。能带来现金流的东西。 如何变的富有: 别去羡慕蠢人,人要靠自己自律、耐心、量入为出、长期复利(缓慢寻找有价值的团队合作,以合理的价格买好公司(慢慢寻找好资…

基于Ai元人文构想的关系图

基于Ai元人文构想的关系图 基于岐金兰的Ai元人文构想,我们绘制了一个更全面、更深入的「AI元人文构想与价值工程生态系统」关系图,它展示了从基础资源到文明愿景的完整架构。 flowchart TDsubgraph A [基础资源层]A1…

题解:P10360 [PA 2024] Desant 3

很妙的一道题。 首先我们肯定有一个 $O\left ( 2^n\operatorname{poly}\left ( n,m \right ) \right ) $ 的做法,但这无法通过 \(n \leq 35\)。 考虑把状态用 \(0,1,?\) 来表示,其中 \(?\) 表示这个士兵状态仍未决…

软件项目管理工具推荐|飞书项目 vs Asana vs ClickUp vs Jira

文章将深入分析四款主流项目管理工具在需求管理、缺陷追踪、测试管理、产品协作等软件研发的关键场景中的差异与优势,帮助研发团队评估哪款工具更契合自身工作模式。 无论你是敏捷开发团队、产品经理,还是工程管理者…

题解:AT_abc232_g [ABC232G] Modulo Shortest Path

由于 \(\forall i,a_i < m,b_i < m\),所以可能的边权要么是 \(a_i+b_j\),要么是 \(a_i+b_j-m\),下文简称其为一类边和二类边。 暴力建图太浪费了,发现与一个 \(a_i\) 的连边是二类边的 \(b_j\) 的值单调不减…

dify插件开发

自定义模型供应商 当我们想使用的模型在dify官方平台上没有对应的供应商时,我们只能自己集成。 比如公司内部的delphai部署了一些开源模型,我们想集成到dify上,这时需要以插件的形式安装到dify上。(旧版本开发自定义…

其他游戏攻略

自动化游戏 异星工厂:从零开始的零基础异星工厂2.0新手流程攻略。 异形工厂2 戴森球计划 城市建设游戏 都市地平线《citis skylines》《都市天际线》零基础到玩转游戏教程 模拟经营 星露谷物语 魂游 只狼:影逝二度:…

11.13 模拟赛 T3

题意:给出一个 \(n\) 个点标准的(分界点为 \(\lfloor \frac{l+r}2 \rfloor\))的线段树。定义一个区间的权值为,将这个区间正常地摊开在线段树上访问的结点数。例如,\(n=5,[2, 3]\) 的权值就是 \(5\)。\(q\) 组询问…

再加个数学专题

先是矩快吧 题先是两道模拟赛的矩阵快速幂优化dp 先开个坑等补 目前写法最好的:点击查看代码 #include<bits/stdc++.h> #define int long long using namespace std; const int N=2005,M=105,inf=1e18,mod=1092…

QF-Lib:用一个库搞定Python量化回测和策略开发

搞过量化交易的人都清楚,测试策略的时候流程能有多乱:Pandas 管数据、Matplotlib 画图、Backtrader 跑回测,最后还要再用 Excel 做汇总。本来想简单验证个想法,结果工具链越搞越复杂,最后自己都不知道在干什么了。…

软件工程学习日志2025.11.13

一、项目核心框架:从基础到深化的实施顺序 项目实施遵循“先搭底座、再建核心、逐步扩展”的逻辑,整体分为九大模块,各模块间层层递进、相互支撑:基础架构与模型:系统的“地基” 先完成环境搭建与CI/CD部署,搭建…