基于嵌入式Linux的视频采集编码系统实现三

2012-09-18 16:50:33来源: 互联网 关键字:嵌入式  Linux  视频采集  编码系统

3. 设置窗口的高度和宽度

  编码器输入的是 CIF 格式的YUV420 码流,故将采集窗口的高度设置为 288,宽度为352。

  4. 获取视频帧

  使用mmap()(内存映射) 方式截取视频,mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。[5]

  主要部分介绍如下:

  a. 初始化及设置

  使用ioctl(camera_fd,VIDIOCGMBUF,&camera_mbuf) 函数初始video_mbuf,获得摄像头存储缓冲区的帧信息,之后修改 video_mmap和帧状态的设置。

  b. 实现摄像头设备文件到内存区的映射

  调用buf=void *mmap(void *addr,size_t len,int prot,int flags,int fd,off_t offset) 函数,将设备文件的内容映射到内存区。

  c. 数据采集

  调用ioctl(fd,VIDIOCMCAPTURE,&camera_buf)截取图像,失败将返回-1 ,若函数成功调用,便开始一帧图像数据的截取,并将当前帧号按缓冲区总帧数的模加上1,为下一帧截取作准备。然后调用 ioctl(fd,VIDIOCSYNC,&frame) 函数,成功返回则表示图像截取已完成,可以开始作下一帧图像的采集。图像捕捉函数 v41_frame_grab()是mmap内存映射方式捕捉视频数据的具体实现,每次采集一帧YUV420P格式的原始图像数据。在使用双缓冲区轮换采集时,对于每个缓冲区进行连续帧采集,通过外加循环控制对摄像头帧缓冲区采集的次数来实现,以达到提高效率的目的[6]。

  在此基础上也可实现连续帧的采集,Video4Linux最多支持一次采集32帧,首先需要设置采集的帧数 camera_buf.frame,并将data+camera_mbuf.offsets[frame] 定义每一帧数据在内存中的起始位置,利用 ioctl(fd,VIDIOCGMBUF,&camera_mbuf) 便可获得camera_mbuf 的信息。除此之外还要设置数据缓冲区的大小,然后利用 ioctl VIDIOCMCAPTURE 操作进行数据的连续采集,直到缓冲区中的剩余空间无法保存一个完整的数据帧。当缓冲区中没有可利用的空间时,系统调用 ioctl VIDIOCSYNC 来检查视频采集过程是否完成。若完成时,应用程序为数据帧分配地址,使缓冲区的数据帧可被安全用于其他进程。

  4. 关闭视频设备

  在采集完成后,需要关闭设备,并收回系统资源。如果是采用内存映射方法进行视频采集,在系统任务完成后必须用munmap 函数关闭映射内存,close函数可关闭视频设备文件。

  5 视频采集系统的多线程设计

  在采集和处理模块的设计中创建图像采集和图像处理两个线程,并开辟两个缓冲区轮换采集图像帧,以便解决视频采集模块与编码模块的同步。在采集程序写满缓冲区1 后,改变线程等待条件,释放被阻塞的图像处理线程对该缓冲区数据进行编码输出。同时采集线程转到缓冲区2,若此时图像处理线程已完成对缓冲区 2 的处理,则将采集获得的帧图像覆盖,保存至缓冲区 2,否则阻塞。两个缓冲轮流使用,不丢弃任何帧,并且图像采集与处理同步进行,提高了效率。

  6 结论

  本文给出了远程监控系统中视频采集技术的分析和研究并得到实验结果。S3C2440 处理器USB Host控制器兼容USB1.1标准,支持低速 1.5Mbps 和全速12Mbps USB 设备。实验表明,视频采集程序对 CIF\QVGA 格式的图像采集效率最高,采集速率分别达到 9fps ,12fps以上,接近全速模式下的极限速率。对 QCIF格式的图像采集效率较低,距离 USB1.1全速传输的理论值相差较远,这既与摄像头的硬件特性有关(包括图像传感器的特性以及 DSP 桥接芯片对图像格式的处理) ,也与驱动程序的实现有关。不过单从采集帧速率上看,9fps 的CIF 采集速度和24fps的QCIF采集速度己经可以满足一般嵌入式实时应用的要求。

关键字:嵌入式  Linux  视频采集  编码系统

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2012/0918/article_16834.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于嵌入式Linux的视频采集编码系统实现二
下一篇:了解4K超高清晰度电视二

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
嵌入式
Linux
视频采集
编码系统

小广播

独家专题更多

TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved