一种Linux下视频处理方法技术

技术编号:13092352 阅读:98 留言:0更新日期:2016-03-30 19:47
本发明专利技术公开的一种Linux下视频处理方法,本发明专利技术通过对内核中的V4L2框架进行修改,在内核中帧缓冲区分配的物理内存为两帧图像大小,即为原来的两倍内存,从而使映射到用户空间的虚拟内存的存储空间也变为两倍图像大小,而一帧图只需一帧内存,在虚拟空间中便可以分出一个帧缓冲区和一个帧处理区的地址空间,在用户空间进行图形处理时,就只需要把帧缓冲区的帧数据拷贝到帧处理区的空间进行处理,而不需要再从帧处理区拷贝到帧缓冲区,从而减少了CPU的消耗,节省CPU的资源,提高了视频处理能力。

【技术实现步骤摘要】

本专利技术涉及视频处理方法,特别是。
技术介绍
参照图1所示,当前linux下整体视频处理方法主要包括视频采集、视频处理、视频显示三大步骤,视频采集和显示主要是在Linux内核中进行,使用物理内存地址,视频处理则在Linux应用层中进行,使用虚拟内存地址。V4L2是Linux环境下开发视频采集设备驱动程序的一套规范(API),目前在Linux下进行视频采集基本都是使用V4L2接口,其主要流程如下: 第一步,打开视频设备文件,进行视频采集的参数初始化; 第二步,申请若干视频采集的帧缓冲区,并将这些帧缓冲区以MMAP方式从内核空间映射到用户空间,便于应用程序读取/处理视频数据; 第二步,将申请到的帧缓冲区在视频米集输入队列排队,并启动视频米集; 第四步,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据; 第五,停止视频米集。采用现有的视频处理方法,在视频采集流程的第二步申请帧缓冲区的时候,一般申请3-5个缓冲区,每个缓冲区的大小为要采集的帧大小,该缓冲区是在内核中申请的,是物理地址,通过内存映射方法(_ap)将申请到的内核空间帧缓冲区的地址映射到用户空间地址(虚拟地址),这样就可以在应用层的用户地址空间直接处理帧缓冲区的数据(包括增删、查改),但是由于V4L2框架中的分配的物理内存只有一帧图像大小,因此映射后应用层所能使用的也就只能是一帧图像大小的内存,应用层要想处理图像数据,必须另外开辟一份内存(即帧处理区),并把数据拷贝到新内存中,处理完后再拷贝回去,假设每帧图像的大小为500kb,所以在视频采集中开辟的帧缓冲区也为500kb,经过mmap映射到用户地址空间的大小也为500kb,但是这两者是同步的,更新其中的任何一方内容,另一方也会跟着更改,为了对帧进行处理,必须开辟一个新的缓冲区内存,即帧处理内存,把帧缓冲区地址中的内容拷贝到帧处理内存中(拷贝1)进行处理后,再将帧处理区中的内容拷贝回帧缓冲区地址(拷贝2),这里就有了两次拷贝,假设视频处理中每秒25帧,同时接4个摄像头,每秒钟就有了2*25*4=200次的拷贝,拷贝次数太多,大大增加了CPU的消耗,在嵌入式系统有限的CPU资源中,由于CPU处理能力不够,导致视频来不及处理,使得视频的整体处理性能下降。有鉴于此,本专利技术人提出一种Linux下能够降低帧处理中的CPU消耗和提高视频处理性能的方法。
技术实现思路
本专利技术的目的在于提供了,其能够降低帧处理中的CPU消耗,提高视频处理性能。为实现上述目的,本专利技术采用的技术方案为: ,其特征在于,包括以下步骤: 51.打开视频设备文件,进行视频采集的参数初始化; 52.在内核空间的物理内存中申请若干视频采集的帧缓冲区,内核空间的每个帧缓冲区分配两帧图像大小的内存,然后将这些帧缓冲区以MMAP方式从内核空间映射到用户空间; 53.在用户空间的虚拟内存中申请帧缓冲区,该用户空间的帧缓冲区同样为两帧图像大小的内存,工作时将该用户空间帧缓冲区的剩余一帧图像大小的内存作为帧处理区; 54.将申请到的内核空间的帧缓冲区在视频采集的输入队列排队,并启动视频采集; 55.驱动开始视频数据的采集,应用程序从视频采集输出队列取出内核空间帧缓冲区的地址,将该帧缓冲区的地址映射到用户空间的虚拟地址中进行视频数据处理,处理完后,将该帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据; 视频采集的输入队列和输出队列是由Linux内核管理的一个循环队列,与输入队列排队的帧缓冲区可从输出队列取出。S6.应用程序将步骤S5中取出的帧缓冲地址发送至显示驱动进行视频显示。所述步骤S2中,内核空间的每个帧缓冲区的内存为lOOOkb。本专利技术的有益效果是: 本专利技术通过对内核中的V4L2框架进行修改,在内核中帧缓冲区分配的物理内存为两帧图像大小,即为原来的两倍内存,从而使映射到用户空间的虚拟内存的存储空间也变为两倍图像大小,而一帧图只需一帧内存,在虚拟空间中便可以分出一个帧缓冲区和一个帧处理区的地址空间,在用户空间进行图形处理时,就只需要把帧缓冲区的帧数据拷贝到帧处理区的空间进行处理,而不需要再从帧处理区拷贝到帧缓冲区,从而减少了CPU的消耗,节省CPU的资源,提高了视频处理能力。【附图说明】此处所说明的附图用来提供对本专利技术的进一步理解,构成本专利技术的一部分,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中: 图1为本现有的流程简图; 图2为本专利技术的流程简图。【具体实施方式】为了使本专利技术所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图及实施例对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。如图2示,本专利技术揭示的,其包括以下步骤: 51.打开视频设备文件,进行视频采集的参数初始化; 52.在内核空间的物理内存中申请若干视频采集的帧缓冲区,内核空间的每个帧缓冲区分配两帧图像大小的内存,然后将这些帧缓冲区以MMAP方式从内核空间映射到用户空间; 53.在用户空间的虚拟内存中申请帧缓冲区,该用户空间的帧缓冲区同样为两帧图像大小的内存,工作时将该用户空间帧缓冲区的剩余一帧图像大小的内存作为帧处理区; 54.将申请到的内核空间的帧缓冲区在视频采集的输入队列排队,并启动视频采集; 55.驱动开始视频数据的采集,应用程序从视频采集输出队列取出内核空间帧缓冲区的地址,将该帧缓冲区的地址映射到用户空间的虚拟地址中进行视频数据处理,处理完后,将该帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据; 56.应用程序将步骤S5中取出的帧缓冲地址发送至显示驱动进行视频显示。本实施例中,假定每帧图像均为500kb大小,则内核空间的每个帧缓冲区的内存为1 OOOkb,而用户空间虚拟内存中的帧缓冲区和帧处理区内存为500kb,由于每帧图像的实际大小还是原来的500kb,因此在视频采集的时候,其有效的帧只会占用内核空间帧缓冲区的前500kb大小,还剩下另外的500kb,这里把这剩下的500kb的空间作为帧处理内存来使用,同样针对用户空间中的虚拟地址空间也是只占用前500kb的空间(及用户空间帧缓冲区),剩余500kb的空闲的空间(及用户空间帧处理区),也是作为帧处理使用。本专利技术通过对内核中的V4L2框架进行修改,在内核空间中帧缓冲区分配的物理内存为两帧图像大小,即为原来的两倍内存,从而使映射到用户空间的虚拟内存的存储空间也变为两倍图像大小,而一帧图只需一帧内存,在虚拟空间中便可以分出一个帧缓冲区和一个帧处理区的地址空间,在用户空间进行图形处理时,就只需要把帧缓冲区的帧数据拷贝到帧处理区的空间进行处理,而不需要再从帧处理区拷贝到帧缓冲区,从而减少了CPU的消耗,节省CPU的资源,提高了视频处理能力。上述说明示出并描述了本专利技术的优选实施例,应当理解本专利技术并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文专利技术构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进本文档来自技高网
...

【技术保护点】
一种Linux下视频处理方法,其特征在于,包括以下步骤:S1. 打开视频设备文件,进行视频采集的参数初始化;S2.在内核空间的物理内存中申请若干视频采集的帧缓冲区,内核空间的每个帧缓冲区分配两帧图像大小的内存,然后将这些帧缓冲区以MMAP方式从内核空间映射到用户空间;S3.在用户空间的虚拟内存中申请帧缓冲区,该用户空间的帧缓冲区同样为两帧图像大小的内存,工作时将该用户空间帧缓冲区的剩余一帧图像大小的内存作为帧处理区;S4. 将申请到的内核空间的帧缓冲区在视频采集的输入队列排队,并启动视频采集;S5. 驱动开始视频数据的采集,应用程序从视频采集输出队列取出内核空间帧缓冲区的地址,将该帧缓冲区的地址映射到用户空间的虚拟地址中进行视频数据处理,处理完后,将该帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;S6.应用程序将步骤S5中取出的帧缓冲地址发送至显示驱动进行视频显示。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈华云任赋陈从华林晓龙郑福弟
申请(专利权)人:厦门雅迅网络股份有限公司
类型:发明
国别省市:福建;35

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1