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

V4L2总结(3)代码示例

//V4L2使用示例程序 //来源网络 //时间2013.08.27 #include stdio.h #include stdlib.h #include string.h #include assert.h #include getopt.h #include fcntl.h #include unistd.h #include errno.h #include malloc.h #include sys/stat.h #include sys/types.h #include sys/time.h #include sys/mman.h #include sys/ioctl.h #include asm/types.h #include linux/videodev2.h #define CLEAR(x) memset ((x), 0, sizeof (x)) struct buffer { void * start; size_t length; }; static char * dev_name /dev/video0;//摄像头设备名 static int fd -1; struct buffer * buffers NULL; static unsigned int n_buffers 0; FILE *file_fd; static unsigned long file_length; static unsigned char *file_name; ////////////////////////////////////////////////////// //获取一帧数据 ////////////////////////////////////////////////////// static int read_frame (void) { struct v4l2_buffer buf; unsigned int i; CLEAR (buf); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; int ff ioctl (fd, VIDIOC_DQBUF, buf); if(ff0) printf(failture\n); //出列采集的帧缓冲 assert (buf.index n_buffers); printf (buf.index dq is %d,\n,buf.index); fwrite(buffers[buf.index].start, buffers[buf.index].length, 1, file_fd); //将其写入文件中 ffioctl (fd, VIDIOC_QBUF, buf); //再将其入列 if(ff0) {printf(failture VIDIOC_QBUF\n);} return 1; } int main (int argc,char ** argv) { struct v4l2_capability cap; //摄像头设备属性 struct v4l2_format fmt; //视频捕获帧格式 struct v4l2_fmtdesc fmt1; unsigned int i; enum v4l2_buf_type type; int ret; file_fd fopen(test-mmap.jpg, w); //打开图片 fd open (dev_name, O_RDWR /* required */ | O_NONBLOCK, 0);//打开视频设备 int ff ioctl (fd, VIDIOC_QUERYCAP, cap); //获取摄像头参数 if(ff0) printf(failture VIDIOC_QUERYCAP\n); memset(fmt1, 0, sizeof(fmt1)); fmt1.index 0; fmt1.type V4L2_BUF_TYPE_VIDEO_CAPTURE; while ((ret ioctl(fd, VIDIOC_ENUM_FMT, fmt1)) 0) //获取当前支持的格式 { fmt1.index; printf({ pixelformat %c%c%c%c, description %s }\n, fmt1.pixelformat 0xFF, (fmt1.pixelformat 8) 0xFF, (fmt1.pixelformat 16) 0xFF, (fmt1.pixelformat 24) 0xFF, fmt1.description); } CLEAR (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_JPEG; //V4L2_PIX_FMT_YUYV;//V4L2_PIX_FMT_YVU420;//V4L2_PIX_FMT_YUYV; fmt.fmt.pix.field V4L2_FIELD_INTERLACED; ff ioctl (fd, VIDIOC_S_FMT, fmt); //设置图像格式 if(ff0) printf(failture VIDIOC_S_FMT\n); file_length fmt.fmt.pix.bytesperline * fmt.fmt.pix.height; //计算图片大小 struct v4l2_requestbuffers req; CLEAR (req); req.count 1; req.type V4L2_BUF_TYPE_VIDEO_CAPTURE; req.memory V4L2_MEMORY_MMAP; ioctl (fd, VIDIOC_REQBUFS, req); //申请缓冲count是申请的数量 if(ff0) printf(failture VIDIOC_REQBUFS\n); if (req.count 1) printf(Insufficient buffer memory\n); buffers calloc (req.count, sizeof (*buffers));//内存中建立对应空间 for (n_buffers 0; n_buffers req.count; n_buffers) { struct v4l2_buffer buf; //驱动中的一帧 CLEAR (buf); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; buf.index n_buffers; if (-1 ioctl (fd, VIDIOC_QUERYBUF, buf)) //映射用户空间 printf (VIDIOC_QUERYBUF error\n); buffers[n_buffers].length buf.length; buffers[n_buffers].start mmap (NULL /* start anywhere */, //通过mmap建立映射关系 buf.length, PROT_READ | PROT_WRITE /* required */, MAP_SHARED /* recommended */, fd, buf.m.offset); if (MAP_FAILED buffers[n_buffers].start) printf (mmap failed\n); } for (i 0; i n_buffers; i) { struct v4l2_buffer buf; CLEAR (buf); buf.type V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory V4L2_MEMORY_MMAP; buf.index i; if (-1 ioctl (fd, VIDIOC_QBUF, buf))//申请到的缓冲进入列队 printf (VIDIOC_QBUF failed\n); } type V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 ioctl (fd, VIDIOC_STREAMON, type)) //开始捕捉图像数据 printf (VIDIOC_STREAMON failed\n); for (;;) //这一段涉及到异步IO { fd_set fds; struct timeval tv; int r; FD_ZERO (fds);//将指定的文件描述符集清空 FD_SET (fd, fds);//在文件描述符集合中增加一个新的文件描述符 /* Timeout. */ tv.tv_sec 2; tv.tv_usec 0; r select (fd 1, fds, NULL, NULL, tv);//判断是否可读即摄像头是否准备好tv是定时 if (-1 r) { if (EINTR errno) continue; printf (select err\n); } if (0 r) { fprintf (stderr, select timeout\n); exit (EXIT_FAILURE); } if (read_frame ())//如果可读执行read_frame ()函数并跳出循环 break; } unmap: for (i 0; i n_buffers; i) if (-1 munmap (buffers[i].start, buffers[i].length)) printf (munmap error); type V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 ioctl(fd, VIDIOC_STREAMOFF, type)) printf(VIDIOC_STREAMOFF); close (fd); fclose (file_fd); exit (EXIT_SUCCESS); return 0; }

相关文章:

V4L2总结(3)代码示例

//V4L2使用示例程序 //来源&#xff1a;网络 //时间&#xff1a;2013.08.27#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>#include <getopt.h> #include <fcntl.h> #include &l…...

V4L2总结(1)- 编程使用总结

V4L2 编程使用总结说明&#xff1a; V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。 流程&#xff1a; 内存映射方式打开设备文件。 int fdopen(”/dev/video0″,O_RDWR);取得设备的capability&#xff0c;看看设备具有什么功能&#xff0c…...

.NET Core后端调用Qwen3-ASR-0.6B API实现会议语音转写系统

.NET Core后端调用Qwen3-ASR-0.6B API实现会议语音转写系统 1. 引言 想象一下&#xff0c;每次开完会&#xff0c;你是不是都得花上半小时甚至更久&#xff0c;去整理那些零零散散的会议记录&#xff1f;特别是那种多人参与的讨论会&#xff0c;谁说了什么&#xff0c;观点是…...

OpenClaw飞书机器人进阶:Qwen3-VL:30B多模态技能开发指南

OpenClaw飞书机器人进阶&#xff1a;Qwen3-VL:30B多模态技能开发指南 1. 为什么需要多模态飞书机器人&#xff1f; 去年冬天&#xff0c;我负责团队的知识库整理工作时&#xff0c;每天要处理上百张会议白板照片和截图。手动转录这些内容不仅耗时&#xff0c;还经常遗漏关键信…...

纯文本微调骗了我们多久?信息论视角揭开图大模型的对齐伪像与破局之道

在当前将大语言模型引入图学习领域的浪潮中&#xff0c;图符号化大语言模型 是目前的主流范式。它们的标准做法是将复杂的图结构和节点文本属性编码成一个图标记序列&#xff0c;将其作为前缀输入基座大模型&#xff0c;最后利用基于文本的节点分类等指令进行自回归微调。然而&…...

终极SQL实战训练:如何通过谋杀谜案游戏高效掌握数据库查询技能

终极SQL实战训练&#xff1a;如何通过谋杀谜案游戏高效掌握数据库查询技能 【免费下载链接】sql-mysteries Inspired by veltmans command-line mystery, use SQL to research clues and find out whodunit! 项目地址: https://gitcode.com/gh_mirrors/sq/sql-mysteries …...

从零开始掌握Camera Shakify:为Blender动画注入真实感的终极指南

从零开始掌握Camera Shakify&#xff1a;为Blender动画注入真实感的终极指南 【免费下载链接】camera_shakify 项目地址: https://gitcode.com/gh_mirrors/ca/camera_shakify 在数字动画创作中&#xff0c;过于完美的稳定镜头往往会显得不自然。Camera Shakify作为一款…...

Go在Window平台下编译出来的exe如何添加一个图标--推荐使用

2026年编译打包方式补充&#xff1a;1.打包成windows下带有图标的文件办法&#xff1a;打包命令&#xff1a; 1.关键参数&#xff1a;-H windowsgui 隐藏 cmd 窗口&#xff08;GUI 程序&#xff09;&#xff0c;-w -s 减小 exe 体积。 如果你是发布程序&#xff0c;不想让别人看…...

家庭老照片修复神器:GPEN镜像批量处理教程,一次搞定整本相册

家庭老照片修复神器&#xff1a;GPEN镜像批量处理教程&#xff0c;一次搞定整本相册 1. 老照片修复的痛点与解决方案 每个家庭都珍藏着一些泛黄的老照片&#xff0c;它们承载着珍贵的回忆。但随着时间的推移&#xff0c;这些照片往往会出现模糊、划痕、褪色等问题。传统的手工…...

从零开始:如何为你的降压型DC-DC变换器选择合适的反馈控制模式?

降压型DC-DC变换器反馈控制模式深度解析与选型指南 在电源设计领域&#xff0c;选择合适的反馈控制模式往往决定着整个系统的性能上限。想象一下这样的场景&#xff1a;当你精心设计的电源模块在实验室测试时表现完美&#xff0c;却在量产阶段频繁出现输出电压振荡&#xff1b;…...

(11-1)感知-运动耦合与行为理解:视觉与步态的耦合机制

本章内容围绕“感知—运动”耦合与行为理解展开&#xff0c;系统讲解了人形机器人如何将视觉、触觉等多模态感知信息转化为稳定、灵活的运动与操作行为。首先介绍了视觉与步态的耦合机制&#xff0c;重点分析了落脚点选择、动态障碍物规避以及步态参数的自适应调整方法。随后讲…...

文章目录汇总

文章目录1. 编程语言1.1 C 语言1.2 Capl 编程1.3 Python 编程2. 工具使用手册2.1 编辑器2.1.1 Vscode02.1.2 PyCharm2.1.3 Notepad2.2 版本管控2.2.1 Git2.2.2 Svn2.2.3 Source tree2.3 软件开发2.3.1 ISOLAR2.3.2 EB2.3.3 PLS UDE2.3.4 Beyond Compare2.4 软件调试2.4.1 CANoe…...

Bypass Paywalls Clean完全配置与优化指南

Bypass Paywalls Clean完全配置与优化指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 问题定位 诊断安装故障 当开源工具无法正常安装时&#xff0c;首先需要系统排查潜在问题。…...

Qwen3-ASR-1.7B部署案例:高校实验室语音数据标注平台本地化改造

Qwen3-ASR-1.7B部署案例&#xff1a;高校实验室语音数据标注平台本地化改造 1. 项目背景与需求 高校语音研究实验室经常面临一个实际问题&#xff1a;大量语音数据需要标注处理&#xff0c;但使用云端语音识别服务存在隐私泄露风险&#xff0c;且网络依赖导致处理效率低下。传…...

Kiro使用最佳教程

Kiro使用最佳教程&#xff1a;从入门到精通&#xff0c;高效AI编程全攻略Kiro是亚马逊云科技推出的新一代AI驱动型集成开发环境&#xff08;IDE&#xff09;&#xff0c;同时配套CLI命令行工具&#xff0c;主打规范驱动开发&#xff08;Spec-Driven Development&#xff09;&am…...

如何快速掌握IOD库:C++14元编程的终极工具指南

如何快速掌握IOD库&#xff1a;C14元编程的终极工具指南 【免费下载链接】iod Meta programming utilities for C14. Merged in matt-42/lithium 项目地址: https://gitcode.com/gh_mirrors/io/iod IOD库是一个专为C14设计的元编程实用工具集&#xff0c;它提供了丰富的…...

毕设计算机科学与技术:新手入门实战指南与避坑清单

最近在帮学弟学妹们看毕业设计&#xff0c;发现很多同学在起步阶段就卡住了。选题天马行空、技术栈眼花缭乱、代码写成一团乱麻……这些都是新手必经的“痛苦面具”。今天&#xff0c;我就结合自己的经验和踩过的坑&#xff0c;梳理一份从零到一的毕设实战指南&#xff0c;希望…...

Python自动化测试AI生成踩坑全记录:12个真实生产事故+对应防御性代码模板,第9个99%人中招

第一章&#xff1a;Python自动化测试AI生成代码的底层原理与风险本质Python自动化测试中AI生成代码的核心机制&#xff0c;依赖于大语言模型对海量开源测试脚本、框架文档&#xff08;如pytest、unittest、Selenium API&#xff09;及缺陷修复模式的学习。模型通过概率化token预…...

APatch故障诊疗指南:从现象到本质的问题解决框架

APatch故障诊疗指南&#xff1a;从现象到本质的问题解决框架 【免费下载链接】APatch Patching, hooking, and rooting the Android using only a stripped kernel image. 项目地址: https://gitcode.com/gh_mirrors/ap/APatch APatch作为一款结合Magisk便捷安装与Kerne…...

从靶场到实战:深度剖析Subrion CMS 4.2.1文件上传漏洞(CVE-2018-19422)的利用与防御

1. Subrion CMS文件上传漏洞初探 Subrion CMS是一款基于PHP的开源内容管理系统&#xff0c;广泛应用于企业网站建设。2018年曝光的CVE-2018-19422漏洞影响Subrion CMS 4.2.1版本&#xff0c;攻击者可以利用该漏洞绕过文件上传限制&#xff0c;在服务器上执行任意代码。这个漏洞…...

如何快速下载B站视频?BilibiliDown跨平台下载工具完整指南

如何快速下载B站视频&#xff1f;BilibiliDown跨平台下载工具完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirro…...

Design Compiler:各种版本的简介(DC Expert、DC Ultra、Design Compiler Graphical与Design Compiler NXT)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 Synopsys的Design Compiler系列是业界领先的RTL综合解决方案&#xff0c;包括四个主要产品&#xff1a;DC Expert、DC Ultra、Design Compiler Graphical和De…...

搭建一个stun server

文章目录开始搭建1、下载吧STUNTURN &#xff08;Traversal Using Relays around NAT&#xff09;部署TURN1、安装turnservermediasouplibevent2、 生成密钥文件2、修改配置文件 tunserver.conf3、确认内网和外网ip地址4、需要开放的端口5、启动命令6、 验证是否搭建成功我装的…...

G-Helper智能优化指南:华硕笔记本性能释放与卡顿解决全方案

G-Helper智能优化指南&#xff1a;华硕笔记本性能释放与卡顿解决全方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项…...

手把手教你用Edge浏览器组件下载亚马逊视频(附避坑指南)

深度解析&#xff1a;如何安全高效获取亚马逊视频素材的技术方案 在内容创作领域&#xff0c;优质视频素材的重要性不言而喻。亚马逊平台作为全球最大的电商平台之一&#xff0c;其商品介绍视频、红人测评等内容往往具有极高的参考价值。然而&#xff0c;许多创作者在尝试获取这…...

D4RL完整指南:离线强化学习开源基准平台的终极使用教程

D4RL完整指南&#xff1a;离线强化学习开源基准平台的终极使用教程 【免费下载链接】D4RL 项目地址: https://gitcode.com/gh_mirrors/d4r/D4RL D4RL&#xff08;Deep Data-Driven Reinforcement Learning Datasets&#xff09;是一个为离线强化学习研究量身打造的开源…...

告别live-player:uniapp+webView+flv实现跨平台直播流播放的另类方案

突破平台限制&#xff1a;UniAppWebViewFLV直播流播放实战指南 当UniApp官方提供的live-player组件在某些平台无法使用时&#xff0c;开发者常常陷入困境。本文将介绍一种基于WebView和FLV技术的替代方案&#xff0c;帮助开发者在微信小程序等受限环境中实现流畅的直播流播放功…...

LiuJuan20260223Zimage保姆级教程:从拉取镜像到生成图片,手把手教学

LiuJuan20260223Zimage保姆级教程&#xff1a;从拉取镜像到生成图片&#xff0c;手把手教学 1. 准备工作与环境搭建 1.1 系统要求与前置条件 在开始之前&#xff0c;请确保你的系统满足以下基本要求&#xff1a; 操作系统&#xff1a;Linux/Windows/macOS&#xff08;推荐使…...

OOCSS组件文档自动生成终极指南:如何用Handlebars模板快速构建完整文档系统

OOCSS组件文档自动生成终极指南&#xff1a;如何用Handlebars模板快速构建完整文档系统 【免费下载链接】oocss Object Oriented CSS Framework 项目地址: https://gitcode.com/gh_mirrors/oo/oocss OOCSS&#xff08;面向对象的CSS&#xff09;框架提供了一套强大的组件…...

Flux Sea Studio 极简主义效果:生成具有禅意与留白的海景摄影作品

Flux Sea Studio 极简主义效果&#xff1a;生成具有禅意与留白的海景摄影作品 最近在玩一个挺有意思的AI图像生成工具&#xff0c;叫Flux Sea Studio。它专门用来生成各种风格的海景图。我尝试用它来创作一些极简主义的作品&#xff0c;结果让我有点意外。不是那种细节爆炸的复…...