ARM Linux V4L2 Camera 实验

news/2025/2/22 13:20:24

使用 ov2640

V4L2 是 Video for linux two 的简称,是 Linux 内核中视频类设备的一套驱动框架,为视频类设备驱动 开发和应用层提供了一套统一的接口规范

使用 V4L2 设备驱动框架注册的设备会在 Linux 系统/dev/目录下生成对应的设备节点文件,设备节点的 名称通常为 videoX

一、主程序

int main(int argc, char *argv[])
{
    if (2 != argc) {
        fprintf(stderr, "Usage: %s <video_dev>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    /* 初始化LCD */
    if (fb_dev_init())
        exit(EXIT_FAILURE);

    /* 初始化摄像头 */
    if (v4l2_dev_init(argv[1]))
        exit(EXIT_FAILURE);

    /* 枚举所有格式并打印摄像头支持的分辨率及帧率 */
    v4l2_enum_formats();
    v4l2_print_formats();

    /* 设置格式 */
    if (v4l2_set_format())
        exit(EXIT_FAILURE);

    /* 初始化帧缓冲:申请、内存映射、入队 */
    if (v4l2_init_buffer())
        exit(EXIT_FAILURE);

    /* 开启视频采集 */
    if (v4l2_stream_on())
        exit(EXIT_FAILURE);

    /* 读取数据:出队 */
    v4l2_read_data();       //在函数内循环采集数据、将其显示到LCD屏

    exit(EXIT_SUCCESS);
}

二、函数编写

2. 初始化摄像头

3. 枚举所有格式

4.  打印摄像头支持的分辨率及帧率

5. 设置格式和流参数 

6. 初始化帧缓冲

 

7.  开启视频采集

ioctl(int fd, VIDIOC_STREAMON, int *type); //开启视频采集 
ioctl(int fd, VIDIOC_STREAMOFF, int *type); //停止视频采集 
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

8. 读取数据

出队

ioctl(int fd, VIDIOC_DQBUF, struct v4l2_buffer *buf); 
// 数据处理完之后、再入队、往复
ioctl(v4l2_fd, VIDIOC_QBUF, &buf);

 

9. 结束视频采集

enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 
 
if (0 > ioctl(fd, VIDIOC_STREAMOFF, &type)) { 
 perror("ioctl error"); 
 return -1; 
} 

三、测试

交叉编译上述代码,通过 nfs 挂载到 指定目录下。

加载 ov2640 驱动后,运行程序并指定设备:

 


http://www.niftyadmin.cn/n/5862319.html

相关文章

vxe-table实现动态列

vxe-table实现动态列 1.动态列解释2.解决步骤2.1将后端返回的动态列表头&#xff0c;按照格式拼接在固定列表头上2.2将后端返回的列表数据按照键值对格式组装 1.动态列解释 正常列表是有固定的列&#xff1b;我的需求是&#xff0c;最初只知道表格的固定两列&#xff0c;查询数…

Arcmap和ArcgisPro重装及配置迁移

近期要重装一下ArcgisPro&#xff0c;在此记录并作为大家的借鉴 1.备份配置文件&#xff1a;其中Desktop10.8为Arcmap的配置文件 2.通过控制面板卸载&#xff0c;arcpro卸载时间较长&#xff0c;先将语言包等卸载&#xff0c;最后再卸载5G主程序&#xff0c;有些文章会介绍清理…

【Linux专栏】rsync 同步文件时自动创建目录

Linux && Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 rsync 同步文件夹,之前的文章中也写过了(详见:【Linux专栏】find命令+同步 实验-CSDN博客 ),可以同步指定文件夹、或者筛选指定时间范围的文件夹,然后将符合条件的文件夹全部同步…

【Python爬虫(31)】解锁Python多线程编程:从入门到实战

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

路由基本配置

学习目标 • 根据拓扑图进行网络布线。 • 清除启动配置并将路由器重新加载为默认状态。 • 在路由器上执行基本配置任务。 • 配置并激活以太网接口。 • 测试并检验配置。 • 思考网络实施方案并整理成文档。 任务 1&#xff1a;网络布线 使用适当的电缆类型连接网络设备。…

发现问题 python3.6.13+django3.2.5 只能以asgi启动server 如何解决当前问题

在 Python 3.6.13 和 Django 3.2.5 的组合下&#xff0c;如果你发现只能使用 ASGI 启动 Django 服务&#xff0c;而不能使用 WSGI&#xff0c;可能的原因有几个。我们来分析一下常见的问题和解决方案。 1. 默认 ASGI 支持 从 Django 3.0 开始&#xff0c;Django 引入了对 ASG…

矩阵-旋转图像

旋转图像 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。输入&#xff1a;二维数组 输出&#xff1a;void 思路&#xff1a;tempM…

【Postgresql】Linux 部署 Postgresql 数据库 (图文教程)

文章目录 安装编译工具安装 readline 开发库安装 zlib 开发库创建postgres用户创建postgres用户,并添加到postgres用户组解压压缩包创建一个安装目录,随便起名就行,位置也随意即可,我这里创建到刚解压完的路径下,起的名为postgresql一定要进入到解压后的文件目录下,上图路…