首页 / 专利库 / 多媒体工具与应用 / 视频编码 / 视频编解码方法、GPU及其与CPU的交互方法及系统

视频编解码方法、GPU及其与CPU的交互方法及系统

阅读:478发布:2024-01-20

专利汇可以提供视频编解码方法、GPU及其与CPU的交互方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种GPU与CPU的交互方法,包括:读取CPU中的原始数据;根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据;将在GPU中完成计算后的并行数据转换为串行数据;将所述串行数据传输到CPU上。本发明实施例还公开了一种GPU与CPU的交互系统、一种GPU和一种视频编解码方法。通过将CPU上的计算负荷放在GPU上进行,利用GPU的并行计算,提高了 帧 内视频编解码的速度,减少了在对广播级高清视频数据进行编解码时对CPU资源的占用,进而可以释放出CPU的资源以供系统中其他计算和操作,避免了系统性能的降低。,下面是视频编解码方法、GPU及其与CPU的交互方法及系统专利的具体信息内容。

1.一种图形处理单元GPU与中央处理单元CPU的交互方法,应用于视频编解码过程,其特征在于,包括:
通过系统总线将CPU中的原始二维图像数据传输到GPU的内存中,GPU通过其自身的并行计算应用程序编程接口API读取所述CPU中的原始二维图像数据,所述原始二维图像数据在逻辑上连续、在物理空间上不连续;
根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的所述原始二维图像数据排列为在逻辑上和物理空间上均连续的数据;
在GPU上对所述在逻辑上和物理空间上均连续的数据进行编码或解码的计算过程;
将在GPU中完成计算后的并行数据转换为串行数据;
将所述串行数据传输到CPU上。
2.一种GPU与CPU的交互系统,应用于视频编解码过程,其特征在于,包括:
CPU,其中存储有原始二维图像数据,所述原始二维图像数据在逻辑上连续,在物理空间上不连续;
GPU,用于处理需并行计算的数据,并存储数据处理过程中的结果数据;
代码翻译单元,用于将在CPU上串行执行的程序代码转换为在GPU上并行执行的程序代码;
存储单元,用于存储预先设置的在GPU上并行执行的程序代码;
数据排列单元,用于将存储在CPU中的在逻辑上连续、物理空间上不连续的原始二维图像数据排列为在逻辑上和物理空间上均连续的数据;
数据转换单元,用于将计算得到的并行数据转换为串行数据;
传输单元,用于GPU与CPU间的数据传输。
3.一种视频编码方法,应用于内视频编码过程,其特征在于,采用如权利要求1所述的GPU与CPU的交互方法,包括:
将原始二维图像数据传输到GPU上,对图像分后的原始数据进行预处理,所述预处理包括根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据;
按照GPU的层次结构,在GPU上对预处理后的原始数据进行并行的DCT变换,所述并行的DCT变换为并行的对图像的每个分块同时进行DCT变换;
将经DCT变换后的数据,在GPU上进行并行的Zig-Zag变换;
根据用户指定的目标码率,计算出每帧图像对应的量化级别;
根据所述量化级别,在GPU上对Zig-Zag变换后的各分块像素进行量化;
将量化后的数据经过数据转换后传输到CPU上,并在CPU上对量化后的数据进行熵编码,得到压缩码流;
其中,所述DCT变换过程包括:
选择与每帧图像所分行数和列数相等数量的线程Thread;
采用一个Thread对应一行像素数据的方式进行横向并行DCT变换;
将所述横向计算的结果进行同步后,采用一个Thread对应一列像素数据的方式进行纵向并行DCT变换,得到每帧图像的频率域数据。
4.根据权利要求3所述的方法,其特征在于,所述Zig-Zag变换过程包括:
选择与每帧图像所分像素数相等数量的Thread;
采用一个Thread对应一个像素数据的方式进行并行的Zig-Zag变换。
5.根据权利要求4所述的方法,其特征在于,所述计算量化级别的过程包括:
在GPU上,选择与量化级别数相等数量的Thread;
采用一个Thread对应一个量化级别的方式对每帧图像进行并行量化,得到指示每帧图像在相应量化级别下进行量化后所消耗的存储空间大小的数据;
将所述数据转换为串行数据后,传输至CPU;
CPU对所述串行数据进行插值计算,得到符合目标码率要求的量化级别表,所述量化级别表中指示了每帧图像对应的量化级别。
6.根据权利要求5所述的方法,其特征在于,所述量化过程包括:
选择与每帧图像所分像素数相等数量的Thread;
采用一个Thread对应一个像素数据的方式进行并行的量化。
7.一种视频解码方法,与权利要求3所述的视频编码方法相对应,应用于帧内视频解码过程,其特征在于,包括:
在CPU上,对输入的压缩码流进行熵解码,得到每帧图像分块后的量化数据和量化级别;
将所述量化数据和量化级别传输到GPU上,根据熵解码得到的每个分块的量化级别,对所述量化数据进行并行的反量化;
在GPU上,对所述反量化后的数据进行并行的逆Zig-Zag变换;
在GPU上,对所述逆Zig-Zag变换后的数据进行逆DCT变换,得到空间域的图像数据;
其中,所述逆DCT变换过程包括:
选择与每帧图像所分行数和列数相等数量的线程Thread;
采用一个Thread对应一行像素数据的方式进行横向并行逆DCT变换;
将所述横向计算的结果进行同步后,采用一个Thread对应一列像素数据的方式进行纵向并行逆DCT变换,得到每帧图像的空间域的图像数据。

说明书全文

视频编解码方法、GPU及其与CPU的交互方法及系统

技术领域

[0001] 本发明涉及广播电视领域,更具体地说,涉及一种视频编解码方法、GPU及其与CPU的交互方法及系统。

背景技术

[0002] 近几年广播电视行业及个人用户对高清视频的应用需求逐渐增大,但由于高清视频数据量非常庞大,且对视频数据的编解码的算法也很复杂,因此导致在现有的主流平台上进行编解码时,很容易耗尽系统的运算资源,而且运算过程非常耗时,效率低下,很难满足实时性的要求,由于现阶段CPU的发展受架构、工艺等方面的限制,无法在低成本的条件下获得大幅度的性能提升,如果要搭建能够胜任这种复杂运算的平台就需要付出很高的成本。
[0003] 为了解决上述问题,现有技术提供了两种解决方式,一是MainConcept公司研制的可以支持多种编码规范和标准的商用编解码器包,二是OptiBase公司的MovieMaker系列及VideoPlex系列的硬件编解码卡,可以支持MPEG-2、MPEG-4等高清标清格式。这两种方式虽然在一定程度上解决了上述问题,但+又不可避免的存在一些缺陷,第一种商用编解码器包是基于CPU的传统的编解码器,也具有CPU的缺点,在对广播级高清视频数据进行编解码时,占用太多的CPU资源,容易使软件中的其他功能响应缓慢;第二种硬件编解码卡需要使用专业的硬件板卡,存在以下缺点:
[0004] 1)成本高,由于专业级的板卡的研发费用很高导致购买此类产品的成本也很高;
[0005] 2)应用灵活性差,由于多余的硬件板卡需要占用PC机箱内一个或多个板卡插槽,需要较大体积的机箱以及较多插槽的主板,在某些应用环境下不够灵活;
[0006] 3)产品的级别档次不够细化,导致用户选择的自由度较低,由于视频相关的领域应用范围相差很大,从高端的专业广播级到低端的普通个人用户之间有很多级别,同一公司的板卡产品往往无法对应许多中间用户的需求;
[0007] 4)扩展性差,在需支持新增的编解码标准时,需要用户升级新的板卡,并需重新部署新版本的软件系统,导致对编解码标准的扩展困难。

发明内容

[0008] 有鉴于此,本发明实施例提供一种视频编解码方法、GPU及其与CPU的交互方法及系统,以实现提高内视频编解码的速度,避免系统性能降低的目的。
[0009] 为实现上述目的,本发明提供了如下技术方案:
[0010] 本发明实施例公开了一种GPU与CPU的交互方法,应用于视频编解码过程,包括:
[0011] 通过系统总线将CPU中的原始二维图像数据传输到GPU的内存中,GPU通过其自身的并行计算应用程序编程接口API读取所述CPU中的原始二维图像数据,所述原始二维图像数据在逻辑上连续、在物理空间上不连续;
[0012] 根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的所述原始二维图像数据排列为在逻辑上和物理空间上均连续的数据;
[0013] 在GPU上对所述在逻辑上和物理空间上均连续的数据进行编码或解码的计算过程;
[0014] 将在GPU中完成计算后的并行数据转换为串行数据;
[0015] 将所述串行数据传输到CPU上。
[0016] 本发明实施例还公开了一种GPU与CPU的交互系统,应用于视频编解码过程,包括:
[0017] CPU,其中存储有原始二维图像数据,所述原始二维图像数据在逻辑上连续,在物理空间上不连续;
[0018] GPU,用于处理需并行计算的数据,并存储数据处理过程中的结果数据;
[0019] 代码翻译单元,用于将在CPU上串行执行的程序代码转换为在GPU上并行执行的程序代码;
[0020] 存储单元,用于存储预先设置的在GPU上并行执行的程序代码;
[0021] 数据排列单元,用于将存储在CPU中的在逻辑上连续、物理空间上不连续的原始二维图像数据排列为在逻辑上和物理空间上均连续的数据;
[0022] 数据转换单元,用于将计算得到的并行数据转换为串行数据;
[0023] 传输单元,用于GPU与CPU间的数据传输。
[0024] 本发明实施例还公开了一种视频编码方法,应用于帧内视频编码过程,采用上述的GPU与CPU的交互方法,包括:
[0025] 将原始二维图像数据传输到GPU上,对图像分后的原始数据进行预处理,所述预处理包括根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据;
[0026] 按照GPU的层次结构,在GPU上对预处理后的原始数据进行并行的DCT变换,所述并行的DCT变换为并行的对图像的每个分块同时进行DCT变换;
[0027] 将经DCT变换后的数据,在GPU上进行并行的Zig-Zag变换;
[0028] 根据用户指定的目标码率,计算出每帧图像对应的量化级别;
[0029] 根据所述量化级别,在GPU上对Zig-Zag变换后的各分块像素进行量化;
[0030] 将量化后的数据经过数据转换后传输到CPU上,并在CPU上对量化后的数据进行熵编码,得到压缩码流;
[0031] 其中,所述DCT变换过程包括:
[0032] 选择与每帧图像所分行数和列数相等数量的线程Thread;
[0033] 采用一个Thread对应一行像素数据的方式进行横向并行DCT变换;
[0034] 将所述横向计算的结果进行同步后,采用一个Thread对应一列像素数据的方式进行纵向并行DCT变换,得到每帧图像的频率域数据。
[0035] 本发明实施例还公开了一种视频解码方法,与上述视频编码方法相对应,应用于帧内视频解码过程,包括:
[0036] 在CPU上,对输入的压缩码流进行熵解码,得到每帧图像分块后的量化数据和量化级别;
[0037] 将所述量化数据和量化级别传输到GPU上,根据熵解码得到的每个分块的量化级别,对所述量化数据进行并行的反量化;
[0038] 在GPU上,对所述反量化后的数据进行并行的逆Zig-Zag变换;
[0039] 在GPU上,对所述逆Zig-Zag变换后的数据进行逆DCT变换,得到空间域的图像数据;
[0040] 其中,所述逆DCT变换过程包括:
[0041] 选择与每帧图像所分行数和列数相等数量的线程Thread;
[0042] 采用一个Thread对应一行像素数据的方式进行横向并行逆DCT变换;
[0043] 将所述横向计算的结果进行同步后,采用一个Thread对应一列像素数据的方式进行纵向并行逆DCT变换,得到每帧图像的空间域的图像数据。
[0044] 从上述的技术方案可以看出,本发明实施例通过预先将在CPU上串行执行的程序代码翻译为在GPU上并行执行的程序代码,使得可以利用所述在GPU上并行执行的程序代码,将适合在CPU上处理的数据组织形式转换为适合这GPU上处理的数据组织形式,即将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据,进而完成在GPU上进行并行计算的初始数据的准备工作,之后将能够进行并行计算的视频编解码方法中的计算负荷放在GPU上进行,利用GPU的并行计算,提高了帧内视频编解码的速度,由于GPU分担了CPU的运算负荷,减轻了CPU的负担,减少了在对广播级高清视频数据进行编解码时对CPU资源的占用,进而可以释放出CPU的资源以供系统中其他计算和操作,避免了系统性能的降低。
[0045] 针对现有的硬件编解码卡,本发明实施例公开得的视频编解码方法,对GPU的硬件配置要求不高,价格较高清的硬件编解码卡低很多,大大降低了成本;本发明实施例需要的显卡本身,是大多数电脑系统中所必须的,因此不需要多余的插槽,灵活性提高了,而且也不存在产品级别档次不够细化的问题,档次越高的显卡,运行本发明实施例的技术时,速度就越快,使得系统可以根据应用的需求或用户的要求,搭载不同档次的GPU硬件;本发明实施例的运行程序并非如定制板卡一样固化在板卡的芯片内部,而是在系统运行时装载到GPU上执行,因此在需支持新增的编解码标准时,只需升级软件即可,不需要更换板卡即可加入新功能或消除程序中已有的缺陷,提高了产品的灵活性和扩展性。附图说明
[0046] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0047] 图1为API与GPU的架构层次示意图;
[0048] 图2为GPU的物理层次示意图;
[0049] 图3为GPU的逻辑层次示意图;
[0050] 图4为本发明实施例一公开的一种GPU与CPU的交互方法流程图
[0051] 图5为本发明实施例二公开的一种GPU与CPU的交互系统的结构图;
[0052] 图6为本发明实施例四公开的一种视频编码方法流程图;
[0053] 图7为本发明实施例四公开的一种视频解码方法流程图;
[0054] 图8为本发明实施例五公开的一种视频编码方法流程图。

具体实施方式

[0055] 下面对本发明实施例中的英文简称进行简单介绍:
[0056] DCT变换:Discrete Cosine Transform,离散余弦变换,主要用来将图像从空间域变换到频率域,产生的频率域数据提供给编码过程中后续的步骤进行处理;
[0057] Zig-Zag变换:将2维的N*N数据从左上往右下角的方向按“之”字形行走,排列成一条1维的数据列;
[0058] MPEG-2:由国际标准化组织ISO和国际电工委员会IEC的下属机构Moving Picture Experts Group(MPEG)订立并推广的视频、音频的编码解码算法标准,是目前电视广播、DVD出版、网络媒体等专业领域应用最广泛的标准;
[0059] MPEG-4:相对MPEG-2在同样的压缩质量下大大提高了压缩率,但编码及解码的算法更高的复杂度提高了对系统性能的要求;
[0060] API:Application Programming Interface,应用程序编程接口,是一些预先定义的接口函数,用于为开发人员编写的程序提供对第三方软件或硬件功能进行访问和操作的能,而且开发人员无需了解第三方软件或硬件的代码和实现细节;
[0061] Direct3D:微软公司提供的一组基于Windows操作系统的API,可以用来访问GPU硬件,利用GPU硬件的能力对3D物体和场景进行渲染等操作;
[0062] OpenGL:一套开放的跨平台的3D渲染系统,本发明实施例中指OpenGL的API接口,这种API接口与Direct3D有很大差别,但两者能够实现的功能是完全等价的,OpenGL的开发者和Direct3D的开发者实际上是利用两组不同的API访问相同的GPU硬件功能;
[0063] CUDA:显卡芯片厂商NVida推出的一套GPU并行计算API,利用这套API开发人员可以访问NVidia的GPU硬件来进行并行计算;
[0064] OpenCL:由Apple公司发起,由Khronos Group制订的一套API,旨在可以订立一个跨平台、跨GPU硬件的并行计算环境,完成的功能与CUDA等价;
[0065] DirectCompute:微软公司在Direct3D 10/11中加入的并行计算API,跨GPU硬件但不跨平台,能够完成的功能与CUDA和OpenCL等价;
[0066] Thread:线程,广义的线程是指计算机程序在运行时承载并发任务的基本单位,在本发明实施例中特指GPU架构中的Thread;
[0067] Block:分块,在本方案中特指GPU架构中的Block,每个Block由许多Thread构成;
[0068] Grid:网格,在本方案中特指GPU架构中的Grid,每个Grid由许多Block构成。
[0069] 本发明实施例公开了一种视频编解码方法、GPU及其与CPU的交互方法及系统,通过将视频编解码算法的部分负荷放到GPU上执行,从而释放出CPU的资源以供系统中其他软件使用,既提高了编解码的速度,又避免了系统性能的降低。
[0070] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0071] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0072] 下面先对GPU进行简单的介绍:
[0073] 目前GPU的并行计算API主要包括CUDA、OpenCL、DirectCompute三种,这三种API的功能是等价的,可以相互替代,它们与GPU的架构层次如图1所示,并行计算应用程序通过上述三种API访问GPU,进而在GPU上进行并行计算,3D的图形程序和游戏程序等则通过Direct3D和OpenGL等API接口访问GPU,利用GPU硬件的能力对3D物体和场景进行渲染等操作。
[0074] GPU在物理上的层次结构如图2所示,计算机系统内设置有多颗GPU,每颗GPU上设置有若干个多核处理器,一般情况下,一颗GPU通常由4-30颗多多核处理器组成,每个多核处理器上通常设置有8个流处理器,同时GPU上有大量的全局内存供存放流处理器处理之后的数据,以及一些高速寄存器和局部高速缓存供流处理器进行高速数据处理时使用。
[0075] GPU在逻辑上的层次结构如图3所示,为了在并行计算时方便数据的处理,系统在利用GPU做并行计算时在逻辑上分为三层结构:Grid、Block以及Thread,每层结构都可以是1维、2维或3维,一方面可以方便的映射到需要处理的数据域中,另一方面可以在运算时由线程调度器来映射到真实的硬件上进行执行。GPU的逻辑上的层次与物理上的层次结构的对应关系是,GPU内部的每个流处理器对应一个可调度的Thread,每个多核处理器对应一个Block,每颗GPU对应一个Grid,因此芯片内可有上百个线程同时运行。
[0076] 实施例一
[0077] 本发明实施例公开的一种图形处理单元GPU与中央处理单元CPU的交互方法的流程图如图4所示,包括以下步骤:
[0078] 步骤S101:读取CPU中的原始数据,该过程可通过GPU的并行计算API,使GPU能够读取CPU中的原始图像数据;
[0079] 需要说明的是,本实施例中采用的GPU的并行计算API可以在CUDA、OpenCL和DirectCompute中任意选择,选用不同的API,只需将程序代码的语法形式进行相应的变动即可,对API的选择不能限度本发明实施例的保护范围。
[0080] 步骤S102:根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据,进而完成初始数据的准备工作;
[0081] 其中,上述数据排列的过程,目的是将原算法中适合CPU处理的数据组织形式转换为适合GPU处理的数据组织形式,所述预先设置的在GPU上并行执行的程序代码的过程,是将原算法中在CPU上串行执行的程序代码翻译为在GPU上并行执行的程序代码,通过数据排列和代码翻译之后,使得二者配合起来,可以将在CPU中进行的串行计算转移到GPU上进行并行计算,并能在GPU上正确运行,进而提高计算速度。
[0082] 另外,本实施例中预先设置的在GPU上并行执行的程序代码,可以存储在GPU中,也可以存储在CPU中,或者其他存储介质中,只要在使用时能够随时调用即可。
[0083] 步骤S103:将在GPU中完成计算后的并行数据转换为串行数据,使得在GPU上并行运算得到数据经串行转换后能够在CPU上进行串行计算;
[0084] 步骤S104:将所述串行数据传输到CPU上,以完成GPU与CPU的数据交互过程。
[0085] 本实施例通过预先将在CPU上串行执行的程序代码翻译为在GPU上并行执行的程序代码,使得可以利用所述在GPU上并行执行的程序代码,将适合在CPU上处理的数据组织形式转换为适合这GPU上处理的数据组织形式,即将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据,进而完成在GPU上进行并行计算的初始数据的准备工作,之后将能够进行并行计算的计算负荷放在GPU上进行,利用GPU的并行计算,提高了系统的计算速度,由于GPU分担了CPU的运算负荷,减轻了CPU的负担,释放出了CPU的资源,使其能够进行其他工作。
[0086] 实施例二
[0087] 本实施例公开了一种GPU与CPU的交互系统,该系统的结构如图5所示,包括以下功能单元:
[0088] CPU12;
[0089] GPU17,用于处理需并行计算的数据,并存储数据处理过程中的结果数据;
[0090] 代码翻译单元16,用于将在CPU上串行执行的程序代码转换为在GPU上并行执行的程序代码;
[0091] 存储单元13,用于存储预先设置的在GPU上并行执行的程序代码;
[0092] 数据排列单元11,用于将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据,即完成数据组织形式的转换;
[0093] 与GPU相连的数据转换单元14,用于将在GPU中计算得到的并行数据转换为串行数据,以便于在CPU中进行串行计算;
[0094] 传输单元15,用于GPU与CPU间的数据传输,这里可以为GPU的并行计算API。
[0095] 与实施例一相对应,本实施例中由传输单元读取CPU中的数据后,利用存储单元中的程序代码,可使数据排列单元完成数据组织形式转换后的数据在GPU上进行并行计算,之后将计算结束后的并行数据由数据转换单元转换为串行数据后,发送给CPU,即实现了GPU与CPU的数据交互。
[0096] 需要说明的是,本实施例中的代码翻译单元、存储单元、数据排列单元和数据转换单元中的任一项和任意组合,可以位于GPU中,也可以位于其它存储介质中,只要能够实现本实施例所述的功能即可。
[0097] 实施例三
[0098] 本实施例公开了一种GPU,包括以下功能单元:
[0099] 数据处理单元,用于处理需并行计算的数据;
[0100] GPU显存,用于存储数据处理过程中的结果数据;
[0101] 传输单元,用于与CPU间的数据传输。
[0102] 另外,本实施例中的GPU还包括上一实施例中的代码翻译单元、存储单元、数据排列单元和数据转换单元中的一种或任意组合。
[0103] 本实施例中的GPU通过传输单元可以实现与CPU的数据交互,并能够完成对数据排列单元进行数据组织形式转换后的数据的并行计算,以及能够将并行计算结果进行串行转换后发送给CPU处理。
[0104] 实施例四
[0105] 本实施例公开了一种视频编解码方法,用于对帧内视频的编解码,下面先对视频编解码过程中的一些主要过程进行简单的介绍。
[0106] 在对原始视频数据进行存储、传输之前通常会对其应用一些数学算法将视频数据进行变换和压缩,并储存为一种特殊的格式,以便之后应用时,可以方便的还原出视频数据,这整个过程称为视频编码。
[0107] 视频解码是视频编码的逆过程,也就是分析编码后的数据,并应用解压缩及反变换等过程还原出原始视频数据的过程。
[0108] 视频数据压缩原理的主要依据是,同一帧图像内部相邻空间具有很大的相关性,即冗余性,在大部分图像上的表现就是有大片颜色相近的区域;另外邻近帧的图像空间内的像素间也具有较大的冗余性,视频压缩的原理即是利用数学算法去除或减小这种冗余。压缩帧内部冗余的算法称为帧内编码,压缩帧间冗余的算法称为帧间编码。
[0109] 其中,数据压缩分为有损压缩无损压缩,有损压缩是将数据进行压缩后,信息有一定程度的丢失,但在恢复后不影响数据使用的压缩算法,如量化过程;无损压缩是将数据进行压缩后,信息没有损失,还能恢复到跟原始数据完全一样的压缩算法,如熵编码过程。
[0110] 在数字信号处理领域,量化是指将连续的信号值或大量离散的采样值,近似为有限多个或少量的离散值的过程,量化常用在视频编码过程用来降低不重要部分的数据的精度
[0111] 反量化是量化的逆过程,即将少量离散值映射到原始值域的过程,但反量化后的数据与原始数据相比,在精度上有损失,这是量化过程的有损本质决定的。
[0112] 量化的强度,也称为量化的级别,是指原始信号的精度与量化后数据的精度进行对比后的比值,比值越大意味着量化的强度越高,精度的损失越严重,比值越低意味着量化的强度越低,精度损失越小。
[0113] 熵编码的基本原理是,将数据中定长的一段数据用变长的且唯一的标识符来替代,并将这种一对一的映射存储起来,出现频率越高的定长数据使用越短的标识符,从而能够压缩数据的大小。熵编码常被用在视频编码流程的最后一步,将量化后的频率域数据压缩为更紧凑的数据。最常见的两种熵编码算法是哈夫曼编码和算术编码。经过熵编码所生成的数据通常在处理时被视作一个二进制的连续的数据流,即码流。
[0114] 码率是指编码后的视频数据在单位时间内所占用的存储空间的大小,通常用来作为衡量编码效率和图像质量的因素之一,码率越高意味着压缩率更低,图像的质量保留的更好,但占用空间较大,码率越低意味着压缩率高,图像质量损失较严重,但占用较少的空间。
[0115] 在对视频进行编码时通常要在最终生成的压缩数据的质量和占用存储空间的大小两者间进行取舍,这时一般用目标码率这个指标来衡量压缩数据的质量和占用存储空间的大小间的取舍平衡。
[0116] 在广播电视领域目前使用最广泛的视频编解码标准主要有MPEG-2、MPEG-4、Avid DNxHD(SMPTE VC-3)等,涵盖有线电视卫星电视、DVD出版,以及行业相关的软件、硬件设备,包括摄像机、录像机、DVD播放器、编辑系统、播出系统等,这几种编解码标准的算法都是基于DCT变换,下面对基于DCT的编码算法流程进行简单介绍:
[0117] 1)将整幅图像数据分割成多个小块,这样做既便于后续的DCT变换处理,又可以根据图像上不同区域的数据性质,进行不同级别的量化,从而在最大限度保留重要数据精度的同时尽量压缩无用数据;
[0118] MPEG-2和DNxHD中分块大小固定为8x8,MPEG-4中新增了4x4、16x16分块等。
[0119] 2)对每个分块进行DCT变换,得到图像的频率域数据,应用DCT变换的目的主要是分离图像的高频和低频部分。由于人眼对图像的高频部分感觉远不如对低频部分敏感,所以视频压缩算法主要是通过有损压缩高频部分来达到压缩的目的,同时保证在还原后对人眼的感受完全不影响或只有轻微影响。经过DCT变换的8x8小块仍然为8x8,但低频部分的分量主要集中在8x8小块的左上角像素中,而高频部分则被分散在靠近右下角的区域,其他分块方式经过DCT变换后也是如此分布,不再详细说明;
[0120] 3)对经DCT变换后的频率域数据进行Zig-Zag变换,从8x8小块的左上角往右下角按“之”字形排列成1维数据后,可以保证低频分量集中在1维数据列的前端,高频数据集中在后端,以便于后续处理;
[0121] 4)码率控制,根据用户指定的目标码率来计算每一个分块需要使用的量化级别,以保证最终生成的压缩数据的码率满足用户的要求;
[0122] 不同的分块采用不同量化级别是因为通常图像内不同的区域有不一样的性质,有些区域高频分量较多,如物体的边缘处,有些区域低频分量较多,如大片同样色彩的连续过渡,因此在量化时要根据每个分块所处区域的性质来决定该分块采用的量化强度,以保证最终生成的压缩数据能够最接近目标码率,且同时保证图像的质量损失最小。
[0123] 5)根据计算出的每个分块的量化级别对各个1维的频率域数据进行量化;
[0124] 6)对量化后的数据进行熵编码产生最终的压缩数据。以8x8数据为例,1维的8x8数据量化后仍然还是8x8=64个数据,数据还未得到真正压缩,但由于此时许多高频部分的细节已被舍弃,所以1维8x8数据的后端通常拥有大量连续为0的数据,这时需要应用熵编码对该1维数据进行编码以达到真正的压缩效果。量化与熵编码两者是合二为一相互合作,量化舍弃高频细节但并不真正压缩数据,而其处理得到的结果用熵编码来压缩却能产生很好的效果。
[0125] 基于DCT的解码流程是编码流程的逆过程,主要流程如下:
[0126] 1)对输入的二进制码流进行熵解码,得到多个分块的量化数据和量化级别;
[0127] 2)根据解码出的每个分块的量化级别分别对每个分块做反量化;
[0128] 3)对反量化后的数据做逆Zig-Zag变换,从1维变回2维;
[0129] 4)对反量化后的数据做逆DCT变换,从频率域变换为空间域的颜色数据,即完成解码过程。
[0130] 下面结合上述描述对本实施例的视频编解码方法进行详细说明。
[0131] 本实施例中的视频编解码方法中应用了实施例一所述的GPU与CPU的交互方法,其中本实施例中的编码方法的流程图如图6所示,解码方法的流程图如图7所示,下面先结合图6对本实施例的帧内视频编码方法进行说明,该方法包括以下步骤:
[0132] 步骤S201:将原始数据传输到GPU上,对图像分块后的原始数据进行预处理,所述预处理包括根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据;
[0133] 本领域技术人员可以理解,编码过程的输入数据是二维图像,通常二维图像的组织方式是在CPU内存中线性存放,每一行的最后一个像素后面跟着下一行像素的数据,这种组织方式适合二维图像的显示,但不适合在GPU中作为编码算法的输入数据,因此需转换数据组织形式,下面以8*8的Block为例进行说明。
[0134] 编码算法中以8*8的Block为基本处理单位,同一个8*8的Block内部的像素在逻辑上是连续的,即每个像素的排布是按照原始图像的实际情况进行的,但在物理内存空间里是不连续的,即每一行的最后一个像素后面跟着下一行像素的数据,已将原始图像中的像素顺序打乱了,GPU若读取这种不连续的数据将会有较大的额外时间开销,因此用传统的图像组织方式会导致处理效率低下。
[0135] 因此,本实施例以DN*HD中Block的数据存储方式以及Macro Block的逻辑位置为例,说明将数据的物理顺序严格对应逻辑顺序的方式进行数据排列的方法及过程。
[0136] 在DN*HD的数据存储方式中,原始图像被划分为8*8的Block,之后按照4个Y Block,2个U Block,2个V Block的方式,将8个Block组成一个Macro Block,所有的Macro Block按照在图像空间上从左到右,从上到下的顺序进行排列,即完成了数据组织形式的转换。
[0137] 上述数据组织形式的转换具体实现步骤为:先将原始的二维图像数据通过系统总线传输到GPU的内存中,之后通过调用预先设置的GPU程序代码来实现对数据的重排列,其中数据的传输和程序代码的调用可采用CUDA、OpenCL、DirectCompute、Direct3D和OpenGL等API中的一种或组合,具体选择哪种API由设计人员根据具体情况决定,但API的选择并不能限定本发明实施例的保护范围。
[0138] 步骤S202:按照GPU的层次结构,在GPU上对预处理后的原始数据进行并行的DCT变换;
[0139] 步骤S203:将经DCT变换后的数据,在GPU上进行并行的Zig-Zag变换;
[0140] 步骤S204:根据用户指定的目标码率,计算出每帧图像对应的量化级别;
[0141] 步骤S205:根据所述量化级别,在GPU上对Zig-Zag变换后的各分块像素进行量化;
[0142] 步骤S206:将量化后的数据经过数据转换后传输到CPU上,并在CPU上对量化后的数据进行熵编码,得到压缩码流,这里保存的量化级别将在解码时用来进行反量化。
[0143] 本实施例中公开的视频解码方法流程图如图7所示,与上述视频编码方法相对应,包括以下步骤:
[0144] 步骤S301:在CPU上,对输入的压缩码流进行熵解码,得到每帧图像分块后的量化数据和量化级别;
[0145] 步骤S302:将所述量化数据和量化级别传输到GPU上,根据熵解码得到的每个分块的量化级别,对所述量化数据进行并行的反量化;
[0146] 步骤S303:在GPU上,对所述反量化后的数据进行并行的逆Zig-Zag变换;
[0147] 步骤S304:在GPU上,对所述逆Zig-Zag变换后的数据进行逆DCT变换,得到空间域的图像数据。
[0148] 本实施例中的帧内视频编解码方法,通过将原始算法中的数据组织形式的转换过程、DCT变换过程、Zig-Zag变换过程、计算量化级别的过程以及量化的过程放在GPU上进行并行计算,进而提高了帧内视频编解码的速度,同时也减轻了CPU的负担,减少了在对广播级高清视频数据进行编解码时对CPU资源的占用,进而可以释放出CPU的资源以供系统中其他计算和操作,避免了系统性能的降低。
[0149] 另外,针对现有的硬件编解码卡,本发明实施例公开得的视频编解码方法,对GPU的硬件配置要求不高,价格较高清的硬件编解码卡低很多,大大降低了成本;本发明实施例需要的显卡本身,是大多数电脑系统中所必须的,因此不需要多余的插槽,灵活性提高了,而且也不存在产品级别档次不够细化的问题,档次越高的显卡,运行本发明实施例的技术时,速度就越快,使得系统可以根据应用的需求或用户的要求,搭载不同档次的GPU硬件;本发明实施例的运行程序并非如定制板卡一样固化在板卡的芯片内部,而是在系统运行时装载到GPU上执行,因此在需支持新增的编解码标准时,只需升级软件即可,不需要更换板卡即可加入新功能或消除程序中已有的缺陷,提高了产品的灵活性和扩展性。
[0150] 实施例五
[0151] 本实施例公开的视频编码方法的流程如图8所示,本实施例中将上一实施例的编码过程进行了进一步的细化,包括以下步骤:
[0152] 步骤S401:同上一实施例中的步骤S201类似,将原始数据传输到GPU上,对图像分块后的原始数据进行预处理,所述预处理包括根据预先设置的在GPU上并行执行的程序代码,将在逻辑上连续、物理空间上不连续的原始数据排列为在逻辑上和物理空间上均连续的数据;
[0153] 以Macro Block的数据组织形式为例,在此步骤中每个Macro Block内有16*8=128个线程同时并行运行,因此理论上此并行计算过程比CPU中的线性计算过程快
128倍,但实际应用中可能因为硬件的延迟等时间消耗达不到理论值。
[0154] 需要说明的是,本步骤中线程数量的选择因数据组织形式的变化而变化,而且数据组织形式也不仅限于DN*HD、Macro Block的形式,颜色空间的选择也不仅限于YUV颜色空间,也可以为RGB、HSL、HSV、CMYK等颜色空间,具体数据组织形式和颜色空间的选择因具体情况而定。
[0155] 步骤S402:在GPU上,选择与每帧图像所分行数和列数相等数量的线程Thread,如采用8*8分块的形式,则每帧图像采用8个线程同时进行计算;
[0156] 步骤S403:采用一个Thread对应一行像素数据的方式进行横向并行DCT变换;
[0157] 步骤S404:将所述横向计算的结果进行同步后,采用一个Thread对应一列像素数据的方式进行纵向并行DCT变换,得到每帧图像的频率域数据;
[0158] 步骤S405:在GPU上,选择与每帧图像所分像素数相等数量的Thread,如采用8*8分块的形式,则每帧图像采用64个线程同时进行并行计算;
[0159] 步骤S406:采用一个Thread对应一个像素数据的方式进行并行的Zig-Zag变换;
[0160] 步骤S407:在GPU上,选择与量化级别数相等数量的Thread,如有8个量化级别,则每帧图像选择8个线程同时进行尝试性量化;
[0161] 步骤S408:采用一个Thread对应一个量化级别的方式对每帧图像进行并行量化,得到指示每帧图像在相应量化级别下进行量化后所消耗的存储空间大小的数据;
[0162] 步骤S409:将所述数据转换为串行数据后,传输至CPU;
[0163] 步骤S410:CPU对所述串行数据进行插值计算,得到符合目标码率要求的量化级别表,所述量化级别表中指示了每帧图像对应的量化级别;
[0164] 步骤S411:将所述量化级别表传输至GPU显存中,并利用预先设置的GPU并行程序代码,将所述量化级别表进行重排列,即数据组织形式的转换,具体过程如上一实施例所述,这里不再详细描述;
[0165] 步骤S412:选择与每帧图像所分像素数相等数量的Thread,同步骤S405类似,如采用8*8分块的形式,则每帧图像采用64个线程同时进行并行计算;
[0166] 步骤S413:利用每帧图像对应的量化级别,采用一个Thread对应一个像素数据的方式对每帧图像所分像素进行并行的量化,得到量化后的数据;
[0167] 步骤S414:将量化后的并行数据转换为串行数据后,传输至CPU;
[0168] 步骤S415:在CPU上对量化后的数据进行熵编码,得到压缩码流。
[0169] 其中,步骤S402-S404为DCT变换的过程,步骤S405和步骤S406为Zig-Zag变换的过程,步骤S407-S411为量化级别的计算过程,步骤S412和步骤S413为量化过程,由于GPU的内存访问方式等指标与CPU不同,因此在进行程序代码的翻译和数据组织形式的转换后,为了实现在GPU上的并行计算性能更加优化,速度更快,还需要针对GPU的架构对程序代码进行重新组织和优化,本实施例的编码方法通过选择合适的线程数量,让编码过程最优化的适应GPU的硬件工作方式,使计算过程更快更顺畅。
[0170] 本实施例公开的帧内视频解码方法与编码方法相对应,只是编码方法的逆过程,因此解码方法的过程参见编码方法即可,这里不再赘述。
[0171] 本领域技术人员可以理解,可以使用许多不同的工艺和技术中的任意一种来表示信息、消息和信号。例如,上述说明中提到过的消息、信息都可以表示为电压电流电磁波磁场磁性粒子、光场或以上任意组合。
[0172] 专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0173] 结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
[0174] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈