CN102075762B - 用于视频编码器的帧间预测电路及其实现方法 - Google Patents
用于视频编码器的帧间预测电路及其实现方法 Download PDFInfo
- Publication number
- CN102075762B CN102075762B CN 201010619869 CN201010619869A CN102075762B CN 102075762 B CN102075762 B CN 102075762B CN 201010619869 CN201010619869 CN 201010619869 CN 201010619869 A CN201010619869 A CN 201010619869A CN 102075762 B CN102075762 B CN 102075762B
- Authority
- CN
- China
- Prior art keywords
- operator
- module
- computing
- class
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
本发明公开了一种用于视频编码器的帧间预测器的实现方法,包括:将高级程序语言算法描述的视频编码器的帧间预测器的各个功能块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成帧间预测器硬件集成电路。通过上述可以加快帧间预测器的集成电路实现速度。本发明还公开了一种依据上述方法得到的帧间预测器。
Description
技术领域
本发明涉及一种用于视频编码器的帧间预测器及其实现方法。
背景技术
集成电路设计方法学是用来指导集成电路设计的方法学。目前的集成电路设计,尤其是大规模集成电路设计,其常见的设计流程是:系统工程师根据功能需求提出系统功能框架,软件工程师利用计算机高级程序语言(例如:Java、C、C++、Matlab等)对系统功能框架进行描述,从而得到集成电路的高级程序语言的算法描述;而后由集成电路设计工程师利用硬件描述语言(例如:Verilog、VHDL等),将算法描述综合成网表文件,之后使用专门的硬件综合工具实现布局布线,得到集成电路版图。
在集成电路产业需求中,设计速度已成为集成电路设计方法学的重要考虑因素。当集成电路制造商或集成系统供应商将商业运作的基本问题(如产品数量、设计/测试费用、不可再用的工程开支(Non Recurring Engineering,NRE)、用户IP的整合/复用、可靠性和可维护性、生产过程复杂性等)综合考虑在内时,加速产品推出时间、提高产品性能、降低产品制造风险便成为选择设计技术时的重要考虑因素。
随着集成电路制造工艺进入45nm以下阶段,集成电路设计发展落后于集成电路工艺进步的剪刀差继续增大。数据流算法,尤其是数字媒体类的ASIC(Application Specific Integrated Circuit,专用集成电路)设计,例如视频编码器的集成电路设计,面临设计周期长、灵活性差、扩展性差等问题,难以满足产品快速上市、功能不断提升的需求,因而需要改进和提升。
发明内容
本发明要解决的主要技术问题是,提供一种用于视频编码器的帧间预测器及其实现方法,能够加快帧间预测器的集成电路设计速度。
为解决上述技术问题,本发明提供一种用于视频编码器的帧间预测器的实现方法,其特征在于,包括:
将高级程序语言算法描述的视频编码器的帧间预测器的各个功能块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成帧间预测器硬件集成电路。
将高级程序语言算法描述的视频编码器的帧间预测器的各个功能块映射成由算子单元构成的硬件逻辑描述包括如下步骤:
程序分析步骤:读取帧间预测器的各个功能块的高级程序语言算法程序,根据该高级程序语言规则从所述高级程序语言算法程序中识别出被映射的执行对象和参数对象;
数据控制流图生成步骤:将识别出的执行对象和参数对象映射成描述帧间预测器算法的数据控制流图中相应节点;
算子结构图生成步骤:根据数据控制流图中的各个节点的功能处理,从所述算子单元库中取出对应功能的至少一个算子单元,将所述数据控制流图转换成由算子单元组成的算子时空图;
时序约束步骤:根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
时空图压缩步骤:根据时间标注对算子时空图进行空间上的聚类压缩,并使总体算法执行时间最接近于总时序约束;
下层硬件映射步骤:将聚类压缩后的算子时空图映射成由算子单元构成的硬件逻辑描述。
上述方法中,所述算子单元库中的算子单元包括控制类算子、运算类算子、存储类算子、路径类算子、时钟类算子中的至少一种。
上述方法中,所述运算类算子为可重构算子,一个运算类算子配置控制位以及多种运算,所述控制位用于择一选择一种运算;所述路径类算子用于链接存储类算子与运算类算子,形成数据流结构,其实现形式包括多选器、交叉开关和总线;所述控制类算子用于推动数据流的流动,其实现形式包括计数器、状态机和微指令字,控制输出内容包括:运算类算子动态重构信息、存储类算子的配置信息、路径类算子的配置信息;所述存储类算子用于对不同的数据存储格式和计算格式进行转换。
上述方法中,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据和中间数据中的至少一种,将所述运算指令映射为运算类算子,将所述控制指令映射为控制类算子,所述参数对象映射为存储类算子。
一种帧间预测器,用于实现视频编码器的帧间预测,包括:ME控制算子模块、ME存储算子功能群落模块、ME运算算子功能群落模块、MC控制算子功能模块、MC存储算子功能群落模块和MC运算算子功能群落模块;
所述ME控制算子模块,用于生成ME存储算子功能群落模块的存储地址,还用于配置ME运算算子功能群落的参数,并且还对ME运算算子功能群落模块的帧间整数预测的判决处理结果进行比较处理;
所述MC控制算子模块,用于生成MC存储算子功能群落的存储地址,还用于配置MC运算算子功能群落的参数,并且还对MC运算算子功能群落模块的帧间分数预测的判决处理结果比较处理;
所述ME存储算子功能群落模块,用于存储参考帧图像的参考窗和参考宏块;
所述MC存储算子功能群落模块,用于存储分数插值运算的中间结果和当前处理的宏块信息和进行帧间预测得到的最佳宏块的残差和运动矢量,以及参考宏块的相关参数;
ME运算算子功能群落模块,用于进行帧间整数预测的判决处理;
所述MC运算算子功能群落模块,用于计算帧间分数预测的插值和帧间分数预测的判决处理。
上述结构中,所述ME运算算子功能群落模块包括cost算子功能I型算子功能块,所述MC运算算子功能群落模块包括:1/2插值算子功能块、1/4插值算子功能块和cost算子功能II型算子功能块;
所述cost算子功能I型算子功能块,用于进行帧间整数预测的判决处理;
所述1/2插值算子功能块,用于计算帧间分数预测的1/2插值;
所述1/4插值算子功能块,用于计算帧间分数预测的1/4插值;
所述cost算子功能I I型算子功能块,用于帧间分数预测的判决处理。
上述结构中,所述ME存储算子功能群落模块包括ME-MEM存储算子模块和ME-GEG存储算子模块,所述MC存储算子功能群落模块包括MC-MEM存储算子模块、CUR-REG存储算子模块和ST2_3-MEM存储算子模块;
所述ME-MEM存储算子模块,用于保存参考帧图像的参考窗的信息;
所述ME-GEG存储算子模块,用于保存参考宏块的信息;
所述MC-MEM存储算子模块,用于保存所述MC存储算子功能群落模块进行帧间分数预测插值计算时产生的中间结果;
所述CUR-REG存储算子模块,用于保存当前处理宏块的信息;
所述ST2_3-MEM存储算子模块,用于保存所述MC存储算子功能群落模块进行帧间预测所得到的最佳宏块的残差和运动矢量,以及所述残差和运动矢量所用到的参考宏块的信息。
上述结构中,还包括ME-AGU地址生成器模块和MC-AGU地址生成器模块;
所述ME-AGU地址生成器模块用于根据所述ME控制算子模块的配置信息生成相应的地址信息给ME存储算子功能群落模块;
所述MC-AGU地址生成器模块用于根据所述MC控制算子模块的配置信息生成相应的地址信息给MC存储算子功能群落模块。
本发明的有益效果是:本发明通过设计表示硬件逻辑的算子单元,将视频编码器的帧间预测器的高级程序语言算法描述映射成由算子单元构成的硬件逻辑描述,从而加快帧间预测器的集成电路设计速度。
附图说明
图1为X264_me_search函数的部分调用关系示意图;
图2为X264_me_search函数的输入输出表格图;
图3为X264_me_search函数的内部变量和常量表格图;
图4为pixel_sad_16×16函数的输入输出表格图;
图5为X264_me_search函数的总体数据流结构图;
图6为pixel_sad_16×16函数的总体数据流结构图;
图7为L0和L1逻辑算子时空图;
图8为L2逻辑算子时空图;
图9为L3逻辑第一部分的算子时空图;
图10为L3逻辑第二部分的算子时空图
图11为L4逻辑算子时空图;
图12为L5逻辑算子时空图;
图13为X264_me_search函数的全部算子时空图;
图14为pixel_sad_16×16函数的算子时空图;
图15为图13所示结构标注时序后的时空图;
图16为图14结构标注时序后的时空图;
图17为pixel_sad_16×16函数聚类压缩后的时空图;
图18为帧间预测器算子结构实现图;
图19为帧间预测器功能模块图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
一、视频编码器概述
视频编码技术是数字媒体存储与传输的关键技术,它广泛地应用在数字电视、视频通信、网络流媒体等领域。本发明涉及一种基于算子思想的帧间预测器及其实现方法,适用于信号处理领域中各种图像/视频/音频DCT变换数据的帧间预测。
目前在视频编码领域,由国际电联(ITU-T)和国际标准化组织(ISO)联合组建的联合视频组(JVT)共同制定的新数字视频编码标准H.264已得到广泛应用。H.264算法既是国际电联(ITU-T)的H.264,也是国际标准化组织(ISO)和国际电工委(IEC)的MPEG-4标准的第10部分的内容,其采用分层次的算法结构,在概念上可以分为两层,分别是视频编码层和网络提取层。视频编码层(Video Coding Layer,简称VCL)负责高效的视频内容表示,网络提取层(Network Abstraction Layer,简称NAL)负责以网络所要求的恰当的方式对数据进行打包和传送。通过视频编码层和网络提取层这样的结构有助于信息的封装和对信息进行更好的优先级控制。
H.264视频编码器结构和编码器的编码过程如图1和图2所示。由图示中可以看出,H.264编码过程的主要子算法有:帧间预测、帧内预测、变换和量化、去块效应滤波和熵编码。下面对各子算法做一简述。
1、帧间预测
帧间预测是利用视频图像帧间的相关性,即时间相关性,来达到图像压缩的目的。在图像传输技术中,活动图像是关注的重点。活动图像是由时间上以帧周期为间隔的连续图像帧组成的时间图像序列,它在时间上比在空间上具有更大的相关性。大多数图像相邻帧间细节变化很小,即图像帧间具有很强的相关性,利用帧所具有的这种相关性特点进行帧间编码,可获得比帧内编码高得多的压缩比。H.264帧间预测是利用已编码视频帧/场和基于块的运动补偿的预测模式。
2、帧内预测
帧内预测是H.264采用的一种新技术,指利用当前块的上方和左方的相邻像素作为参考像素,对当前块的像素进行预测。帧内预测编码可以缩减图像的空间冗余,减小码率。
3、变换和量化
在图像编码中,变换编码和量化从原理上讲是两个独立的过程。但在H.264中,将两个过程的乘法合二为一,并进一步采用整数运算,减少编解码的运算量。量化过程是在不降低视频效果的前提下减小图像编码长度,减少视频恢复中不必要的信息。其目的是去除变换后对图像的视觉质量不重要的数据分量且保持视觉上重要的数据分量。其性质是被去除后的分量不能恢复,是有损过程。
4、去块滤波
基于块的视频编码系统在重建图像时不可避免地在某些块边界处会出现一些较为明显的块效应,特别是在低码率的情况下。出现块效应的原因在于块边界像素的运动补偿精度一般都低于块内像素,而且块变换也导致了块边界的不连续性。去块滤波的主要过程包括:确定滤波强度、判断虚假边界、滤波计算。
5、熵编码
在视频编码中,熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或是存储的压缩码流。输入的符号可能包括量化的变换系统、运动向量、标记、头以及附加信息。
二、算子设计思想概述
集成电路设计,从全定制的晶体管设计开始,发展到1984年前后以1.0μm工艺节点为代表的门阵列设计,再到1994年前后以0.5μm工艺节点为代表的标准单元设计,以及1999年前后以0.25μm工艺节点为代表的基于IP(知识产权核)的设计和2004年0.13um工艺节点为代表的时间驱动,目前的集成电路设计一般基于标准单元粒度,由硬件描述语言对集成电路硬件逻辑进行描述,然而硬件描述语言并不适合直接描述高级程序语言的程序逻辑和执行流程,造成在目前的集成电路设计中,由高级语言向下层硬件映射的速度所需时间较长,成为制约集成电路设计速度的瓶颈所在。
随着集成电路制造工进入45nm以后,集成电路设计的效率严重滞后于制造工艺的进步。传统ASIC设计由于设计周期长、设计成本高、灵活性差、扩展性差,难以满足产品快速上市、功能不断提升的需求。大规模的基于标准单元的设计速度已不能满足要求,究其原因,主要在于标准单元的粒度太小,只能进行加减乘除等运算,无法实现粒度较大的运算。如一次操作可完成一个多路加法、移位加、加移位或|a-b|等运算,而这些算法在视频算法中尤为常见。
鉴于此,一种基于算子的快速设计方法被提出。算子设计的基本思想是快速设计,其力图把握最有利的切分点,以实现集成电路的快速设计。
算子设计方法希望从数学上能够支持算法的描述,为实现算法到算子语言、算子结构的自动化翻译提供支撑。算子的特点如下:
1.粒度更大
每个算子都具有一定功能,它是一种函数运算的符号表示。整个算子体系能够支持算法描述中的各种功能实现,设计人员可以基于算子对算法进行描述和验证;
2.支持算法的实现
种类完备但是数量有限的算子能够支持上层语言描述中对运算、存储、控制和数据路径的描述,并且可以基于算子描述进行优化和验证;
3.能够加速设计和验证
设计人员利用算子完成算法的功能描述后,对应的硬件设计也同时完成。因为所有算子均是预先全定制的且已被验证正确的单元,因此将缩短设计和验证的时间,设计人员只需要保证基于算子的描述和映射过程的正确即可,从而将大大加速设计和验证过程。
本发明提出的算子,或者说算子单元,可以表示集成电路的硬件逻辑,基于算子的不同功能,可将算子分为运算类算子、存储类算子、路径类算子、控制类算子、时钟类算子等几类,这些算子构成一套完备的算子体系,能支撑所有算法的实现。经过设计,这些基本算子在面积、功耗、性能等参数上是最优化,它们构成了算子单元库。并且算子单元还可以组成算子功能块,算子功能块间采用共享MEM链接方式进行数据通信,也可以采用寄存器传递进行控制信息传递。下面对各类算子做进一步说明。
1.运算类算子
运算类算子支持算术逻辑、移位等运算功能的实现,实现这些基本运算的算子称为基本运算算子。并且,针对不同应用可以在基本运算算子的基础上进行扩展而予以支持,比如媒体处理中相减、取绝对值、求平均值、固定系数滤波运算等复杂但很常用的运算,实现这些扩展运算的运算算子称为扩展运算算子,它们由基本运算算子搭建而成。
运算类算子具有可重构性,即可以为一个运算类算子配置多种运算及控制位,控制位用于择一选择一种运算。根据不同应用的需求,通过配置控制位,可以使运算算子实现不同的功能。如果算子在执行运算过程中变化,可以通过控制位实现动态可重构。而如果算子的运算功能被优化固定,则可以将控制位固定(即固化定制)。
2.存储类算子
算法中的不同阶段对数据处理的顺序和排列是不一样的,从而使得在每个阶段中数据的存储格式和方式不同,存储算子则针对这类需求实现数据不同存储格式和方式的转换。存储类算子可以支持不同应用中基本且常用的存储格式和转换方式,比如串并转换、并串转换、队列结构、堆栈结构等。
3.路径类算子
路径类算子的作用是连接存储类算子与运算类算子,形成数据流结构。其实现形式主要有三种:多选器、交叉开关和总线。
4.控制类算子
控制类算子的作用是正常控制数据流的流动。其实现形式有三种:计数器、状态机和微指令字。控制输出内容包括:运算类算子动态重构信息、存储类算子AGU的配置信息、路径类算子的配置信息,实现对其他算子的控制。
5.时钟类算子
时钟类算子是驱动和定时部件,用于产生供控制和处理算子的时钟信号,时钟信号包含控制时钟起停和控制时钟频率的信号。
集成电路(IC)的算子设计过程可以概括为将C、Matlab等高级语言的算法描述转化为算子描述并在算子结构上进行优化设计的过程。由于算子已经预先设计并验证,因此算法的算子描述可以快速或者自动完成设计验证过程。对于特定领域,比如通信或媒体,可以设计一些更好支撑算法实现的扩展算子或算子IP,从而更大程度地加速和优化设计过程。
本发明涉及将算子用于视频编码器的帧间预测器的实现,其主要包括:
将高级程序语言算法描述的视频编码器的帧间预测器的各个编码功能块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成帧间预测器硬件集成电路。
在将高级程序语言算法描述的视频编码器的帧间预测器的各个编码功能块映射成由算子单元构成的硬件逻辑描述过程中,主要包括如下步骤:
1)程序分析步骤:读取帧间预测器的各个编码功能块的高级程序语言算法程序,根据该高级程序语言规则从所述高级程序语言算法程序中识别出被映射的执行对象和参数对象;该步骤的主要作用在于算法分解,主要是将C、Java、Matlab等高级语言描述形式的算法划分为若干个子算法过程。算法分解主要分析函数调用关系、函数结构体和变量、底层函数的基本运算等信息,以便以上述的各类算子实现对算法的映射。执行对象主要包括运算指令和/或控制指令,参数对象主要包括输入数据、输出数据和中间数据中的至少一种,在算子映射时,将运算指令映射为运算类算子,将控制指令映射为控制类算子,参数对象映射为存储类算子。运算类算子和存储类算子通过路径类算子链接,控制类算子提供控制,时钟类算子提供时钟。
2)数据控制流图生成步骤:将识别出的执行对象和参数对象映射成描述帧间预测器算法的数据控制流图中相应节点。
即将匹配出的执行对象和参数对象映射成描述集成电路算法的数据控制流图中的相应节点。例如:将所述运算指令映射为处理框图,将所述控制指令映射为用于标识状态、状态转移条件及状态控制信号的控制流,将所述输入数据、输出数据和中间数据映射为数据流上的存储节点。每个函数具有自己的数据控制流图。
3)算子结构图生成步骤:根据数据控制流图中的各个节点的功能处理,从算子单元库中取出对应功能的至少一个算子单元,将所述数据控制流图转换成由算子单元组成的算子时空图;算子时空图主要表示了利用算子将算法完全展开后的形式,当算法被算子完全展开之后,算法将完全通过并行性执行,速度最快,面积最大,此即时空图展开。
将数据控制流图转换成算子时空图时将上层函数和下层函数的数据控制流图分别转换成各自的算子时空图。先将数据控制流图根据其数据流相关性展开,然后将展开后节点转换成可完成节点功能的算子单元。用一个或多个算子单元的组合取代数据控制流图中的各节点,一个或多个算子单元的组合(算子块)可完成与各节点功能相同的功能。展开成算子时空图后扩大了集成电路的设计面积,但这种情况下时序最快。
将数据控制流图展开的方式包括但不限于以下几种方式:
如果数据控制流图中的数据流为顺序相关数据流结构,则将所述顺序相关数据流采用流水线的方式展开。
如果数据控制流图中的数据流中存在反馈时,当数据流是一个循环时,对于有数据相关性的数据流不能转化为流水结构,如果数据流的数据之间存在数据相关性,并且存在数据相关性的各数据流内部不存在数据相关性时,则将所述内部数据不存在数据相关性的各数据流采用局部流水线的方式展开。
如果数据控制流图中的数据流之间不存在数据相关性,则将所述并行数据流采用并行方式展开,并转换成由算子单元组成的算子时空图。
4)时序约束步骤:根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束。
如果所述数据流结构为并行数据流,则将总时序约束平分给到对应的时空图中的每个算子层级,并将每个算子层级的时序约束平分到该算子层级中的每一个算子单元。将数据控制流中串行各节点所对应的各算子层级总的算子的基本时序单位作为总体时序约束,按照各算子层级中最长运算路径所映射的运算算子的时序占各个算子层级中最长运算路径所映射的算子单元对应的时序总和的比例来分配各算子层级的时序。
5)时空图压缩步骤:根据时间标注对算子时空图进行空间上的聚类压缩,并使总体算法执行时间最接近于总时序约束;该步骤是根据各个子算法过程的时间标注,在算子时空图中进行聚类压缩,通过增加控制类算子和路径类算子来提高存储类算子和运算类算子的复用,使各个子算法过程的完成时间尽量与算法过程标注的时间接近,即尽量减少运算和存储类算子的数量。
将一个算法描述用算子完全平铺开,没有任何复用,算法的完成速度将最快,但这带来的代价将是很高的面积成本和功耗,这并非设计所希望的。设计的目标期望满足:在满足用户时序要求的前提下,最大地减小面积和功耗需求,所以需要复用一些算子。这样就需要在每个算子执行相应的功能上加上其执行时间的标注,从而能够根据执行时间复用算子,使总体算法执行时间最接近于实际要求时间,这就是算子的时间图。空间图是对算子面积的定义,即在算子聚类映射时,根据算子的面积进行聚类,选择复用面积较小的算子。在算子聚类过程中,这两种因素都需要考虑到。
6)下层硬件映射步骤:将聚类压缩后的算子时空图映射成由算子单元构成的硬件逻辑描述。
在基于快速设计的算子方法学中,从高级程序语言算法描述开始,通过映射得到可配置算子的时空图,从时空图经过聚类将算子进行空间压缩,使得在满足时序条件的情况下,基于功能相近与控制一致的原则,将算子聚类形成初步算子实现的ASIC架构。根据目标算法的实现去除算子不必要的可重构部件,使得面积、功耗、性能等参数得到进一步优化,最后为定制完成的ASIC生成配置指令。这一过程可省去对高级程序语言算法,例如C程序算法的研读,而可直接根据C算法的属性进行算子的映射,进而大大地缩短了设计时间。
三、算子实现
按照上述方法,本发明以H.264标准的x264_me_search函数为例对帧间预测器的实现方法进行分析,H.264标准中提到的x264_me_search函数可以实现帧间预测功能。
步骤一,对以C语言描述的x264_me_search函数进行分解,具体包括:
1、分析x264_me_search函数的调用关系,图1部分示出了x264_me_search函数的调用关系;
2、针对x264_me_search函数作输入输出变量分析,具体分析结果见图2所示的表格;
3、针对x264_me_search函数作内部变量与常量分析,具体分析结果见图3所示的表格;
4、内部函数(调用函数)分析。比如,x264_me_search主函数调用了pixel_sad_16×16函数,以pixel_sad_16×16函数为例,对内部函数分析作说明。分析pixel_sad_16×16函数时,主要分析pixel_sad_16×16函数的输入和输出,pixel_sad_16×16函数的输入和输出如图4所示的表格。
步骤二:将分解后的x264_me_search函数生成算子时空图,包括先由高级语言生成数据流图,再由数据流图调用算子单元库中相应的算子映射成算子时空图。
1、由算法生成数据流图。
如图5所示为x264_me_search函数的数据流图,其中图2表格中的输入信号映射为图中的左侧方框,输出信号映射为图中的右侧方框;图3表格中的中间变量和常量映射为中部方框。上述中,输入变量,输出变量和常量均映射为寄存器的形式,在基于算子的设计方法中,寄存器可以用存储类算子实现。
x264_me_search函数的内部逻辑映射为图示中的标有用L0至L5其中一个的三维立体框表示,L0和L5具体内容如下:
L0逻辑:bmx=x264_clip3((m->mvp[0]+2)>>2,-m->i_mv_range,m->i_mv_range);
L1逻辑:bmy=x264_clip3((m->mvp[1]+2)>>2,-m->i_mv_range,m->i_mv_range);
L2逻辑:p_fref=&m->p_fref[bmy*(m->i_stride)*5+bmx];
L 3逻辑:cost比较逻辑;
L4逻辑:bmx、bmy和p_fref更新逻辑;
L5逻辑:m->mv[0]=bmx<<2;m->mv[1]=bmy<<2;
x264_me_search函数调用映射为图示中的三维立体框,用虚线表示的是反馈。特别地,由于图2中的输入信号lm算法中总是给pixel_sad_16×16函数或pixel_satd_16×16函数作为输入,因此,在由算法分解后映射的数据流图中并没有在图中示出lm输入。
在图5所示的数据流图中,并没有详细描述出pixel_sad_16×16函数的数据流图。pixel_sad_16×16函数的数据流图如图6所示,具体含义如与上所述类似。
2、由数据流图生成算子时空图。
(1)、调用预先设计好的算子单元库中的算子,将上述数据流图映射成用算子表示的时空图。在映射过程中可以考虑数据的相关性,从而使算子结构具有最大的并行结构。
对图5所示的x264_me_search函数的数据流图,将其L0到L5逻辑分别映射成相应的算子时空图,映射过程如下述:
L0和L1的高级语言表述相同,如下所示:
bmx=x264_clip3((m->mvp[0]+2)>>2,-m->i_mv_range,m->i_mv_range);
因此,L0和L1逻辑生成的算子时空图如图7所示。图示中,左侧方框的内容表示输入的信号,右侧方框的内容表示输出的变量。X0和X1为控制算子产生的配置信号,其控制流用虚线表示。图示中矩形方框代表映射的运算算子或存储算子,它们的互连由路径算子实现。图示中,ALU2、ADSSM、CLIP是运算类算子,标有变量的矩形框是存储变量的存储节点,标有2的矩形框是值为2的存储常量节点,空的矩形框是变量传递的存储节点,用于数据同步。
L2逻辑的高级语言表述如下:
L2逻辑:p_fref=&m->p_fref[bmy*(m->i_stride)*5+bmx];
L2逻辑的算子时空图生成如图8所示,图示中各部分表示的内容如L0和L1逻辑中所述。
L3逻辑的高及语言由两部分组成,分别对这两部分时行算子映射,其中第一部分的高级语言表述如下:
bcost=h->pixf.sad[i_pixel](m->p_fenc,m->i_stride,p_fref,
(m->i_stride)*5);
for(i_iter=0;i_iter<16;i_iter++)
{
int best=0;
int cost[4];
(cost[0])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(-1)*m->i_stride*5+(0)],m->i_stride*5)+m->lm*
(bs_size_se(((bmx+(0))<<2)-m->mvp[0])+bs_size_se(((bmy+(-1))<<2)
-m->mvp[1]));
(cost[1])=h->pixf.s ad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(1)*m->i_stride*5+(0)],m->i_stride*5)+m->lm*
(bs_size_se(((bmx+(0))<<2)-m->mvp[0])+bs_size_se(((bmy+(1))<<2)-
m->mvp[1]));
(cost[2])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(0)*m->i_stride*5+(-1)],m->i_stride*5)+m->lm*
(bs_size_se(((bmx+(-1))<<2)-m->mvp[0])+bs_size_se(((bmy+(0))<<2)
-m->mvp[1]));
(cost[3])=h->pixf.sad[i_pixel](m->p_fenc,
m->i_stride,&p_fref[(0)*m->i_stride*5+(1)],m->i_stride*5)+m->lm*
(bs_size_se(((bmx+(1))<<2)-m->mvp[0])+bs_size_se(((bmy+(0))<<2)-
m->mvp[1]));
L3逻辑第一部分算子时空图生成如图9所示,图示中各部分表示的内容如L0和L1逻辑中所述。
L3逻辑第二部分的高级语言表述如下:
if(cost[1]<cost[0])best=1;
if(cost[2]<cost[best])best=2;
if(cost[3]<cost[best])best=3;
if(bcost<=cost[best])
break;
bcost=cost[best];
L3逻辑第二部分算子时空图生成如图10所示,图示中各部分表示的内容如L0和L1逻辑中所述。
L4逻辑的高级语言表述如下:
L4逻辑:if(best==0){
bmy--;
p_fref-=(m->i_stride)*5;
}else if(best==1){
bmy++;
p_fref+=(m->i_stride)*5;
}else if(best==2){
bmx--;
p_fref--;
}else if(best==3){
bmx++;
p_fref++;
}
L4逻辑的算子时空图生成如图11错误!未找到引用源。所示,图示中各部分表示的内容如L0和L1逻辑中所述。
L5逻辑的高级语言表述如下:
L5逻辑:m->mv[0]=bmx<<2;
m->mv[1]=bmy<<2;
L5逻辑的算子时空图生成如12错误!未找到引用源。所示,,图示中各部分表示的内容如L0和L1逻辑中所述。
由L0至L5逻辑的算子时空图得x264_me_search函数的全部算子时空图展开如图13所示。
(2)、调用函数高级语言生成算子时空图。针对调用函数的分析以x264_me_search函数内部调用pixel_sad_16×16函数为例。pixel_sad_16×16函数的高级语言表述如下:
for(y=0;y<ly;y++)
{for(x=0;x<lx;x++)
{i_sum+=abs(pix1[x]-pix2[x]);}
pix1+=i_stride_pix1;
pix2+=i_stride_pix2;
}
return i_sum;
pixel_sad_16×16函数的算子时空图生成如图14所示。仅用5个算子周期即可完成pixel_sad_16×16函数的运算。
步骤三:对算子时空图添加时序标注,包括对当前函数的算子时空图进行时序标注和对调用函数的时空图标注时序。
1、对图13所示的x264_me_search函数的算子时空图标注时序。标注时序后的算子时空图如图15所示。
2、对如图14所示的pixel_sad_16×16函数的算子时空图标注时序,标注时序后的算子时空图如图16所示。
步骤四:对图15和图16所示的标注了时序的时空图进行聚类压缩。pixel_sad_16×16函数的算子时空图的聚类压缩结果如图17所示,整个x264_me_search函数进行聚类压缩后的算子结构图如图18所示。
对于完成图15和图16这种平铺展开的算子时空图的总体算法所用的时间是最少的,但所述算子时空图占据的空间面积确是最大的,对于集成电路的设计来说,时间和空间都要综合考虑。因此,可以对图15和图16所述的算子时空图进行聚类压缩,聚类压缩是指对某此运算属性相同的运算类算子和/或存储属性相同的存储类算子通过引入控制算子的方式将其复用,以达到增加时序和减小面积的目的。由于在帧间预测算子时空图中所用到的算子多种多样,所以可能的聚类压缩结果也很多,所选择聚类压缩后执行算法所需总时间最接近时序约束时间的结果作为聚类压缩后的结果。在聚类压缩过程中,有以下原则可供参考:
1、对算子时空图中运算属性相同的运算类算子进行聚类压缩。比如,时空图中可以将两个并行的加法操作算子压缩成一个加法操作算子,同时通过引入控制算子的方式实现压缩后的加法算子的复用,完成与压缩前的两个加法算子相同的功能。由此可见,对算子时空图进行压缩后,算子的数目可以大幅度的减少,从而节约了集成电路的面积,相应地,压缩后的算子通过控制算子实现复用,增加了集成电路总算法的执行时间。可以理解的是,对运算类算子的聚类压缩必然引起存储类算子、控制类算子、路径类算子和时钟类算子也相应地发生变化,所以可以根据实际情况对上述算子也作相应的聚类压缩以进一步节约集成电路面积,尤其是其中的存储类算子。
2、在引入控制算子的同时,生成相应的配置指令,所述配置指令用于控制生成的算子按照预定的方式工作,从而实现与压缩前算子的相同功能。
3、对于同一个算子时空图可能的聚类压缩结果有多种。因此,在压缩过程中,选择压缩后时空图总算法执行时间最接近约束时间的时空图作为最终的压缩结果。选择总算法执行时间最接近约束时间的时空图作为压缩结果,可以在保证满足时序条件的情况下,最大地节约集成电路的面积。约束时间是根据用户提出的性能指标而计算出的集成电路最大执行时间。
对于上述聚类压缩后的结果,还可以进行更进一步的优化,一种优化的方式是固化定制。固化定制是指对于可重构的算子,将没有用到的单元结构或其扩展功能取消息,使其只具有在本算法中所使用的功能。
四、算子实现后的帧间预测器结构。
如图19所示,一种帧间预测器,用于实现视频编码器的帧间预测,包括:ME控制算子模块、ME存储算子功能群落模块、ME运算算子功能群落模块、MC控制算子功能模块、MC存储算子功能群落模块和MC运算算子功能群落模块;
所述ME控制算子模块,用于生成ME存储算子功能群落模块的存储地址,还用于配置ME运算算子功能群落的参数,并且还对ME运算算子功能群落模块的帧间整数预测的判决处理结果进行比较处理;
所述MC控制算子模块,用于生成MC存储算子功能群落的存储地址,还用于配置MC运算算子功能群落的参数,并且还对MC运算算子功能群落模块的帧间分数预测的判决处理结果比较处理;
所述ME存储算子功能群落模块,用于存储参考帧图像的参考窗和参考宏块;
所述MC存储算子功能群落模块,用于存储分数插值运算的中间结果和当前处理的宏块信息和进行帧间预测得到的最佳宏块的残差和运动矢量,以及参考宏块的相关参数;
ME运算算子功能群落模块,用于进行帧间整数预测的判决处理;
所述MC运算算子功能群落模块,用于计算帧间分数预测的插值和帧间分数预测的判决处理。
如图18所示,所述ME运算算子功能群落模块包括cost算子功能I型算子功能块,所述MC运算算子功能群落模块包括:1/2插值算子功能块、1/4插值算子功能块和cost算子功能II型算子功能块;
所述cost算子功能I型算子功能块,用于进行帧间整数预测的判决处理;
所述1/2插值算子功能块,用于计算帧间分数预测的1/2插值;
所述1/4插值算子功能块,用于计算帧间分数预测的1/4插值;
所述cost算子功能II型算子功能块,用于帧间分数预测的判决处理。
如图18所示,所述ME存储算子功能群落模块包括ME-MEM存储算子模块和ME-GEG存储算子模块,所述MC存储算子功能群落模块包括MC-MEM存储算子模块、CUR-REG存储算子模块和ST2_3-MEM存储算子模块;
所述ME-MEM存储算子模块,用于保存参考帧图像的参考窗的信息;
所述ME-GEG存储算子模块,用于保存参考宏块的信息;
所述MC-MEM存储算子模块,用于保存所述MC存储算子功能群落模块进行帧间分数预测插值计算时产生的中间结果;
所述CUR-REG存储算子模块,用于保存当前处理宏块的信息;
所述ST2_3-MEM存储算子模块,用于保存所述MC存储算子功能群落模块进行帧间预测所得到的最佳宏块的残差和运动矢量,以及所述残差和运动矢量所用到的参考宏块的信息。
如图18所示,还包括ME-AGU地址生成器模块和MC-AGU地址生成器模块;
所述ME-AGU地址生成器模块用于根据所述ME控制算子模块的配置信息生成相应的地址信息给ME存储算子功能群落模块;
所述MC-AGU地址生成器模块用于根据所述MC控制算子模块的配置信息生成相应的地址信息给MC存储算子功能群落模块。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (8)
1.一种用于视频编码器的帧间预测器的实现方法,其特征在于,帧间预测器包括ME控制算子模块、ME存储算子功能群落模块、ME运算算子功能群落模块、MC控制算子功能模块、MC存储算子功能群落模块和MC运算算子功能群落模块,包括:
将高级程序语言算法描述的视频编码器的帧间预测器的各个功能模块映射成由算子单元构成的硬件逻辑描述;由所述算子单元构成的硬件逻辑描述生成帧间预测器硬件集成电路,将高级程序语言算法描述的视频编码器的帧间预测器的各个功能模块映射成由算子单元构成的硬件逻辑描述包括如下步骤:
程序分析步骤:读取帧间预测器的各个功能块的高级程序语言算法程序,根据该高级程序语言规则从所述高级程序语言算法程序中识别出被映射的执行对象和参数对象;
数据控制流图生成步骤:将识别出的执行对象和参数对象映射成描述帧间预测器算法的数据控制流图中相应节点;
算子结构图生成步骤:根据数据控制流图中的各个节点的功能处理,从所述算子单元库中取出对应功能的至少一个算子单元,将所述数据控制流图转换成由算子单元组成的算子时空图;
时序约束步骤:根据用户规格需求和目标集成电路工艺的要求确定出总时序约束,对算子时空图中的每个算子单元标注时间,对算子时空图的每个层级进行时序约束;
时空图压缩步骤:根据时间标注对算子时空图进行空间上的聚类压缩,并使总体算法执行时间最接近于总时序约束;
下层硬件映射步骤:将聚类压缩后的算子时空图映射成由算子单元构成的硬件逻辑描述。
2.如权利要求1所述的方法,其特征在于,所述算子单元库中的算子单元包括控制类算子、运算类算子、存储类算子、路径类算子、时钟类算子中的至少一种。
3.如权利要求2所述的方法,其特征在于,所述运算类算子为可重构算子,一个运算类算子配置控制位以及多种运算,所述控制位用于择一选择一种运算;所述路径类算子用于链接存储类算子与运算类算子,形成数据流结构,其实现形式包括多选器、交叉开关和总线;所述控制类算子用于推动数据流的流动,其实现形式包括计数器、状态机和微指令字,控制输出内容包括:运算类算子动态重构信息、存储类算子的配置信息、路径类算子的配置信息;所述存储类算子用于对不同的数据存储格式和计算格式进行转换。
4.如权利要求2所述的方法,其特征在于,所述执行对象包括运算指令和/或控制指令,所述参数对象包括输入数据、输出数据和中间数据中的至少一种,将所述运算指令映射为运算类算子,将所述控制指令映射为控制类算子,所述参数对象映射为存储类算子。
5.一种帧间预测器,用于实现视频编码器的帧间预测,其特征在于,包括:ME控制算子模块、ME存储算子功能群落模块、ME运算算子功能群落模块、MC控制算子功能模块、MC存储算子功能群落模块和MC运算算子功能群落模块;
所述ME控制算子模块,用于生成ME存储算子功能群落模块的存储地址,还用于配置ME运算算子功能群落的参数,并且还对ME运算算子功能群落模块的帧间整数预测的判决处理结果进行比较处理;
所述MC控制算子模块,用于生成MC存储算子功能群落的存储地址,还用于配置MC运算算子功能群落的参数,并且还对MC运算算子功能群落模块的帧间分数预测的判决处理结果比较处理;
所述ME存储算子功能群落模块,用于存储参考帧图像的参考窗和参考宏块;
所述MC存储算子功能群落模块,用于存储分数插值运算的中间结果和当前处理的宏块信息和进行帧间预测得到的最佳宏块的残差和运动矢量,以及参考宏块的相关参数;
ME运算算子功能群落模块,用于进行帧间整数预测的判决处理;
所述MC运算算子功能群落模块,用于计算帧间分数预测的插值和帧间分数预测的判决处理。
6.如权利要求5所述的帧间预测器,其特征在于,所述ME运算算子功能群落模块包括cost算子功能I型算子功能块,所述MC运算算子功能群落模块包括:1/2插值算子功能块、1/4插值算子功能块和cost算子功能II型算子功能块;
所述cost算子功能I型算子功能块,用于进行帧间整数预测的判决处理;
所述1/2插值算子功能块,用于计算帧间分数预测的1/2插值;
所述1/4插值算子功能块,用于计算帧间分数预测的1/4插值;
所述cost算子功能II型算子功能块,用于帧间分数预测的判决处理。
7.如权利要求5所述的帧间预测器,其特征在于,所述ME存储算子功能群落模块包括ME-MEM存储算子模块和ME-GEG存储算子模块,所述MC存储算子功能群落模块包括MC-MEM存储算子模块、CUR-REG存储算子模块和ST2_3-MEM存储算子模块;
所述ME-MEM存储算子模块,用于保存参考帧图像的参考窗的信息;
所述ME-GEG存储算子模块,用于保存参考宏块的信息;
所述MC-MEM存储算子模块,用于保存所述MC存储算子功能群落模块进行帧间分数预测插值计算时产生的中间结果;
所述CUR-REG存储算子模块,用于保存当前处理宏块的信息;
所述ST2_3-MEM存储算子模块,用于保存所述MC存储算子功能群落模块进行帧间预测所得到的最佳宏块的残差和运动矢量,以及所述残差和运动矢量所用到的参考宏块的信息。
8.如权利要求5所述的帧间预测器,其特征在于,还包括ME-AGU地址生成器模块和MC-AGU地址生成器模块;
所述ME-AGU地址生成器模块用于根据所述ME控制算子模块的配置信息生成相应的地址信息给ME存储算子功能群落模块;
所述MC-AGU地址生成器模块用于根据所述MC控制算子模块的配置信息生成相应的地址信息给MC存储算子功能群落模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010619869 CN102075762B (zh) | 2010-12-31 | 2010-12-31 | 用于视频编码器的帧间预测电路及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010619869 CN102075762B (zh) | 2010-12-31 | 2010-12-31 | 用于视频编码器的帧间预测电路及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102075762A CN102075762A (zh) | 2011-05-25 |
CN102075762B true CN102075762B (zh) | 2012-12-05 |
Family
ID=44034084
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010619869 Expired - Fee Related CN102075762B (zh) | 2010-12-31 | 2010-12-31 | 用于视频编码器的帧间预测电路及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102075762B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102769754B (zh) * | 2012-08-02 | 2015-04-01 | 豪威科技(上海)有限公司 | H264编码器及其图像变换、量化及重构的方法 |
US10911769B2 (en) * | 2017-06-23 | 2021-02-02 | Qualcomm Incorporated | Motion-based priority for the construction of candidate lists in video coding |
WO2020140244A1 (zh) * | 2019-01-03 | 2020-07-09 | 北京大学 | 一种视频图像处理方法、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1946178A (zh) * | 2006-10-20 | 2007-04-11 | 西安交通大学 | 一种用于运动估计的vlsi装置及运动估计的方法 |
CN101426134A (zh) * | 2007-11-01 | 2009-05-06 | 上海杰得微电子有限公司 | 用于视频编解码的硬件装置及方法 |
KR20090102646A (ko) * | 2008-03-25 | 2009-09-30 | 숭실대학교산학협력단 | 에이치 닷 264 표준에 근거한 디코더용 움직임 보상기의 보간 연산기 구조 |
CN101576735A (zh) * | 2009-05-05 | 2009-11-11 | 武汉科技大学 | 基于图编码的组合逻辑电路的自动合成方法 |
-
2010
- 2010-12-31 CN CN 201010619869 patent/CN102075762B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1946178A (zh) * | 2006-10-20 | 2007-04-11 | 西安交通大学 | 一种用于运动估计的vlsi装置及运动估计的方法 |
CN101426134A (zh) * | 2007-11-01 | 2009-05-06 | 上海杰得微电子有限公司 | 用于视频编解码的硬件装置及方法 |
KR20090102646A (ko) * | 2008-03-25 | 2009-09-30 | 숭실대학교산학협력단 | 에이치 닷 264 표준에 근거한 디코더용 움직임 보상기의 보간 연산기 구조 |
CN101576735A (zh) * | 2009-05-05 | 2009-11-11 | 武汉科技大学 | 基于图编码的组合逻辑电路的自动合成方法 |
Non-Patent Citations (2)
Title |
---|
Ziyi Hu et al.Operator Design Methodology and Implementation for H.264 Entropy Encoder.《ICIECS 2010 2nd international conference》.2010, * |
王新.算子设计方法缩小IC设计与制造间的"剪刀差".《集成电路应用》.2010,(第07期), |
Also Published As
Publication number | Publication date |
---|---|
CN102075762A (zh) | 2011-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104854866B (zh) | 下一代视频的内容自适应、特性补偿预测 | |
CN102055981B (zh) | 用于视频编码器的去块滤波器及其实现方法 | |
CN102835111B (zh) | 使用先前块的运动矢量作为当前块的运动矢量来对图像进行编码/解码的方法和设备 | |
CN102088603B (zh) | 用于视频编码器的熵编码器及其实现方法 | |
KR102467057B1 (ko) | 다-성분 화상 또는 비디오 코딩 개념 | |
CN106797464A (zh) | 用于视频编码和解码中的矢量编码的方法和装置 | |
CN104247427A (zh) | 使用分区编码的有效预测 | |
CN103931196A (zh) | 帧间预测方法及其装置 | |
CN103999468A (zh) | 用于视频编码的方法和装置 | |
CN106899847A (zh) | 编码设备、解码设备、编码方法和解码方法 | |
CN102054108B (zh) | 集成电路下层硬件映射方法、时空图压缩方法及装置 | |
US20120155540A1 (en) | Pixel retrieval for frame reconstruction | |
CN102043886A (zh) | 集成电路下层硬件映射方法、数据控制流时序约束方法及装置 | |
CN102148990B (zh) | 一种运动矢量预测装置和方法 | |
CN102075762B (zh) | 用于视频编码器的帧间预测电路及其实现方法 | |
CN102054109B (zh) | 集成电路下层硬件映射方法、数据控制流生成方法及装置 | |
CN105025298A (zh) | 对图像进行编码/解码的方法和设备 | |
CN103716631B (zh) | 用于图像处理的方法、装置、编码器和解码器 | |
CN102054107B (zh) | 集成电路下层硬件映射方法、时空图生成方法及装置 | |
CN104956671A (zh) | 视频帧重建 | |
CN104170385B (zh) | 用于编码的方法和装置 | |
CN113261285B (zh) | 编码方法、解码方法、编码器、解码器以及存储介质 | |
CN102055980B (zh) | 用于视频编码器的帧内预测电路及其实现方法 | |
CN106231307A (zh) | 一种图像压缩帧内编码预测方法及其硬件实现 | |
CN102075763A (zh) | 用于视频编码器的帧内子块预测电路及其实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121205 Termination date: 20211231 |
|
CF01 | Termination of patent right due to non-payment of annual fee |