首页> 中国专利> 基于软硬件协同处理的MPEG多格式兼容解码方法及其装置

基于软硬件协同处理的MPEG多格式兼容解码方法及其装置

摘要

本发明公开了一种基于软硬件协同处理的MPEG多格式兼容解码方法及其装置,该装置包括:处理器、硬件加速器,处理器与硬件加速器之间的寄存器配置接口支持MPEG-1/2/4标准。硬件加速器包括:亚像素插值模块,用于对读入的参考宏块数据进行亚像素插值运算;离散余弦逆变换模块,用于对残差数据进行二维离散余弦反变换处理;运动补偿模块,用于由亚像素插值运算结果和处理后的残差数据重构成解码宏块;DMA控制器模块,用于计算参考块数据读取位置,并从参考帧中读取参考宏块数据,再将已经重构完成的宏块写入重建帧的相应位置地址中;本发明实现了MPEG多格式兼容解码。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-04-20

    专利权的转移 IPC(主分类):H04N7/26 登记生效日:20160401 变更前: 变更后: 申请日:20090814

    专利申请权、专利权的转移

  • 2012-02-29

    专利权的转移 IPC(主分类):H04N7/26 变更前: 变更后: 变更前: 变更后: 登记生效日:20120112 申请日:20090814

    专利申请权、专利权的转移

  • 2011-08-17

    授权

    授权

  • 2010-08-11

    实质审查的生效 IPC(主分类):H04N7/26 申请日:20090814

    实质审查的生效

  • 2010-06-09

    公开

    公开

说明书

技术领域

本发明涉及数字图像编解码技术,特别是涉及一种基于软硬件协同处理的MPEG多格式兼容解码方法及其装置。

背景技术

MPEG-1/2/4是国际标准化组织ISO/IEC制定的数字音视频压缩编码标准,目前,在通讯、计算机、消费电子领域获得广泛应用。MPEG-1/2/4的解码流程是一致的,包括反变换(如Inverse DCT)、反量化(Inverse Quantisation)、熵解码(变长解码(Variable Length Decoding))和运动补偿(MotionCompensation)等核心算法,现在以典型的MPEG-2为例介绍视频解码的流程,如图1所示。

按照软件和硬件实现的划分,视频解码的方法大致可以分为:完全用软件实现视频解码,完全用专用多媒体硬件实现视频解码和把解码的过程分为不同的部分,算法复杂、计算量大的部分用专门的硬件来完成,其他部分用软件完成,即软硬件协同的方法。下面对这些方法逐一分析。

1.完全用软件实现视频解码

完全利用基于通用处理器的软件进行大量视频处理中反复出现的算术运算操作,例如离散余弦反变换中大量的矩阵浮点乘法操作等,通用处理器对于视频处理的运算能力有限,通常无法满足标准或高清视频图像的实时解码要求。

2.完全用专用多媒体硬件实现视频解码

这种方法就是用硬件实现多媒体处理的所有算法。三菱Mitsubishi的高级电视解码器就是这种实现方式。这种方法的硬件实现成本高,验证需要花费大量的时间,更新速度慢。更重要的是没有权衡视频解码运算中哪些核心算法消耗了大部分的处理时间,完全用硬件实现视频解码,可能不必要的提高了芯片面积和运行时的功耗,不适用于这方面敏感的应用领域。同时解码的灵活性也很差,当需要支持更多的功能和格式时需要修改硬件电路。

3.软硬件协同处理的方法

这种方法是把解码的过程分为不同的部分,算法复杂、计算量大的部分用专门的硬件来完成,由软件实现灵活性高、计算量相对简单的算法,处理器和专门的硬件之间采用某种标准的接口保证软硬件的交互。

发明内容

本发明所要解决的技术问题在于提供一种基于软硬件协同处理的MPEG多格式兼容解码方法及其装置,用于解决现有技术无法满足在较低的工作频率下实现标清编码视频码流的实时解码显示,同时在相同解码效率下降低芯片面积和功耗的问题。

为了实现上述目的,本发明提供了一种基于软硬件协同处理的MPEG多格式兼容解码方法,用于通过处理器与硬件加速器实现MPEG多格式兼容解码,其特征在于,该方法包括:

步骤一,设置处理器与硬件加速器之间的寄存器配置接口均支持MPEG-1/2/4标准;

步骤二,根据运动矢量类型,对读入的参考宏块数据进行亚像素插值运算,获取亚像素插值运算结果,并对残差数据进行二维离散余弦反变换处理,获取处理后的残差数据;

步骤三,根据宏块的类型,由所述亚像素插值运算结果和所述处理后的残差数据重构成解码宏块;

步骤四,根据当前处理宏块的坐标、运动矢量、宏块类型、参考帧位置信息,计算参考宏块数据的读取位置,并从参考帧中读取参考宏块数据,再将已经重构完成的解码宏块写入重建帧的相应位置地址中。

所述的MPEG多格式兼容解码方法,其中,所述步骤一中,进一步包括:通过以下方式实现所述处理器与所述硬件加速器之间数据交互的步骤:

由AHB总线上的从设备接收来自总线的读写请求,配置内部运动补偿信息相关的寄存器和IDCT系数寄存器,启动所述硬件加速器进行图像解码处理的计算。

所述的MPEG多格式兼容解码方法,其中,所述步骤一中,进一步包括:

由所述处理器采用支持全局Reset清零的存储器结构配置所述IDCT系数寄存器,并将64×16位的存储器和64个1位的寄存器作为每个系数非零的标志位,并在每次写入时只写入存储器非零的DCT系数和设置1位的IDCT系数寄存器为1,其他系数默认为零。

所述的MPEG多格式兼容解码方法,其中,所述步骤二中,进一步包括:

采用双向循环处理双向参考宏块得到所述亚像素插值运算结果的步骤,具体为:

将前向参考宏块的半像素插值的结果写入缓存中,循环进行后向参考宏块的插值处理,读取所述缓存中前向参考宏块的插值结果,经过均值操作得到所述亚像素插值运算结果。

所述的MPEG多格式兼容解码方法,其中,所述步骤二中,所述二维离散余弦反变换处理的步骤具体为:

采用一个一维IDCT变换运算单元和一个转置RAM使各个块的IDCT变换之间串行运算;或采用两个一维IDCT变换运算单元和两个转置RAM使各个块的IDCT变换之间流水操作;或采用两个一维IDCT变换运算单元和一个转置RAM使各个块的IDCT变换之间流水操作。

所述的MPEG多格式兼容解码方法,其中,所述步骤四中,进一步包括:

与所述处理器通过共享显存进行交互,根据所述硬件加速器内部寄存器的值计算参考宏块/块的地址,从存储在共享显存的参考帧中读取运动矢量所指向的宏块/块,经过计算后得到重建宏块的值,并将所述已经重构完成的解码宏块写入重建帧的相应位置地址中。

为了实现上述目的,本发明还提供了一种基于软硬件协同处理的MPEG多格式兼容解码装置,包括处理器器、硬件加速器,所述处理器与所述硬件加速器共同实现MPEG多格式兼容解码,其特征在于,所述硬件加速器包括:

亚像素插值模块,用于根据运动矢量类型,对读入的参考宏块数据进行亚像素插值运算,获取亚像素插值运算结果;

离散余弦逆变换模块,用于对残差数据进行二维离散余弦反变换处理,获取处理后的残差数据;

运动补偿模块,连接所述亚像素插值模块、所述离散余弦逆变换模块,用于根据宏块的类型,由所述亚像素插值运算结果和所述处理后的残差数据重构成解码宏块;

DMA控制器模块,连接所述运动补偿模块,用于根据当前处理宏块的坐标、运动矢量、宏块类型、参考帧位置信息,计算参考宏块数据的读取位置,并从参考帧中读取参考宏块数据,再将已经重构完成的宏块写入重建帧的相应位置地址中;

所述处理器与所述硬件加速器之间的寄存器配置接口支持MPEG-1/2/4标准。

所述的MPEG多格式兼容解码装置,其中,所述处理器与所述硬件加速器之间通过以下方式之一进行数据交互:

由AHB总线上的从设备接收来自总线的读写请求,配置内部运动补偿信息相关的寄存器和IDCT系数寄存器,启动所述硬件加速器进行图像解码处理的计算;或

与所述处理器通过共享显存进行交互,根据所述硬件加速器内部寄存器的值计算参考宏块/块的地址,从存储在共享显存的参考帧中读取运动矢量所指向的宏块/块,经过计算后得到重建宏块的值,并将所述已经重构完成的解码宏块写入重建帧的相应位置地址中。

所述的MPEG多格式兼容解码装置,其中,所述处理器采用支持全局Reset清零的存储器结构配置所述IDCT系数寄存器,并将64×16位的存储器和64个1位的寄存器作为每个系数非零的标志位,并在每次写入时只写入存储器非零的DCT系数和设置1位的IDCT系数寄存器为1,其他系数默认为零。

所述的MPEG多格式兼容解码装置,其中,所述亚像素插值模块采用双向循环处理双向参考宏块,将前向参考宏块的半像素插值的结果写入缓存中,循环进行后向参考宏块的插值处理,读取所述缓存中前向参考宏块的插值结果,经过均值操作得到所述亚像素插值运算结果。

所述的MPEG多格式兼容解码装置,其中,所述离散余弦逆变换模块采用一个一维IDCT变换运算单元和一个转置RAM使各个块的IDCT变换之间串行运算;或采用两个一维IDCT变换运算单元和两个转置RAM使各个块的IDCT变换之间流水操作;或采用两个一维IDCT变换运算单元和一个转置RAM使各个块的IDCT变换之间流水操作。

本发明的有益技术效果在于:

相比于已有的视频解码的运算单元全部用专用硬件设计实现的软硬件协同控制的方法,本发明评测了应用软件进行视频解码过程中各个核心运算消耗的时间比例,确定了对于占用解码过程中绝大部分时间的核心算法包括亚像素插值、运动补偿、离散余弦逆变换和直接访存操作(Direct Memory Access,DMA)用专用硬件加速,并且同时支持MPEG多格式的软硬件协同处理设计方案,在满足相同解码效率的情况下,大大减小了芯片面积和功耗。

以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。

附图说明

图1是以现有典型的MPEG-2为例描述视频解码的流程图;

图2是本发明解码过程的软硬件结构图;

图3是本发明硬件加速器的结构框图;

图4是本发明亚像素插值模块和运动补偿模块的数据通路示意图;

图5是本发明亚像素插值模块的运算单元的结构图;

图6是本发明各个块的IDCT变换之间串行操作的设计原理图;

图7是本发明用两个转置RAM实现IDCT变换之间流水操作的设计原理图;

图8是本发明用一个转置RAM实现IDCT变换之间流水操作的设计原理图;

图9是本发明一维IDCT变换的数据通路示意图;

图10是本发明解码一个宏块的基本工作流程图。

具体实施方式

下面结合附图和具体实施方式对本发明的技术方案作进一步更详细的描述。

本发明软硬件划分的依据是通过综合分析应用软件在解码的各个功能所花费的时间,相比于已有的视频解码的运算单元全部用专用硬件设计实现的软硬件协同控制方法,更大限度地挖掘系统软硬件之间的并发性,寻求降低芯片面积及功耗和提高系统性能和同时支持多格式之间的最佳权衡。

如图1所示,是现有技术的解码结构示意图,以MPEG-2为例,已在背景技术中描述,此处不再赘述。本发明提出一种基于软硬件协同处理的MPEG-1/2/4多格式兼容解码方法,在该方法的解码过程中算法复杂、计算量大的部分用专门的硬件来完成,而灵活性高、计算量相对简单的算法则由软件实现,处理器和专门的硬件之间采用某种标准的接口保证软硬件的交互。

如图2所示,是本发明解码过程的软硬件结构图。在图2中,描述了处理器CPU 10和硬件加速器20之间的交互,并结合图3。

软硬件协同处理进行视频解码的效率很大程度上取决于软硬件交互机制的效率。本发明中CPU 10和硬件加速器20之间通过如下两种方式进行数据交互:

第一种方式,CPU 10是作为AHB总线(32位系统总线)上的从设备,接收来自32位系统总线的读写请求,配置内部运动补偿信息相关的寄存器和IDCT系数寄存器,启动硬件加速器20进行图像解码处理的计算。

第二种方式,硬件加速器20与CPU 10通过共享显存进行交互,硬件加速器20中的DMAC模块34负责根据硬件加速器20的内部寄存器的值计算参考宏块/块的地址,从存储在共享显存的参考帧中读取运动矢量所指向的宏块/块,在其他模块进行一系列计算后得到重建宏块的值,并将已经完成重建的宏块写入重建帧的相应位置地址中,通过直接读取主存的显示设备就可以直接读取解码数据用于显示输出。

如图3所示,是本发明硬件加速器的结构框图。该硬件加速器20是专用的硬件加速器,包括:亚像素插值模块31、运动补偿模块32、离散余弦逆变换(IDCT)模块33、DMAC模块34和软硬件接口35。解码的其他部分由运行在CPU 10上的应用软件实现,包括码流解析、VLD、RLD、Inverse scan、AC-DC un-prediction和MVD等功能模块。其中Inverse scan可以是InverseZig-Zag scan。

亚像素插值模块31,用于根据运动矢量类型,对读入的参考宏块数据进行亚像素插值运算。

运动补偿模块32,用于根据宏块的类型,由亚像素插值模块31得到的亚像素插值运算结果和经过IDCT模块33变换后的残差数据重构解码宏块。

IDCT模块33,用于对参差数据进行二维离散余弦反变换,并将变换后的残差数据发送给运动补偿模块32。

DMAC模块34,用于根据当前处理宏块的坐标、运动矢量、宏块类型、参考帧位置信息,计算参考宏块数据的读取位置,并从参考帧中读取参考宏块数据。在一系列计算后将已经重建完成的解码宏块写入重建帧的相应位置地址中。

软硬件接口35,是CPU 10与硬件加速器20之间的寄存器配置接口,该接口同时支持MPEG-1/2/4标准,各个协议的算法不是完全相同的,而且要支持的算法本身就很复杂,尤其是运动补偿算法。主要包括IDCT相关的寄存器、运动补偿运算相关的寄存器和硬件加速器20的控制寄存器等。

在图3中,外部处理器通过CPU寄存器配置接口设置硬件加速器20的工作模式、读取硬件加速器20的工作状态、传递解码参数;IDCT模块33(IDCT Unit模块)实现块的离散余弦变换运算;运动补偿模块32(MC Unit模块)实现宏块级的运动补偿运算,运动补偿所需的参考数据由DMAC模块34读入,另外,运动补偿模块32进行运动补偿完成后得到的重建数据也由DMAC模块34写出。解码的其他部分由运行在CPU 10上的应用软件实现,包括码流解析,VLD、RLD、Inverse scan、AC-DC un-prediction和MVD等功能。其中软件的码流解析过程完成对视频码流序列层,图像组层、图像层和宏块层的解析,同时得到块层的离散余弦变换系数等信息。

下面对硬件加速器20的各模块进行说明如下:

软硬件接口35:CPU 10和专门的硬件之间需要采用某种标准的接口保证软硬件的交互,软硬件接口,即CPU 10与硬件加速器20的寄存器配置接口,就是同时支持MPEG-1/2/4标准,各个协议的算法不是完全相同的,而且要支持的算法本身就很复杂,尤其是运动补偿算法。配置寄存器设置如下:

1)与IDCT变换相关的寄存器配置:从IDCT变换得知,只需要知道每个8×8的IDCT块的64个IDCT系数即可。CPU 10接口在配置IDCT系数寄存器时,采用了支持全局Reset清零的存储器结构,包括64×16位的存储器和64个1位的寄存器作为每个系数非零的标志位。IDCT系数共有64个,如果采用寄存器设计,每个块的IDCT运算结束后都要清零则会导致所有64个寄存器增大了功耗。而单独使用存储器实现虽然节省了芯片面积却需要同时写入为零的系数消耗了不必要的总线带宽和CPU 10的访存时间。本发明中每次只需要写入存储器非零的DCT系数和设置1位的IDCT寄存器为1,其他系数默认为零,从而大大减少了和CPU 10的交互,实现了节省芯片面积和低功耗两个设计目标之间的权衡。

2)运动补偿算法相关的寄存器配置:

(1)选择预测方向和参考帧(MPEG-1/2/4);

(2)帧缓存管理(MPEG-1/2/4);

(3)预测模式的选择,针对MPEG-1/2/4标准可采用不同的预测模式,MPEG-1只支持帧预测模式,MPEG-2支持帧预测模式和场预测模式,MPEG-4不光支持帧预测模式和场预测模式,还支持4mv预测模式。所以设置接口时需要考虑到此点针对不同的标准有所区别。

(4)参考宏块位置的计算,针对MPEG-1/2/4标准采用的预测模式不同,有不同的计算方法。帧预测模式只需要一个运动向量;场预测模式需要两个运动向量;而4mv预测模式则需要4个运动向量。考虑到双向预测的情况,至少需要设置8个运动向量,才能满足MPEG-1/2/4标准3种预测模式的需要。

(5)亚像素插值,对于MPEG-1/2/4标准采用的预测模式不同,亚像素插值时像素位置的计算不同,这个信息需要通过解析运动向量得到。

(6)残差合并,帧预测模式和4mv预测模式采用帧合并模式,而场预测模式采用场合并模式,所以需要设置一个寄存器接口标识合并模式。

3)硬件加速器20的控制:控制寄存器和状态寄存器。

亚像素插值模块31:实现插值算法时采用了5级流水的结构:寄存当前行数据,寄存前一行数据,插值公式,双向插值平均值计算,写回Buffer。通过流水线的设计方法,使得在进行插值运算时能够达到比较高的吞吐量,相比没有流水线的设计可以大大节约计算的时间。

亚像素插值模块31在实现时能同时处理16个像素,在处理U/V块时锁定一半的数据通路,即图4中的虚线框部分的数据通路。通过这样的设计在流水操作时每个周期都能得到一行的插值计算结果。如果考虑节省运算单元,也可以采取同时处理8个像素的设计方案。

亚像素插值模块31在处理双向参考模块时,采用双向循环处理,前向参考宏块半像素插值的结果写入INTP Buffer 43中,循环进行后向宏块的插值处理,读取输出Buffer 43中前向插值的结果,经过均值操作得到最终的预测结果。

本发明把解码的处理过程进行软硬件划分,通过综合分析应用软件在解码的各个功能所花费的时间,寻求降低芯片面积及功耗和提高系统性能和同时支持多格式之间的最佳权衡。算法复杂、计算量大的部分用专门的硬件来完成,由软件实现灵活性高、计算量相对简单的算法。相比于已有的软硬件协同控制,视频解码的运算单元全部用专用硬件设计实现的方法,在相同解码效率下,大大降低了芯片面积和功耗。

如图4所示,是本发明的亚像素插值模块31和运动补偿模块32的数据通路示意图。

亚像素插值模块31在实现时能同时处理16个像素的X,Y或XY方向插值,是利用图4中的亚像素插值模块31的PE0~PE15运算单元41实现的,在流水操作时每个周期都能得到一行的插值计算结果。在处理U/V块时锁定一半的数据通路,即图4中虚线框内的亚像素插值模块31的PE0~PE15运算单元41。如果考虑节省亚像素插值模块31的PE0~PE15运算单元41,也可以采取同时处理8个像素的设计方案。如图4所示,通过DMA读入数据接口42读取的参考宏块数据在经过亚像素插值模块31的PE0~PE15运算单元41的插值运算之后,结果存入亚像素插值模块31的输出Buffer 43中,当宏块采用双向运动补偿模式时,后向参考宏块插值结果得出之后,还要读取亚像素插值模块31的输出Buffer 43中的前向参考宏块插值结果,通过AVG0~AVG15运算单元45进行平均操作之后,得到最终的双向预测结果,并存入亚像素插值模块31的输出Buffer 43中。

如图5所示,描述了亚像素插值模块31的运算单元PE0~PE15的典型结构,由于17×17的块和17×9的块一行有17个像素,而9×9的块和9×5的块一行有9个像素,要进行插值运算时,需要考虑到相邻像素之间的可能需要进行插值运算,所以对于17×17的块和17×9的块一行17个像素需要全部存储于17个寄存器中,然后同时进行X方向的插值运算;对于9×9的块和9×5的块一行9个像素需要全部存储在9个寄存器中,然后同时进行X方向的插值运算。当前行的像素存储在图5中的DATA_REG0中。进行Y方向的插值运算就需要存储相邻行的数据,即图5中的SAVE_REG0,然后对两行的相对应数据进行插值运算。插值的结果保存在INTP_REG0中。图5中每一个小的加法单元A1~A4与传统的加法单元稍有不同,传统的进位和加和的高7位相拼接,产生一个8位的输出,而加和的末位作为进位输出。加法单元A1、A2和A3的符号位输入均为对rounding_ctrl位(MPEG协议中亚像素插值的取整控制位)取反,而加法单元A4的符号位输入则由以下公式计算:

A4.sign=(rounding_ctrl&&(A1.ADD[0]‖A2.ADD[0]))‖

(~rounding_ctrl&&(A1.ADD[0]‖A2.ADD[0]))。

运动补偿模块32:主要是将IDCT模块33运算的结果和亚像素插值模块31进行插值运算的结果进行相应像素的相加,得到一个合成值,经过饱和运算,即图4中运动补偿模块32数据通路中的加法运算单元47,最后结果通过DMA输出数据接口44写入外部存储器。

使用相同的数据通路实现MPEG-1/2/4运动补偿算法的兼容。

IDCT的内部Buffer的组织形式和插值运算内部Buffer的组织形式一样,只需要计算一个读内存地址就可以同时读取两个Buffer相应的数据。当解码图像是I帧时,编码时没有进行预测编码,解码时不需要考虑运动补偿,所以残差的结果直接等于IDCT的结果。但是因为IDCT的结果有时候是负数,所以在这种情况下,IDCT的结果如果是负数,则令其等于0。当解码图像不是I帧时,编码时需要进行预测编码,但是有的块的IDCT系数都是0,所以这样的块不需要进行IDCT变换,残差合成的结果只需要等于插值Buffer的值即可。也有的块不但需要进行预测编码,而且其IDCT系数不都是0,这样的块需要进行IDCT变换,对于这样的块,残差合成的结果需要插值Buffer的数据和IDCT Buffer的数据进行相应位置的相加之和。相加的和还需要进行饱和运算,因为两个像素的值如果都是正数,它们的和有可能超过255,这时,残差合成的值就等于255;如果IDCT Buffer的值是负数,并且它们的和也是负数时,残差合成的值就等于0;否则就等于两个数相加的结果。

IDCT模块33:进行的流水线设计如下:

IDCT变换可以转换成第一个一维IDCT变换计算,第二个一维IDCT变换计算两步计算,即对一个块的二维IDCT变换可以转换成一维列变换和一维行变换两步计算。第二次IDCT变换计算之前需要得到Y一行的数据,但是第一次IDCT变换按列进行,结果也是按列计算出,因此第二次IDCT变换之前需要将第一次IDCT变换的结果存储在一个转置RAM中,以供第二次IDCT变换使用。

为了缩减运算单元,可以采用如图6所示的设计方案,该方案给出了各个块的IDCT变换之间串行操作的设计原理。使用一个一维IDCT变换运算单元和一个转置RAM使各个块的IDCT变换之间串行运算,第一个块的第一个一维IDCT计算完成时,Y矩阵的结果存储于转置RAM中,继续做第二个一维IDCT。第一个块的二维IDCT运算结束后,通知CPU 10配置第二个块的IDCT系数,并且开始第二个块的第一个一维IDCT变换。

解码一个宏块最多需要计算6个IDCT块,所以采用IDCT块流水解码的实现方法可以大大加快IDCT解码的速度。

如图8所示,是本发明用两个转置RAM实现IDCT变换之间流水操作的设计原理图。该图描述了第二种设计方案可以增加运算和存储单元,采用两个一维IDCT单元和两个转置RAM。其中一个转置RAM用来存储前一个一维IDCT单元进行一维IDCT变换产生的结果,另一个转置RAM用来提供后一个一维IDCT单元进行一维IDCT变换所需的数据。第一个块的第一个一维IDCT变换完成时,Y矩阵的结果存储于第一个转置RAM中,接着可以继续做第二个一维IDCT变换。同时通知CPU 10配置第二个块的IDCT变换系数,并且进行第二个块的第一个一维IDCT变换,Y矩阵的结果存储于第二个转置RAM中。当第一个块的第二个一维IDCT变换完成之后就可以从第二个转置RAM中读取Y矩阵计算第二个块的第二个一维IDCT变换。

进一步地,第一个一维IDCT变换完成之后,第二个一维IDCT变换开始工作,同时CPU 10才开始配置下一个块的IDCT变换系数,配置完之后才开始做第一个一维IDCT变换。这中间有足够多的时间差,可以使第一个块的第二个一维IDCT读完一行或者一列之后,下一个块的一维IDCT才会修改那个行或者列的数据。所以采用一个转置RAM就可以达到流水的目的,如图7所示,该图描述的最终方案是在实现IDCT块流水解码的同时只需要使用一个转置RAM通过特定设计的行列读写顺序就实现了两个块的流水操作。由于第二个一维IDCT变换公式,需要对第一个一维IDCT变换的计算结果进行转置,因此在实现转置RAM时采取了一种行列交叉存取的方式。即第一个块的第一个一维IDCT系数存储时按照行的方式存储,那么第一个块的第二个一维IDCT就需要按照列的方式读取;而第二个块的第一个一维IDCT系数存储时按照列的方式存储,那么第二个块的第二个一维IDCT变换按照行的方式读。这样一种行列交叉的方式完全避免了下一个块的结果覆盖上一个块的结果的可能性。

如图9所示,是本发明一维IDCT变换的数据通路示意图。在设计一维IDCT变换数据通路时,IDCT变换矩阵中有8个不同的系数C0~C7,需要为这些系数设计乘法器。由于系数矩阵是一个常数矩阵,所以存在如下两种:

第一种方案,是将这些矩阵存储在ROM中,直接通过查表的方式读取系数值。这种方法的优点在于可以通过设计ROM字长的方式方便地控制计算精度,同时,电路设计简捷,控制逻辑简单,速度快。但是这种方法对于需要精度高,而且输入数据增大时,就需要更大的ROM存储这些数据,导致乘法器面积变得很大。

第二种方案,是将这些常数都表示成二进制补码的形式,然后用移位加法实现乘法,通过提取7个系数中的公共部分,可以使得每个乘法器都可以在2个周期内得到结果,每个周期读入一个DCT系数Zi(i=0,7),每个系数要和所有的乘法器运算得到结果,由8个多选器MUX根据系数矩阵中的对应系数值选择将哪个乘法器的结果存入各自的8个累加器ACC0~ACC7。一维IDCT变换的数据通路使用8个多选器,8个累加器,在8个周期后,8个累加器可以得到8个结果Y0~Y7,然后且由并转串逐次输出。

DMAC模块34:用于负责根据硬件加速器20的内部寄存器的值计算参考宏块/块的地址,从存储在共享显存的参考帧中读取运动矢量所指向的宏块/块,在其他模块进行一系列计算后得到重建宏块的值,并将已经完成重建的宏块写入重建帧的相应位置地址中。

硬件加速器20的内部设置专用的DMAC模块34,相比于使用SoC内部的DMAC的实现,有效避免了数据不必要的搬移,参考数据不需要先被读取到SoC内部的DMAC的Buffer(缓冲区)中再被搬移到硬件加速器20内部的Buffer中。本发明内部专用的DMAC模块34直接向系统的Mem-bus发出读写操作的请求进行参考数据的读操作和重建宏块的写操作。

如图10所示,是本发明解码一个宏块的基本工作流程图,该流程图描述了基于软硬件协同处理视频解码的基本工作流程。

步骤S1001,运行在CPU 10上的应用软件解码,通过码流解析,VLD、RLD、Inverse scan、AC-DC un-prediction和MVD等处理过程得到硬件加速器20的配置寄存器需要的参数的值,包括视频的格式信息、残差数据和运动补偿的参数信息等。

步骤S1002,CPU 10配置硬件加速器20的参数寄存器,包括IDCT变换相关的寄存器和运动补偿算法相关的寄存器。

步骤S1003,CPU 10配置控制寄存器中的运动补偿使能位为1。该使能位为1之后,如果当前帧是I帧,则硬件加速器20等待配置IDCT系数和IDCT变换使能位,否则,硬件加速器20的插值部分,即亚像素插值模块31进行插值运算。

步骤S1004,如果cbp参数的值非0,CPU 10配置一个块的IDCT系数寄存器。

步骤S1005,CPU 10配置完IDCT系数寄存器之后,配置控制寄存器中IDCT变换使能位为1。该使能位为1之后,硬件加速器20的IDCT模块33进行运算。

步骤S1006,IDCT模块33完成IDCT变换时,需要判断cbp参数有几位非0,就需要做几个块的IDCT变换,所以CPU 10就需要判断IDCT是否完成然后重新配置IDCT系数,需要做几个块的IDCT变换就需要配置几次IDCT系数和IDCT变换使能位。

步骤S1007,当所有的IDCT变换完成,运动补偿也完成之后,CPU 10由中断或轮询状态寄存器的方式判断硬件加速器20这个宏块的运算是否完成。如果完成,则继续配置下一个宏块的信息。

本发明的显示策略如下:

共享显存的实现方式,帧缓存和主存物理上是同一块内存,这种存储方式方便了可以直接读取主存的显示设备,不需要通过PCI从专用的显存地址搬移数据到主存中。为了实现IBBPBBP类型的帧显示,设置4个帧缓存根据特定的轮换算法实现参考帧、显示帧和中间帧的轮换。

本发明针对访存策略做了如下优化:

亮度分量将垂直方向上每四个像素作为一个字,然后按照水平方向每四行像素为一组连续的存储在内存中。按照字水平存储方法,对于16×16的块,只需要以垂直方向的四列像素采用一个16burst的传输类型,也就是只需要发起4次16burst传输。同样,对于8×8的块,只需要发起4次8burst传输。色度分量将U块和V块合并起来存储,每一个U块后面存储一个V块。读写U块和V块时,以前需要分别读写两个8×8的块,现在只需要读写一个8×16的块即可。采用U块和V块合并的方法,访存时只需要发起8次4beat burst传输,可以节约访存时间。减少有效访存次数,对于参考宏块需要进行插值运算,但是X方向或者Y方向不需要进行插值的情况,可以不需要多读取一行或者一列,即都对Y块读一个17×17的块,而是根据是否需要插值分为读取17×17、17×16、16×17、16×16等大小的块。

本发明硬件加速器20的某一个功能完成需要CPU 10再次参与的交互策略有中断和轮询两种方式。CPU 10配置运动补偿信息相关的一系列寄存器后,设置硬件加速器20内部控制寄存器的运动补偿使能位为1,驱动硬件加速器20进行MC的操作。在使能运动补偿之后,设置内部的block计数器为0,之后每收到一个IDCT操作开始信号,就将counter加1,当它等于cbp参数中1的个数(对于non-intra宏块,由于可能不会发送所有6个块的数据给硬件加速器20,所以要根据cbp参数中1的个数来确定当前一共需要发送几个block)时,就知道所有块的数据都接收到了。本发明为了判断是否已完成一个块的IDCT操作和一个宏块的所有操作,提供了IDCT变换结束标志位和宏块运算结束标志位参数。这两个参数分别放在两个寄存器中。CPU 10通过轮询相应的寄存器判断该操作是否完成。同时这两个操作完成时也会发出相应的中断信号,当CPU 10在中断模式工作时可以使用。

本发明提出了一种基于软硬件协同处理的MPEG-1/2/4多格式兼容解码方法,把解码的过程根据计算和数据量进行软硬件划分,算法复杂、计算量大的部分用专门的硬件来完成,由软件实现灵活性高、计算量相对简单的算法,处理器和专门的硬件之间采用某种标准的接口保证软硬件的交互。可在较低的工作频率下实现标清编码视频码流的实时解码显示,在相同解码效率下,大大降低了芯片面积和功耗。

当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号