发明内容
本发明实施例的目的在于提供一种帧间预测方法、装置及视频编解码设备,旨在解决现有技术必须通过改变硬件电路的方式才能满足不同视频标准下插值运算的需求,从而导致成本高的问题。
本发明实施例是这样实现的,一种帧间预测方法,所述方法包括下述步骤:
储存不同视频标准对应的控制表,并根据需要更新所述控制表中的信息;
查找所述控制表中相应的信息内容;
根据所述查找到的信息内容进行插值运算;
所述控制表为三级控制表,所述三级控制表包括第一级控制表,第二级控制表和第三级控制表;
所述第一级控制表包括M个第一表单元,每个第一表单元的内容包括在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数;
其中,M为一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和;
所述第二级控制表包括N个第二表单元,每个第二表单元的内容包括当前阶段插值中所需的读取数据的起始地址,写回数据的起始地址,滤波操作控制位,滤波系数选择,预处理操作控制位,移位操作控制位,限幅操作控制位和当前阶段插值运算所需的时钟周期数量;
其中,StepNoj为对于第j个运动向量进行插值操作需要的阶段数;
所述第三级控制表包括至多K个第三表单元,每个第三表单元的内容还包括当前时钟周期插值操作中的数据输入地址偏移、数据输入位宽、数据输出地址偏移、数据输出位及写操作有效标志;
其中,
为对于第j个运动向量第k个插值阶段所需的时钟周期数量;
所述每个第一表单元与该表单元中包括的在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数个第二表单元相对应,且该第一表单元的内容还包括至少一个与该第一表单元相对应的第二表单元的入口地址;
所述每个第二表单元与该表单元中包括的当前阶段插值所需时钟周期数量个第三表单元相对应,且该第二表单元的内容还包括至少一个与该第二表单元相对应的第三表单元中的入口地址;
所述查找控制表中相应的信息内容具体为:
根据滤波器类型、待插值图像块的尺寸以及运动向量的值确定第一级控制表中相应的第一表单元的入口地址;
查找第一级控制表,根据该第一表单元内容中包括的第二表单元的入口地址以及当前所处的插值阶段数确定对应的第二级控制表中第二表单元的入口地址;
查找第二级控制表,根据该第二表单元内容中包括的第三表单元的入口地址以及当前所处的时钟周期确定第三级控制表中第三表单元的入口地址和部分插值参数;
根据第三表单元的入口地址查找相应的信息内容;
所述插值运算设计为流水线操作。
本发明实施例的另一目的在于提供一种帧间预测方法,所述方法包括下述步骤:
储存不同视频标准对应的控制表,并根据需要更新所述控制表中的信息;
查找所述控制表中相应的信息内容;
根据所述查找到的信息内容进行插值运算;
所述控制表为两级控制表,所述二级控制表包括:第一级控制表和第二级控制表;
所述第一级控制表包括M个第一表单元,每个第一表单元的内容包括在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数;
其中,M为一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和;
所述第二级控制表中包括N个第二表单元,每个第二表单元的内容包括当前阶段插值操作中的读取数据模式,第一个读数据块序号,第二个读数据块序号,读数据块宽度信息,读数据块高度信息,写数据块序号,写数据块宽度信息,写数据块高度信息,数据块与实际起始地址在地址寄存器记录基地址的偏移,存储空间的行宽,读取数据位宽,写实际起始地址在地址寄存器记录基地址的偏移,写数据位宽;以及滤波操作控制位,滤波系数选择,预处理操作控制位,移位操作控制位,限幅操作控制位;
其中,
StepNo
j为对于第j个运动向量进行插值操作需要的阶段数;
所述每个第一表单元与该第一表单元中包括的在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数个第二表单元相对应,该第一表单元的内容还包括至少一个与该第一表单元相对应的第二表单元的入口地址;
所述查找控制表中相应的信息内容具体为:
根据滤波器类型,待插值图像块的尺寸以及运动向量的值确定第一级控制表中相应的第一表单元的入口地址;
查找第一级控制表,根据该第一表单元内容中包括的第二表单元的入口地址以及当前所处的插值阶段数确定对应的第二级控制表中第二表单元的入口地址;
根据第二表单元的入口地址查找相应的信息内容;
所述插值运算设计为流水线操作。
本发明实施例的另一目的在于提供一种帧间预测装置,所述装置包括:
第一存储器,用于储存不同视频标准对应的控制表;
插值运算单元,用于根据所述控制表中的信息内容进行插值运算并输出插值结果;
查表控制单元,用于控制所述插值运算单元查找所述控制表中的信息内容并控制所述第一存储器将所述控制表中的信息内容提供给所述插值运算单元;
所述控制表为三级控制表,所述三级控制表包括第一级控制表,第二级控制表和第三级控制表;
所述第一级控制表包括M个第一表单元,每个第一表单元的内容包括在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数;
其中,M为一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和;
所述第二级控制表中包括N个第二表单元,每个第二表单元的内容包括当前阶段插值中所需的读取数据的起始地址,写回数据的起始地址,滤波操作控制位,滤波系数选择,预处理操作控制位,移位操作控制位,限幅操作控制位和当前阶段插值运算所需的时钟周期数量;
其中,
StepNo
j为对于第j个运动向量进行插值操作需要的阶段数;
所述第三级控制表包括至多K个第三表单元,每个第三表单元的内容还包括当前时钟周期插值操作中的数据输入地址偏移、数据输入位宽、数据输出地址偏移、数据输出位及写操作有效标志;其中,
为对于第j个运动向量第k个插值阶段所需的时钟周期数量;
所述每个第一表单元与该表单元中包括的在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数个第二表单元相对应,且该第一表单元的内容还包括至少一个与该第一表单元相对应的第二表单元的入口地址;
所述每个第二表单元与该表单元中包括的当前阶段插值所需时钟周期数量个第三表单元相对应,且该第二表单元的内容还包括至少一个与该第二表单元相对应的第三表单元中的入口地址;
所述插值运算单元设计成流水线结构,所述流水线均启动后,每一个时钟周期计算出一个插值结果。
本发明实施例的另一目的在于提供一种帧间预测装置,所述装置包括:
第一存储器,用于储存不同视频标准对应的控制表;
插值运算单元,用于根据所述控制表中的信息内容进行插值运算并输出插值结果;
查表控制单元,用于控制所述插值运算单元查找所述控制表中的信息内容并控制所述第一存储器将所述控制表中的信息内容提供给所述插值运算单元;
所述控制表为两级控制表,所述两级控制表包括:第一级控制表和第二级控制表;
所述第一级控制表包括M个第一表单元,每个第一表单元的内容包括在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数;
其中,M为一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和;
所述第二级控制表中包括N个第二表单元,每个第二表单元的内容包括当前阶段插值操作中的读取数据模式,第一个读数据块序号,第二个读数据块序号,读数据块宽度信息,读数据块高度信息,写数据块序号,写数据块宽度信息,写数据块高度信息,数据块与实际起始地址在地址寄存器记录基地址的偏移,存储空间的行宽,读取数据位宽,写实际起始地址在地址寄存器记录基地址的偏移,写数据位宽;以及滤波操作控制位,滤波系数选择,预处理操作控制位,移位操作控制位,限幅操作控制位;
其中,
StepNo
j为对于第j个运动向量进行插值操作需要的阶段数;
所述每个第一表单元与该第一表单元中包括的在某一滤波器类型及特定插值图像决尺寸下的一个运动向量处进行插值操作需要的阶段数个第二表单元相对应,该第一表单元的内容还包括至少一个与该第一表单元相对应的第二表单元的入口地址;
所述插值运算单元设计成流水线结构,所述流水线均启动后,每一个时钟周期计算出一个插值结果。
本发明实施例的另一目的在于提供一种采用上述帧间预测装置实现的视频编解码设备。
本发明实施例在第一存储器中集成不同视频标准对应的控制表,使用第二存储器来不断的更新第一存储器中存储的不同视频标准对应的控制表中的信息内容,采用流水线的设计结构,在不改变硬件电路的情况下以查表的方式实现不同视频标准下的插值运算,节约了成本,节省了硬件资源。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例通过集成所有不同视频标准对应的控制表信息,从而不改变硬件电路,采用流水线的设计,以查表的方式实现不同视频标准下的插值运算。
本发明实施例提供的一种帧间预测装置的逻辑结构如图2所示,包括第一存储器、查表控制单元以及插值运算单元,其中第一存储器用于存储不同视频标准的控制表;插值运算单元采用流水线设计,根据控制表中的信息内容进行插值运算并输出插值结果;查表控制单元用于控制插值运算单元查找所述控制表中的信息内容并控制第一存储器将所述控制表中的信息内容提供给所述插值运算单元。
本发明实施例提供的一种帧间预测装置主要应用于视频编解码设备中,图3示出了该装置的模块结构图,包括第一存储器31,查表控制单元32以及插值运算单元33,现分别对各个模块详细描述如下:
本发明实施例中,第一存储器1也叫控制表存储单元,可以是SRAM存储器,也可以是DRAM存储器,用于存储视频标准的控制表信息。作为本发明的一个实施例,控制表可以为三级控制表,具体的三级控制表的逻辑关系如图4所示,包括第一级控制表41,也称为插值控制表(Interpolate Control Table,ICTAB);第二级控制表42,也称为访问控制及插值信息表(Access ControlTable,ACTAB);第三级控制表43,也称为访问地址表(Access Address Table,AATAB)。其中,三级控制表包括插值过程中全部需要的参数。第一级控制表41由M个第一表单元组成,数量M为一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和,每个第一表单元包括在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数;第二级控制表42由N个第二表单元组成,数量与一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和M以及对应不同滤波器类型及不同插值图像块尺寸的每个运动向量进行插值操作所需要的阶段数StepNo
j有关,
每个第二表单元包括当前阶段插值中所需的读取数据的起始地址,写回数据的起始地址,滤波操作控制位,滤波系数选择,预处理操作控制位,移位操作控制位,限幅操作控制位;每个第二表单元还包括当前阶段插值所需的时钟周期数量;第三级表控制表43由K个第三表单元组成,数量K与一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和M以及对应不同滤波器类型及不同插值图像块尺寸的每个运动向量进行插值操作所需要的阶段数StepNo
j、每个阶段插值需要的时钟周期数量
有关,
每个第三表单元的内容还包括当前时钟周期插值操作中的数据输入地址偏移、数据输入位宽、据输出地址偏移、数据输入位宽、数据输出地址偏移、数据输出位宽、写操作有效标志。
本发明实施例中,三级控制表的表单元之间对应关系分别如图5所示,第一级控制表的第j个第一表单元与第二级控制表StepNo
j个第二表单元相对应,第二级控制表的第k个第一表单元与第三级控制表
个第二表单元相对应,StepNo
j为对于第j个运动向量进行插值操作需要的阶段数,
为与第j个第一表单元对应的第k个第二表单元记录的当前阶段插值所需的时钟周期数量。
作为本发明的一个实施例,在插值过程中,为了访问相应的表单元以获取参数,参数获取过程可以按照下列步骤实现:
步骤1:根据滤波器类型、待插值图像块的尺寸以及运动向量的值确定第一级控制表中相应的第一表单元的入口地址;
步骤2:查找第一级控制表,根据该第一表单元内容中包括的第二表单元的入口地址以及当前所处的插值阶段数确定对应的第二级控制表中第二表单元的入口地址;
步骤3:查找第二级控制表,根据该第二表单元内容中包括的第三表单元的入口地址以及当前所处的时钟周期确定第三级控制表中第三表单元的入口地址和部分插值参数;
步骤4:根据第三表单元的入口地址查找相应的信息内容。
为了通过上一级表单元获得下一级表单元的地址,需要在上一级表单元中记录与表单元相对应的全部下一级表单元中至少一个表单元的地址。例如在第j个第一表单元中可以记录与该表单元相应的全部StepNoj个第二表单元的入口地址,也可以记录其中一个地址,其余第二表单元的地址通过第一表单元记录的地址计算后获得,或者在第二表单元中也记录其余第二表单元的入口地址。同理,也可以在第二表单元中记录至少一个对应的第三表单元的地址。
作为本发明的一个实施例,第二级控制表中的表单元在存储器中按相应的阶段编号顺序排列,第三级控制表中的表单元在存储器中按相应的阶段编号、时钟编号顺序排列。每个第一表单元记录与该表单元对应的全部第二表单元中阶段编号最小的表单元的地址,每个第二表单元记录与该表单元对应的全部第三表单元中时钟编号最小的表单元的地址。三级控制表的结构如图6所示,第一表单元的每个索引下包含16位信息;第二表单元的每个索引下包含64位信息;第三表单元的每个索引下包含32位信息。其中,第一级控制表的大小为128′16bit,而第二级控制表和第三级控制表的大小根据不同的视频标准而不同。比如:对于MPEG4标准,第二级控制表的大小为82′64bit,而第三级控制表的大小则为6096′32bit;对H.264标准,第二级控制表的大小为451′64bit,而第三级控制表的大小则为8619′32bit。
本发明实施例中,三级控制表中每级控制表表单元中包含的控制参数的含义如表1所示:
表1
作为本发明的另一个实施例,控制表存储单元中的控制表也可以为两级控制表,第一级控制表称为插值控制表(Interpolate Control Table,ICTAB),第二级控制表称为访问控制表(Access Control Table,ACTAB)。两级控制表包括插值过程中全部需要的参数。第一级控制表由M个第一表单元组成,所述数量M为一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和,每个第一表单元的内容包括在某一滤波器类型及特定插值图像块尺寸下的一个运动向量处进行插值操作需要的阶段数;第二级控制表由N个第二表单元组成,数量与一种视频标准支持的对应不同滤波器类型及不同插值图像块尺寸的所有运动向量的数目总和M以及对应不同滤波器类型及不同插值图像块尺寸的每个运动向量进行插值操作所需要的阶段数StepNo
j有关,
每个第二表单元的内容包括当前阶段插值操作中的读取数据模式,第一个读数据块序号,第二个读数据块序号,读数据块宽度信息,读数据块高度信息,写数据块序号,写数据块宽度信息,写数据块高度信息,数据块与实际起始地址在基地址寄存器记录基地址的偏移,存储空间的行宽,读取数据位宽,写实际起始地址在基地址寄存器记录基地址的偏移,写数据位宽;以及滤波操作控制位,滤波系数选择,预处理操作控制位,移位操作控制位,限幅操作控制位;每个第二表单元还包括当前阶段插值所需的时钟周期数量。
本发明实施例中,两级控制表的表单元之间对应关系分别如图7所示:第一级控制表的第j个第一表单元与第二级控制表中StepNoj个第二表单元相对应,StepNoj为第j个第一表单元记录的与该表单元对应的相应滤波器类型及插值图像块尺寸的运动向量进行插值操作所需要的阶段数。
在插值过程中,为了访问相应的表单元以获取参数,参数获取过程可以按照下列步骤实现:
步骤1:根据滤波器类型,待插值图像块的尺寸以及运动向量的值确定第一级控制表中相应的第一表单元的入口地址;
步骤2:查找第一级控制表,根据该第一表单元内容中包括的第二表单元的入口地址以及当前所处的插值阶段数确定对应的第二级控制表中第二表单元的入口地址;
步骤3:根据第二级控制表单元的入口地址查找相应的信息内容。
为了通过上一级表单元获得下一级表单元的地址,需要在上一级表单元中记录相关的地址。例如在第j个第一表单元中可以记录与该表单元相应的全部StepNoj个第二表单元的入口地址,也可以记录其中一个地址,其余第二表单元的地址通过第一表单元记录的地址计算后获得,或者在第二表单元中也记录其余第二表单元的入口地址。
作为本发明的一个实施例,第二级控制表的表单元在存储器中按相应的阶段编号顺序排列,每个第一表单元记录与该表单元对应的全部第二表单元中阶段编号最小的表单元的地址。两级控制表的结构如图8所示,每级控制表中包含的控制参数的含义如表2所示:
表2
第一存储器是一种断电数据就会丢失的存储介质,所以控制表不可能一直保存在第一存储器中。本发明实施例中,有一个第二存储器与第一存储器连接,用于不断更新第一存储器中存储的不同视频标准对应的控制表中的信息。插值运算前,首先使用第二存储器中与视频标准对应的内容更新第一存储器中的内容。作为本发明的一个实施例,该第二存储器可以是Flash存储器,ROM存储器或任何外挂的,断电不丢失数据的存储器。
插值运算单元33包括:数据读取单元331,数据预处理单元332,滤波单元333,数据后处理单元334,数据写出单元335。其中数据读取单元31由当前阶段数据输入的起始地址Read_BA和当前周期数据输入地址偏移Read_offset相加产生地址以及当前周期数据输入位宽RW项来控制,用于读取数据;数据预处理单元332由预处理操作控制位Pre-pro来控制,用于对读取的数据进行预处理;滤波单元333由滤波操作控制位Filter-pro和滤波系数选择Filter_Coeff来控制,用于对预处理后的数据进行滤波运算;数据后处理单元334由移位操作控制位Shift以及限幅操作控制位Clip来控制,用于对滤波后的数据进行凑整,移位和限幅运算;数据写出单元335由当前阶段数据输出的起始地址Write_BA和当前周期数据输出地址偏移Write_offset相加产生地址以及当前周期数据输出位宽WW和当前周期写操作有效标志Wr_en项来控制,用于插值结果的输出。
查表控制单元32用于控制插值运算单元33访问第一存储器31中储存的控制表,完成多级查表操作;并控制第一存储器31将控制表中的信息内容提供给插值运算单元33。
图9示出了本发明实施例提供的插值运算单元与三级控制表的逻辑结构示意图,现详述插值过程如下:
启动电路,由插值滤波器的类型、待插值数据块的大小以及运动向量的值计算第一级控制表901的表单元的入口索引地址IC-addr;根据入口索引地址IC-addr查找第一级控制表901的表单元中对应的内容,该内容包括:当前操作需要的阶段数StepNO.以及第二级控制表与当前滤波器类型和图像块尺寸对应的运动向量插值相应的全部第二表单元中阶段编号最小的表单元的入口地址ACTAB_BA。当StepNO.的值不为零时,以StepNO.的值初始化第一访问计数器902,当第一访问计数器902不为零时,以第一级控制表901中查找出的ACTAB_BA为起始地址,通过第一地址产生递加单元903递增索引到第二级控制表904中每个第二表单元的表项内容,每访问一个第二表单元,第一计数器902的计数值减一,每个第二表单元的表项的内容包括:当前阶段运算总共需要的时钟周期Counter,当前阶段数据输入的起始地址Read_BA,前阶段数据输出的起始地址Write_BA,滤波操作控制位Filter-pro,滤波系数选择Filter_Coeff,预处理操作控制位Pre-pro,移位操作控制位Shift以及限幅操作控制位Clip以及第三级控制表的入口地址AATAB_BA。用Counter的值初始化第二访问计数器905,当第二计数器计数值不为零时,以第二级控制表904中查找出的AATAB_BA为起始地址,通过第二地址产生递加单元906递增索引到第三级控制表907中每个第三表单元的表项内容,每访问一个第三表单元,第二访问计数器905的计数值减一,每个第三表单元的表项的内容包括:当前周期数据输入地址偏移Read offset,当前周期数据输入位宽RW,当前周期数据输出地址偏移Write offset,当前周期数据输出位宽WW以及当前周期写操作有效标志Wr_en。将第二级控制表904的第二表单元中的当前阶段数据输入的起始地址Read_BA与第三级控制表907的第三表单元中的当前周期数据输入地址偏移Read offset送到第三地址产生递加单元908累加运算后作为数据读取地址送入插值运算单元910;将第二级控制表904的第二表单元中的当前阶段数据输出的起始地址Write_BA与第三级控制表907的第三表单元中的当前周期数据输出地址偏移Write offset送到第四地址产生递加单元909累加运算后作为数据写出地址送入插值运算单元910;第二级控制表904的第二表单元中的预处理操作控制位Pre-pro、滤波操作控制位Filter-pro、滤波系数选择Filter Coeff、限幅操作控制位Clip和移位操作控制位Shift等信息输入至插值运算单元910;重复访问第二级控制表904、第三级控制表907的表单元,直至第一访问计数器902、第二访问计数器905的计数值全部为零,完成插值运算全过程。
图10示出了本发明第二实施例提供的插值运算单元与两级控制表的逻辑结构示意图,现详述插值过程如下:
启动电路,由插值滤波器的类型、待插值数据块的大小以及运动向量的值计算第一级控制表101的表单元的入口索引地址IC-addr;根据入口索引地址IC-addr查找第一级控制表101的表单元中对应的内容,该内容包括:当前操作需要的阶段数StepNO.以及第二级控制表与当前滤波器类型和图像块尺寸对应的运动向量插值相应的全部第二表单元中阶段编号最小的表单元的入口地址ACTAB_BA;当StepNO.的值不为零时,以StepNO.的值初始化第一访问计数器102,当第一访问计数器102不为零时,以第一级控制表101的表单元中查找出的ACTAB_BA为起始地址,通过第一地址产生递加单元103递增索引到第二级控制表104的表单元中的表项内容,每访问一个第二表单元,第一计数器102的计数值减一,每个第二表单元的表项的内容包括:包括读取数据模式ReadMode,第一个读数据块序号ReadBLKa,第二个读数据块序号ReadBLKb,读数据块宽度信息ReadBLK Width,读数据块高度信息ReadBLK Height,写数据块序号WriteBLK,写数据块宽度信息WriteBLK Width,写数据块高度信息WriteBLK Height,数据块与实际起始地址在基地址寄存器记录基地址的偏移ReadBLKa(b)_Offset,存储空间的行宽ReadBLKa(b)_Stride,读取数据位宽ReadBLKa(b)_Bitwidth,写实际起始地址在基地址寄存器记录基地址的偏移WriteBLK_Offset,写数据位宽WriteBLK_Bitwidth;以及滤波操作控制位Filter-pro,滤波系数选择Filter_Coeff,预处理操作控制位Pre-pro,移位操作控制位Shift,限幅操作控制位Clip。将第二级控制表104的表单元的数据块与实际起始地址在基地址寄存器记录基地址的偏移ReadBLKa(b)_Offset输出给第二地址产生递加单元105,将写实际起始地址在基地址寄存器记录基地址的偏移WriteBLK_Offset输出给第三地址产生递加单元106,基地址寄存器107由4个读数据块基地址BLK0,BLK1,BLK2,BLK3构成,第二地址产生递加单元105将数据块与实际起始地址在基地址寄存器记录基地址的偏移ReadBLKa(b)_Offset与基地址寄存器107中的基地址求和,使用求和结果进行数据读取;插值运算单元109读取预处理操作控制位Pre-pro、滤波系数选择Filter_Coeff、限幅操作控制位Clip、移位操作控制位Shift等信息进行插值运算;第三地址产生递加单元106将写实际起始地址在基地址寄存器记录基地址的偏移WriteBLK_Offset与基地址寄存器107中的基地址求和,使用求和结果进行数据写出;重复以上访问第二级控制表的表单元,直至第一计数器102的计数值全部为零,完成插值运算全过程。
作为本发明的一个实施例,插值运算单元3采取10级流水线操作,如图11所示,P0~P9表示进入流水线进行处理的数据,在第一个时钟周期,读取第一个数据P0;第二个时钟周期,对数据P0做预处理,同时读取第二个数据P1;第三个时钟周期,对数据P0做四抽头滤波器0抽头处的滤波运算,同时对数据P1做预处理,并读取第三个数据P2;第四个时钟周期,对数据P0做四抽头滤波器1抽头处的滤波运算,同时对数据P1做四抽头滤波器0抽头处的滤波运算,对数据P2做预处理,并读取第四个数据P3;第五个时钟周期,对数据P0做四抽头滤波器2抽头处的滤波运算,同时对数据P1做四抽头滤波器1抽头处的滤波运算,对数据P2做四抽头滤波器0抽头处的滤波运算,对数据P3做预处理,并读取第五个数据P4;第六个时钟周期,对数据P0做四抽头滤波器3抽头处的滤波运算,同时对数据P1做四抽头滤波器2抽头处的滤波运算,对数据P2做四抽头滤波器1抽头处的滤波运算,对数据P3做四抽头滤波器0抽头处的滤波运算,对数据P4做预处理,并读取第六个数据P5;第七个时钟周期,对数据P0做凑整运算,同时对数据P1做四抽头滤波器3抽头处的滤波运算,对数据P2做四抽头滤波器2抽头处的滤波运算,对数据P3做四抽头滤波器1抽头处的滤波运算,对数据P4做四抽头滤波器0抽头处的滤波运算,对数据P5做预处理,并读取第七个数据P6;第八个时钟周期,对数据P0做移位运算,同时对数据P1做凑整运算,对数据P2做四抽头滤波器3抽头处的滤波运算,对数据P3做四抽头滤波器2抽头处的滤波运算,对数据P4做四抽头滤波器1抽头处的滤波运算,对数据P5做四抽头滤波器0抽头处的滤波运算,对数据P6做预处理,并读取第八个数据P7;第九个时钟周期,对数据P0做限幅运算,同时对数据P1做移位运算,对数据P2做凑整运算,对数据P3做四抽头滤波器3抽头处的滤波运算,对数据P4做四抽头滤波器2抽头处的滤波运算,对数据P5做四抽头滤波器1抽头处的滤波运算,对数据P6做四抽头滤波器0抽头处的滤波运算,对数据P7做预处理,并读取第九个数据p8;第十个时钟周期,完成一个插值结果,将数据P0的插值结果写出,同时对数据P1做限幅运算,对数据P2做移位运算,对数据P3做凑整运算,对数据P4做四抽头滤波器3抽头处的滤波运算,对数据P5做四抽头滤波器2抽头处的滤波运算,对数据P6做四抽头滤波器1抽头处的滤波运算,对数据P7做四抽头滤波器0抽头处的滤波运算,对数据P8做预处理,并读取第十个数据P9。每个时钟周期会有一个新的输入数据被读入,然后顺序的在下个周期被送入下级流水线单元,这样从第十个时钟周期开始,每一级流水线的运算单元都会进入工作状态,依次对输入的数据进行操作,直至第一访问计数器归零,完成当前阶段插值运算。
图12示出了本发明实施例提供的一种帧间预测方法实现流程,详述如下:
在步骤S121中,储存不同视频标准对应的控制表,并根据需要更新控制表中的信息;对不同的视频标准,控制表中的参数是一样的,只是参数的值发生了改变。根据使用的视频标准,将视频标准相关的信息放入控制表中。
在步骤S122中,查找控制表中相应的信息内容;
本发明实施例中,控制表可以为三级控制表,也可以为两级控制表。其中三级控制表包括第一级控制表,第二级控制表和第三级控制表,每级控制表又包括一系列表单元。三级控制表的表单元中具体的信息内容如表1所示。其中,第一级控制表的表单元大小为128′16bit,而第二级控制表和第三级控制表的表单元大小由视频标准决定。两级控制表包括第一级控制表和第二级控制表,每级控制表又包括一系列表单元,两级控制表的表单元中对应的具体的信息内容如表2所示。
在步骤S123中,根据查找到的信息内容进行插值运算。
本发明实施例中,以三级控制表为例,图13示出了根据查找三级控制表中的信息内容进行帧间预测插值运算的实现流程,现详述如下:
在步骤S131中,根据插值滤波器的类型Filter-type、待插值数据块的大小CB-size以及水平方向运动向量MVx、垂直方向运动向量MVy的值计算第一级控制表的入口索引地址IC-addr;具体程序为:
if(Filter-type=0)
IC-addr=‘CB-size[2:0]|MVy[1:0]|MVx[1:0]’;
else if(Filter-type=1)
IC-addr=‘1111|CB-size[2:0]’;
本发明实施例中,插值滤波器的类型可以为4抽头滤波器,也可以为8抽头滤波器。
作为本发明的一个实施例,待插值图像块的大小由不同的视频标准确定。对于H.264标准,待插值图像块的大小可以划分为16×16,16×8,8×16,8×8,8×4,4×8和4×4共7种模式。
在步骤S132中,根据索引地址IC-addr查找第一级控制表的表单元中对应的内容,该内容包括:第二级控制表与当前滤波器类型和图像块尺寸对应的运动向量插值相应的全部第二表单元中阶段编号最小的表单元的入口地址ACTAB_BA,当前滤波器类型和图像块尺寸对应的运动向量插值操作总共需要的阶段数StepNO.,例如第一阶段是水平方向滤波,第二阶段是用水平滤波结果进行垂直方向滤波,第三阶段是利用第一阶段和第二阶段的滤波结果运算得出最后插值结果,那么查表得到的StepNO.就等于3。
在步骤S 133中,判断当前插值操作总共需要的阶段数StepNO.(也就是在第二级控制表中需要依次访问的单元数)是否为零,若是,则结束,表示插值完成;若否,则进入步骤S134;
在步骤S134中,以StepNO.的值初始化第一访问计数器;
在步骤S135中,判断第一访问计数器是否为0,若是,则结束,完成插值运算;若否,则进入步骤S136;
在步骤S136中,第一访问计数器减1,以从第一级控制表中得到的ACTAB_BA为起始地址,递增以查找第二级控制表的表单元,增加量为每个第二表单元的大小,得到某一阶段插值运算时需要的所有固定控制信息;其中控制信息包括:读取数据在存储器中的起始地址Read_BA,写回数据在存储器中的起始地址Write_BA;滤波操作控制位Filter-pro,用于决定4抽头滤波操作是否要进行(Filter-pro=0表示在流水线中旁路掉这四级滤波操作);滤波系数选择Filter_Coeff,用于在存有滤波系数的配置寄存器中选择一个作为当前系数;预处理操作控制位Pre-pro,用于判断输入的数据是否需要在滤波之前做一些其它的运算(Pre-pro=0表示不需要,Pre-pro=1表示将6抽头的对称系数滤波器输入做运算变换成4抽头的,Pre-pro=2表示将8抽头的对称系数滤波器输入做运算变换成4抽头的);移位操作控制位Shift,用于指示滤波后处理移位位数及凑整操作(凑整操作在滤波结果上加上2(Shift-1),之后移位Shift位);限幅操作控制位Clip,用于表示限幅这一步是否需要;以及与当前滤波器类型和图像块尺寸对应的运动向量插值相应的全部第三表单元中时钟标号最小的表单元的入口地址地址AATAB_BA和需要依次访问的第三表单元的总数Counter。
在步骤S137中,从第二级控制表查表得出的各种信息被分别送到对应的流水线操作单元,完成硬件电路的选通或准备参与计算;
在步骤S138中,将当前阶段数据输入的起始地址Read_BA与当前周期数据输入地址偏移量Read Offset进行加法运算后,读数据基地址,产生读地址和读控制信号;
在步骤S139中,将当前阶段数据输出的起始地址Write_BA与当前周期数据输出地址偏移量Write Offset进行加法运算后,写数据基地址,产生写地址和写控制信号;
在步骤S140中,以Counter的值初始化第二访问计数器,第二访问计数器减1,以AATAB_BA为起始地址,递增访问第三级控制表中的第三表单元,递增的数量为每个第三表单元的大小,得出访问数据存储中读写地址偏移和读写控制信号;
在步骤S141中,判断第二访问计数器是否为零,若是,则返回到步骤S135,若否,则读数据偏移地址进入步骤S138,写数据偏移地址进入S139;
在步骤S142中,处理单元的各个流水线级电路根据得出的各种控制参数,结合根据读地址读入的数据,进行插值运算。
重复步骤S135至S142,直到第一访问计数器、第二访问计数器全部的值为零,完成插值过程。
两级控制表情况下的插值过程与三级控制表的过程类似,在此不再累述。
插值运算是在解码过程中,利用比特流中提取出来的运动向量信息,在参考帧中找到对应位置的预测块;当运动向量指向的位置不为整点像素时,利用插值,得出相应分数点位置的像素点值(包括1/2、1/4、甚至1/8精度点)构成的预测块。图14示出了基于H.264视频标准的不同运动向量MV对应的插值位置示意图。
本发明实施例中,以H.264视频标准为例,现详述在H.264视频标准下的插值运算过程:
在H.264视频标准下,亮度插值Filter_type=0与色度插值Filter_type=1不同,因此将亮度插值和色度插值分开处理。另外参考块大小有16x16,16x8,8x16,8x8,8x4,4x8,4x4共7种Block_size,可以表示为[2:0]=000,001,010,011,100,101,110。
先根据H.264视频标准和当前运动向量的位置对各种插值运算分类,亮度插值分为1/2精度像素点和1/4精度像素点。H.264视频标准对应的1/2像素亮度插值如图15所示,1/2精度像素点又分为下列三种情况:
(1)水平方向luma,half-pixel,horizontal direction
(2)垂直方向luma,half-pixel,vertical direction
(3)二维点luma,half-pixel,two-dimension这三种插值操作都包含了6抽头滤波,预处理以及后处理时的凑整、移位和限幅。抽头滤波的系数COR0=[20,20,-5,1]存于0号滤波系数寄存器中。表达式如下:
a′i=X-3,i-5X-2,i+20X-1,i+20X1,i-5X2,i+X3,i
=20X-1,i+20X1,i-5(X-2,i+X2,i)+(X-3,i+X3,i)
b′=X-1,-3-5X-1,-2+20X-1,-1+20X-1,1-5X-1,2+X-1,3
=20X-1,-1+20X1,1-5(X-1,-2+5X-1,2)+(X-1,-3+X-1,3)
c′=a′-3-5a′-2+20a′-1+20a′1-5a′2+a′3
=20a′-1+20a′1-5(a′-2+a′2)+(a′-3+a′3)
ai=CLIP((a′i+16)>>5)
其中,b=CLIP((b’+16)>>5)。在(1)和(2)情况下,查到第一级控制表对应
c=CLIP((c’+512)>>10)
的表项,找到StepNO.=1表示只需要一个阶段的操作就可以得到结果,以及相应的第二表单元的入口地址;接着查找第二级控制表第二表单元,可以查找到数据读写起始地址以及第三级表的入口地址,Filter-pro=1,Filter_Coeff=0,Pre-pro=1,shift=5(在整个H.264插值过程中,来自配置寄存器的Rounding都会被设置为零),Clip=1(移位的结果被限幅于[0,255]范围内),而Counter的值则是所需输入数据的总个数加上电路流水线的延迟周期数,这些参数都会被依次送到数据预处理单元,滤波单元,数据后处理单元以及流程控制逻辑。在(3)情况下,查找第一级控制表的表单元对应的表项,找到StepNO.=2表示需要两个阶段的操作可以得到结果,以及相应的第二表单元的入口地址;接着继续查找第二级控制表,连续的两个第二表单元对应了这种情况插值计算的第一阶段和第二阶段。第一阶段的第二表单元的内容除数据读写起始地址,该阶段对应的第三级表单元的入口地址,Counter,以及Shift=0,Clip=0外,其余几项与上面的情况相同;而第二阶段除地址和Counter信息外,Shift=10,Clip=1。Pre-pro=1,输入数据会首先进入数据预处理单元,完成如上述公式中列出的6抽头变4抽头需要的加法之后送入4级滤波单元,最后根据Shift和Clip的定义完成数据后处理。到了第三级控制表,地址的偏移会根据实际情况填写,硬件只要按照查到的值到指定地址取数或是写出就可以了。数据的宽度在上面的情况(1)和(2)中,所有的读写都是8-bit;而情况(3)的第一阶段所有的读为8-bit而写是16-bit,第二阶段则反过来所有的读为16-bit而写是8-bit。
基于H.264视频标准的1/4像素亮度插值如图16所示,1/4精度像素点又分为下列情况:
(4)luma,quarter-pixel,MV=(1,0)
(5)luma,quarter-pixel,MV=(3,0)
(6)luma,quarter-pixel,MV=(0,1)
(7)luma,quarter-pixel,MV=(0,3)
(8)luma,quarter-pixel,MV=(2,1)
(9)luma,quarter-pixel,MV=(2,3)
(10)luma,quarter-pixel,MV=(1,2)
(11)luma,quarter-pixel,MV=(3,2)
(12)luma,quarter-pixel,MV=(1,1)
(13)luma,quarter-pixel,MV=(3,1)
(14)luma,quarter-pixel,MV=(1,3)
(15)luma,quarter-pixel,MV=(3,3)
其中(4)(5)(6)(7)这四种情况在查找第一级控制表表单元时得到StepNO=2,之后索引到第二级表,连续的两个第二表单元对应了这种情况插值计算的第一阶段和第二阶段。第二级表的第一个表单元跟上述1/2精度插值时的(1)和(2)对应单元内容是相同的,在此不再赘述;而查找第二单元可以得到第二阶段的读写信息和Counter信息,以及Filter-pro=1,Filter_Coeff=1,Pre-pro=0,Shift=1,Clip=0,即在第一阶段进行1/2精度插值后,第二阶段会根据第三寄控制表提供的具体数据访问地址信息计算像素点a=(G+b+1)>>1,c=(H+b+1)>>1,d=(G+h+1)>>1,n=(M+h+1)>>1。(8)(9)(10)(11)这四种情况在查找第一级控制表时得到StepNO.=4。第一阶段与上述1/2精度插值(1)或(2)是同一种操作,在此不再赘述;而第二阶段和第三阶段与上述(3)是同一种操作;第四阶段则与(4)(5)(6)(7)的第二阶段类似,只是读写地址信息不同。像素点f=(b+j+1)>>1,q=(j+s+1)>>1,i=(h+j+1)>>1,k=(j+m+1)>>1。(12)(13)(14)(15)这四种情况在查找第一级控制表表单元时得到StepNO.=3表示总共需要三个阶段的操作。第一阶段与前面1/2精度插值(1)或(2)是同一种操作;第二阶段则刚好相反,与前面1/2精度插值(2)或(1)是同一种操作;第三阶段同样与(4)(5)(6)(7)的第二阶段类似,也只是读写地址信息不同,这些都能从第二级控制表和第三级控制表得出,最后在第三阶段得到像素点e=(b+h+1)>>1,g=(b+m+1)>>1,p=(h+s+1)>>1,r=(m+s+1)>>1。
H.264视频标准下的的色度插值是双线性插值,在查找第一级控制表时已被分类,Filter-type=1,IC-addr=‘1111|CB-size[2:0]’,并且支持的是1/8像素精度。继续查找第二级控制表以及第三级控制表,控制以下的操作过程。基于H.264视频标准的1/8像素色度插值如图17所示,这种双线性插值的滤波抽头系数由运动向量MV(x,y)计算得到,分别表示为[((8-x)*(8-y)),((8-x)*y),(x*(8-y)),(x*y)],插值计算公式如下:
p=((8-x)(8-y)?A1(8-x)创yA2+x(8-y)?B1xy?B232)>>6
其中,x,y={0L 7}。H.264视频标准下的滤波抽头系数包括:
F0=[20,20,-5,1]F1=[1,1,0,0]Bilinear F2=[((8-x)*(8-y)),((8-x)*y),((x*(8-y)),(x*y))]。
同理,对于其它视频标准的插值运算,都可以类似上面基于H.264视频标准的方法进行分类,分阶段的参数统计与设置,然后填入查找控制表中。一旦查找控制表设置好之后,所有的硬件电路运作过程就完全一致了。
本发明实施例在第一存储器中集成控制表,使用第二存储器来不断的更新第一存储器中存储的不同视频标准对应的控制表信息内容,采用流水线的设计结构,使得各个运算步骤可以同时执行,实现了很高的并行性以及硬件资源的复用,在提高速度的同时有效减少了硬件资源的占用;更重要的是参数由查表来配置,实现了具体视频标准和算法对硬件电路的透明化,各种插值操作的差异都体现在用第一存储器实现的表中,硬件电路做到了完全一致。对需要支持的插值方法,只要对其进行分析整理,在第一存储器的相应表项中填入正确的控制信息,在硬件电路完全不被改变的情况下,整个插值的过程就得以实现。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。