(1)、初始化:a.初始化摄像头;b.注册事件到epoll

(2)、开始采集--->触发事件处理系统

(3)、保存图像(方便测试)

a.初始化摄像头 //初始化摄像头

1、获取驱动信息

2、设置图像格式

3、申请图像缓冲区

4、映射到用户空间

5、图像缓冲入队列

  1. //初始化摄像头
  2. struct v4l2_dev* v4l2_init()
  3. {
  4. //1、初始化摄像头
  5. v = calloc(, sizeof(struct v4l2_dev));
  6. v->fd = open("/dev/video3", O_RDWR | O_NONBLOCK, ); //打开摄像头设备文件
  7. //1.1 获取驱动信息
  8. ioctl(v->fd, VIDIOC_QUERYCAP, &cap);
  9. //1.2 设置图像格式
  10. ioctl(v->fd, VIDIOC_S_FMT, &fmt);
  11. //1.3 申请图像缓冲区
  12. v->buf = calloc(req.count, sizeof(struct buf));
  13. //1.4 把内核空间中的图像缓冲区映射到用户空间
  14. ioctl(v->fd, VIDIOC_QUERYBUF, &buf);
  15. //1.5 图像缓冲入队
  16. ioctl(v->fd, VIDIOC_QBUF, &buf);
  17.  
  18. //2、注册事件到epoll
  19. v->ev = epoll_event_create(v->fd, EPOLLIN, cam_handler, v);//创建epoll附加结构
  20. epoll_add_event(srv_main->epfd, v->ev);//添加事件到epoll
  21. } 
  1. //事件处理函数
  2. void cam_handler(int fd, void* arg)
  3. {
  4. struct v4l2_buffer buf;
  5. struct v4l2_dev* v = arg;
  6. int file_fd;
  7.  
  8. file_fd = open("test.jpg", O_RDWR | O_CREAT, );
  9.  
  10. /*帧出列*/
  11. buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; //V4L2_BUF_TYPE_VIDEO_CAPTURE:1
  12. buf.memory = V4L2_MEMORY_MMAP;
  13. ioctl(v->fd, VIDIOC_DQBUF, &buf);
  14.  
  15. write(file_fd, v->buf[buf.index].start, v->buf[buf.index].len);
  16. close(file_fd);
  17.  
  18. /*buf入列*/
  19. ioctl(v->fd, VIDIOC_QBUF, &buf);
  20. }
  21. void v4l2_start_capture(struct v4l2_dev* v)
  22. {
  23. enum v4l2_buf_type type;
  24. type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  25. ioctl(v->fd, VIDIOC_STREAMON, &type);
  26. }
  27.  
  28. struct cam* cam_sys_init()
  29. {
  30. struct cam* cam = calloc(, sizeof(struct cam));
  31. //1、初始化
  32. cam->v4_dev = v4l2_init();
  33.  
  34. //2、开始采集
  35. v4l2_start_capture(cam->v4_dev);
  36.  
  37. }

基于视频压缩的实时监控系统-sprint2采集端图像采集子系统设计的更多相关文章

  1. 基于视频压缩的实时监控系统-sprint3采集端传输子系统设计

    由于jpg本来就是编码压缩后的格式,所有无需重复编码 传输子系统步骤:(1)初始化:a.socket(初始化tcp连接):b.将事件添加到epoll中 (2)事件处理:接收到网络包.发送完网络包 st ...

  2. \阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint2-采集端图像采集子系统设计

    1.在编写程序前有一个流程,思维导图: 初始化:包括初始化摄像头:注册事件到epoll 然后是开始启动采集:一旦开始采集我们的摄像头就会有数据了,它会触发事件处理函数:我们在这里的处理是保存这个图像: ...

  3. 项目-基于视频压缩的实时监控系统--tiny6410

    项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...

  4. 基于视频压缩的实时监控系统-sprint1基于epoll架构的采集端程序设计

    part1:产品功能 part2:epoll机制   select与epoll区别 1.select与epoll没有太大的区别.除了select有文件描述符限制(1024个),select每次调用都需 ...

  5. 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第2课-基于Epoll的采集端程序框架设计

    回顾之前的整个程序架构 把epoll机制应用到这个架构上去 下面主要去分析我们的系统中有没有需要等待的事件,先看看采集子系统 在采集子系统当中,摄像头有数据,摄像头采集到图像数据可以作为一个等待事件. ...

  6. 嵌入式应用开发第四阶段-基于rk3399的视频监控系统

    一.需求分析 伴随着嵌入式技术.图像处理技术和无线网络传输技术的发展,传统模拟视频监控系统和基于PC的远程视频监控系统由于自身的不足,已经无法满足现代社会应用中不断涌现出来的新需求,于是基于嵌入式技术 ...

  7. 转: 透过CAT,来看分布式实时监控系统的设计与实现

    评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...

  8. 透过CAT,来看分布式实时监控系统的设计与实现

    2011年底,我加入大众点评网,出于很偶然的机会,决定开发CAT,为各个业务线打造分布式实时监控系统,CAT的核心概念源自eBay闭源系统CAL----eBay的几大法宝之一. 在当今互联网时代,业务 ...

  9. [经验交流] 试用基于 influxdb+kapacitor 的监控系统

    2017年10月16日: 使用中发现kapacitor的ui过于简单,不能满足实际工作需要,现已切换到grafana --------- 两个月前试用了基于 elasticsearch + xpack ...

随机推荐

  1. React中setState 什么时候是同步的,什么时候是异步的?

    class Example extends React.Component { constructor() { super(); this.state = { val: 0 }; } componen ...

  2. Ubuntu systemctl 查看管理系统启动项

    Ubuntu systemctl 查看系统启动项 列出所有启动项: sudo systemctl list-unit-files 会列出开启的和未开启的: 使用grep过滤一下开启的grep enab ...

  3. ValueError: X needs to contain only non-negative integers.

    for feature in short_cate_feature: enc.fit(data[feature].values.reshape(-1, 1)) base_train_csr = spa ...

  4. 学习Java8系列-Lambda

    Lambda演进 小王在公司正在开发一个学生管理系统,产品经理向他提出一个需求,要筛选出年龄大于15的学生,于是小王写出了以下代码:     public static List<Student ...

  5. ajax根据坐标查询WMS地图服务属性信息

    <html lang="en"> <head> <meta charset="UTF-8"> <meta name=& ...

  6. Ethical Hacking - NETWORK PENETRATION TESTING(15)

    ARP Poisoning - arpspoof Arpspoof is a tool part of a suit called dsniff, which contains a number of ...

  7. Web Scraping using Python Scrapy_BS4 - using Scrapy and Python(1)

    Create a new Scrapy project first. scrapy startproject projectName . Open this project in Visual Stu ...

  8. mybatis generator 的日常使用

    一.mybatis-generator的基本配置与使用 使用mybatis-generator来生成常用的dao层类与xml,可以满足基础的增删改查功能 1. 添加pom依赖,常用的几个依赖包 < ...

  9. git push到远程新分支

    获取远程代码并在本地切换到一个新分支修改后,想要 push 到远端与原来不同的新分支,可以使用下面的命令实现: git push origin 本地分支:远端希望创建的分支 上面的本地分支 是基于拉取 ...

  10. Windows10系统,截图黑屏,怎么办?

    问题:Windows10系统,截图黑屏,怎么办? 图片描述: 原因:也许有  媒体播放软件和系统(或者正在使用的截图软件)起了冲突. 我就开了个这个软件,就完蛋了. 导致了  系统自带的  这两个截图 ...