System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及一种数字视频编码技术,具体涉及一种基于v4l2的视频编码器装置。
技术介绍
1、v4l2(video for linux 2)是linux内核中用于视频设备管理的驱动程序框架,为应用程序访问底层的视频设备提供了一套统一的接口。v4l2允许应用程序通过统一的接口访问和控制视频设备,使开发者能够编写出与硬件设备无关的视频处理应用程序,提高了代码的可移植性和可重用性,加速了视频处理软件的开发过程。
2、从硬件实现的角度来看,硬件视频编码器可以分为有状态编码器(statefulencoder)和无状态编码器(stateless encoder)。有状态硬件视频编码器一般由硬件加速器模块和微控制器模块组成。无状态硬件视频编码器一般不包含微控制器模块,而仅由硬件加速器模块组成。无状态硬件视频编码器的很多控制功能需要由运行在cpu上的控制软件来完成。
3、在基于linux内核的嵌入式设备上,当基于v4l2视频设备驱动程序框架来设计无状态硬件视频编码器时,一般将控制软件(视频流编码状态信息的维护、码率控制、参考帧管理、视频流打包等工作的部分或全部)实现为linux内核模块,这便带来如下缺点。
4、第一,应用程序通过v4l2视频设备驱动程序框架控制无状态硬件视频编码器时,需要预先定义大量的、依视频编码标准不同而不同的、与视频编码标准语法密切相关的v4l2控制原语,工作量较大。
5、第二,由于linux内核遵循gpl开源协议,这就要求所述控制软件(码率控制、参考帧管理等工作)也要遵循gpl开
6、第三,基于v4l2的无状态硬件视频编码器的控制软件的升级和调试与linux内核的升级和调试相绑定,不仅不方便,而且一旦出现问题很容易影响整个linux系统的稳定性。
技术实现思路
1、本申请所要解决的技术问题是:开发一种基于v4l2视频设备驱动程序框架的视频编码器装置,其中包括无状态硬件视频编码器,使之能够克服现有的控制软件升级和调试不便的缺点,同时能够保护厂商的核心算法和技术。
2、为解决上述技术问题,本申请提出了一种基于v4l2的视频编码器装置,包括编码状态维护模块、码率控制模块、参考帧管理模块、寄存器内容生成和解析模块、视频帧采集模块、视频流打包模块、v4l2视频设备驱动程序框架、硬件视频编码器模块。所述编码状态维护模块、码率控制模块、参考帧管理模块、寄存器内容生成和解析模块、视频帧采集模块、视频流打包模块是软件实现的功能模块,且位于linux用户空间。所述v4l2视频设备驱动程序框架是软件实现的功能模块,且位于linux内核空间。所述硬件视频编码器模块是硬件模块。所述编码状态维护模块用来依据用户的编码配置和当前视频流的编码状态生成编码工具配置信息,提供给寄存器内容生成和解析模块;还用来依据寄存器内容生成和解析模块提供的编码状态反馈信息更新视频编码状态,用于后续视频帧的编码。所述码率控制模块用来依据用户的码率控制要求生成码率控制信息,提供给寄存器内容生成和解析模块;还用来依据寄存器内容生成和解析模块提供的编码状态反馈信息更新码率控制算法的控制参数,用于后续视频帧的编码。所述参考帧管理模块用来依据用户设置的图像组参数生成参考帧配置信息,提供给寄存器内容生成和解析模块;还用来依据寄存器内容生成和解析模块提供的编码状态反馈信息更新参考帧管理算法的控制参数,用于后续视频帧的编码。所述寄存器内容生成和解析模块用来在视频帧编码之前,收集编码工具配置信息、码率控制信息、参考帧配置信息,并利用这些信息生成硬件视频编码器模块对应于每个待编码视频帧的控制寄存器组,提供给v4l2视频设备驱动程序框架;还用来在视频帧编码完成时,解析v4l2视频设备驱动程序框架提供的编码视频数据的状态寄存器组的内容并产生编码状态反馈信息,同时提供给编码状态维护模块、码率控制模块和参考帧管理模块。所述视频采集模块用来向v4l2视频设备驱动程序框架提供待编码视频帧。所述视频流打包模块用来对v4l2视频设备驱动程序框架提供的编码视频数据进行打包并产生对应的头信息,生成编码视频流。所述v4l2视频设备驱动程序框架用来将待编码视频帧和对应的控制寄存器组传送给硬件视频编码器模块,并在视频帧编码完成后从硬件视频编码器模块采集编码视频数据和对应的状态寄存器组分别提供给视频流打包模块和寄存器内容生成和解析模块。所述硬件视频编码器模块用来在每个待编码视频帧的控制寄存器组的控制下,对该待编码视频帧进行编码;在视频帧编码完成后,生成编码视频数据和对应的状态寄存器组提供给v4l2视频设备驱动程序框架。
3、进一步地,所述v4l2视频设备驱动程序框架是其他软件实现的功能模块访问硬件视频编码器模块的唯一接口。
4、进一步地,所述硬件视频编码器模块属于无状态硬件视频编码器。
5、进一步地,所述寄存器内容生成和解析模块与v4l2视频设备驱动程序框架之间通过共享命令缓存来传递每一个视频帧编码时用到的控制寄存器组信息、以及该视频帧编码完成时得到的编码视频数据对应的状态寄存器组信息;所述共享命令缓存是内存上的一块缓存区域,通过内存映射的方式使linux用户空间与linux内核空间都能对其进行访问。
6、进一步地,在每一个视频帧编码之前,寄存器内容生成和解析模块将该视频帧编码时用到的控制寄存器组信息写入到共享命令缓存,v4l2视频设备驱动程序框架读取共享命令缓存中的控制寄存器组信息,并传送给硬件视频编码器供其编码时使用。在一个视频帧编码完成后,v4l2视频设备驱动程序框架从硬件视频编码器中采集该视频帧编码完成时得到的编码视频数据对应的状态寄存器组信息,并写入到共享命令缓存,寄存器内容生成和解析模块读取并解析共享命令缓存中的状态寄存器组信息,产生该视频帧对应的编码状态反馈信息。
7、进一步地,所述v4l2视频设备驱动程序框架预先分配一个或多个v4l2_buffer结构体,用来对待编码视频帧进行软件封装;每一个v4l2_buffer结构体仅用来封装一个待编码视频帧;当待编码视频帧的数目超过v4l2_buffer结构体的数目时,将v4l2_buffer结构体循环回收使用,即已编码完成的视频帧所对应的v4l2_buffer结构体被回收,用于封装下一个待编码的视频帧并用于其编码过程。
8、进一步地,每一个v4l2_buffer结构体都与一个共享命令缓存一一对应,该共享命令缓存用于保存所对应的v4l2_buffer结构体中封装的待编码视频帧的控制寄存器组信息和状态寄存器组信息。
9、进一步地,一个共享命令缓存由共享命令缓存头部和共享命令缓存负载两部分组成;共享命令缓存头部的内容在共享命令缓存分配时生成;共享命令缓存负载的内容在每一个待编码视频帧编码前和编码后生成;共享命令缓存负载部分包括一个或多个子帧寄存器组信息。在待编码视频帧编码时,如果它没有预先划分本文档来自技高网...
【技术保护点】
1.一种基于V4L2的视频编码器装置,其特征是,包括编码状态维护模块、码率控制模块、参考帧管理模块、寄存器内容生成和解析模块、视频帧采集模块、视频流打包模块、V4L2视频设备驱动程序框架、硬件视频编码器模块;
2.根据权利要求1所述的基于V4L2的视频编码器装置,其特征是,所述V4L2视频设备驱动程序框架是其他软件实现的功能模块访问硬件视频编码器模块的唯一接口。
3.根据权利要求1所述的基于V4L2的视频编码器装置,其特征是,所述硬件视频编码器模块属于无状态硬件视频编码器。
4.根据权利要求1所述的基于V4L2的视频编码器装置,其特征是,所述寄存器内容生成和解析模块与V4L2视频设备驱动程序框架之间通过共享命令缓存来传递每一个视频帧编码时用到的控制寄存器组信息、以及该视频帧编码完成时得到的编码视频数据对应的状态寄存器组信息;所述共享命令缓存是内存上的一块缓存区域,通过内存映射的方式使Linux用户空间与Linux内核空间都能对其进行访问。
5.根据权利要求4所述的基于V4L2的视频编码器装置,其特征是,在每一个视频帧编码之前,寄存器
6.根据权利要求4所述的基于V4L2的视频编码器装置,其特征是,所述V4L2视频设备驱动程序框架预先分配一个或多个v4l2_buffer结构体,用来对待编码视频帧进行软件封装;每一个v4l2_buffer结构体仅用来封装一个待编码视频帧;当待编码视频帧的数目超过v4l2_buffer结构体的数目时,将v4l2_buffer结构体循环回收使用,即已编码完成的视频帧所对应的v4l2_buffer结构体被回收,用于封装下一个待编码的视频帧并用于其编码过程。
7.根据权利要求6所述的基于V4L2的视频编码器装置,其特征是,每一个v4l2_buffer结构体都与一个共享命令缓存一一对应,该共享命令缓存用于保存所对应的v4l2_buffer结构体中封装的待编码视频帧的控制寄存器组信息和状态寄存器组信息。
8.根据权利要求7所述的基于V4L2的视频编码器装置,其特征是,一个共享命令缓存由共享命令缓存头部和共享命令缓存负载两部分组成;共享命令缓存头部的内容在共享命令缓存分配时生成;共享命令缓存负载的内容在每一个待编码视频帧编码前和编码后生成;共享命令缓存负载部分包括一个或多个子帧寄存器组信息;
9.根据权利要求8所述的基于V4L2的视频编码器装置,其特征是,在视频帧编码过程中,如果某一个待编码视频帧所划分的子帧个数小于或等于封装该视频帧的v4l2_buffer结构体对应的共享命令缓存的子帧寄存器组的最大容量,则每一个子帧都会在共享命令缓存中对应一份子帧寄存器组信息,共享命令缓存中的子帧寄存器组实际容量等于待编码视频帧所划分的子帧个数;
10.一种基于V4L2的视频编码器装置的控制方法,其特征是,包括如下步骤;
...【技术特征摘要】
1.一种基于v4l2的视频编码器装置,其特征是,包括编码状态维护模块、码率控制模块、参考帧管理模块、寄存器内容生成和解析模块、视频帧采集模块、视频流打包模块、v4l2视频设备驱动程序框架、硬件视频编码器模块;
2.根据权利要求1所述的基于v4l2的视频编码器装置,其特征是,所述v4l2视频设备驱动程序框架是其他软件实现的功能模块访问硬件视频编码器模块的唯一接口。
3.根据权利要求1所述的基于v4l2的视频编码器装置,其特征是,所述硬件视频编码器模块属于无状态硬件视频编码器。
4.根据权利要求1所述的基于v4l2的视频编码器装置,其特征是,所述寄存器内容生成和解析模块与v4l2视频设备驱动程序框架之间通过共享命令缓存来传递每一个视频帧编码时用到的控制寄存器组信息、以及该视频帧编码完成时得到的编码视频数据对应的状态寄存器组信息;所述共享命令缓存是内存上的一块缓存区域,通过内存映射的方式使linux用户空间与linux内核空间都能对其进行访问。
5.根据权利要求4所述的基于v4l2的视频编码器装置,其特征是,在每一个视频帧编码之前,寄存器内容生成和解析模块将该视频帧编码时用到的控制寄存器组信息写入到共享命令缓存,v4l2视频设备驱动程序框架读取共享命令缓存中的控制寄存器组信息,并传送给硬件视频编码器供其编码时使用;
6.根据权利要求4所述的基于v4l2的视频编码器装置,其特征是,所述v4l2视频设备驱动程序框架预先分配一个或多个v4l2_buffer结...
【专利技术属性】
技术研发人员:刘鹏飞,温安君,
申请(专利权)人:翱捷科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。