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

ARM Linux V4L2 Camera 实验

使用 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.kler.cn/a/555826.html

相关文章:

  • 后台管理系统-月卡管理
  • 蓝桥杯 Java B 组之全排列与子集生成(掌握回溯模板)
  • Spring全面讲解(无比详细)
  • Https通信中证书验证流程
  • 前端三大件之一HTML
  • IntelliJ IDEA 控制台输出中文出现乱码
  • VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合
  • 1.13作业
  • 详解Nginx 配置
  • 关于ES中text类型时间字段范围查询的结构化解决方案
  • SprinBoot整合HTTP API:从零开始的实战指南
  • 以太网的PHY(物理层)详解
  • 适配器模式 Adapter Pattern
  • 如何设计提示词让AI以思维链方式回答问题
  • Linux:文件(二)
  • NSFNET是什么?NSFNET网络具有什么特点?
  • halcon三维点云数据处理(二十五)moments_object_model_3d
  • 【目标检测】【YOLOv4】YOLOv4:目标检测的最佳速度与精度
  • 嵌入式八股,struct结构体和union联合体的联系与区别
  • PWM(脉宽调制)技术详解:从基础到应用实践示例