嵌入式设备上视频解码过程中数据读取方法及装置
技术领域
本发明涉及视频解码技术,具体是指一种嵌入式设备上视频解码过程中数据读取方法及装置。
背景技术
对于嵌入式视频解码芯片,都是采用SDRAM或者DDR存储器作为内存,进行大数据量的存储,但是SDRAM和DDR的时序本身就决定了在该器件上的数据访问,每次数据传输开始都需要固定的消耗几个时钟周期tRCD用于稳定存储数据行的选取和稳定。
SDRAM时序如图1和图2所示,在开始传输行选取稳定后在该行内连续存取都能够达到每个时钟周期一个数据单位数据的传输。假设每次行选取和稳定需要6个时钟周期,SDRAM的频率为133MHz,那么如果每次传输只读取一个数据单位,那么每秒时间内只能读取到133*1000000/(6+1)及19M的单位数据。如果每次传输连续读取8个单位数据在一秒钟的时间内就可以读取133*1000000/(6+8)*8及76M的单位数据。所以每次数据传输过程中连续传输数据量的大小直接会影响该次传输的时钟利用的效率,及数据带宽的使用率。单次读写的数据量越小,数据带宽的利用率就会越低,连续读取的数据量越大,数据带宽的利用率就越高。
为缓解这种存储器本身行为对数据带宽利用率的影响,只有通过提高每次数据存取的数据量来提高存储器带宽的利用率。视频解码时,以宏块为单位的解码时大多需要在解码的时候从已经解码好的数据中获取一块于当前宏块数据匹配的二维数据矩阵作为当前宏块的匹配数据。这样的操作需要的数据量大,需要占用很大的数据带宽。
在现有的嵌入式设备视频解码领域中主要有三种运动匹配数据获取的方式。
第一种是采用CPU的cache机制在使用数据的时候,由cache相关的硬件模块提前读取到高速数据缓存,供解码使用。这种方式虽然cache硬件模块可以较高效率的读取数据,但由于硬件不能预知需要读取数据的大小,因此在读取的时候实际会读入很多无效数据,从而是实际数据消耗量增大不少,影响带宽的利用率,这种方式在通用嵌入式CPU如ARM和MIPS上的应用较多。这种方式靠CPU所带的硬件cache机制进行存取由于效率低下的问题,只能解码一些较小分辨率的视频文件。
第二种方式是将当前解码宏块需要的数据通过DMA等高效设备读入到内部供解码使用。这种方式可以在内部使用一块较小的高速RAM存放读取进来的需要使用的数据进行告诉处理,但是通常都会有重复读取的部分,影响实际效率,而且每个宏块读取,开始读取的次数会很多,导致这种SDRAM或DDR的页面选取消耗的时钟也多起来,从而降低了数据的读取时的时钟利用效率,及带宽的效率,这种方式一般在DSP系统或者硬件解码系统上比较常见。这种方式资源消耗较少,但是效率还是不够高,对数据的利用率还是比较低的。
第三种方式是使用很大的cache空间来直接预先读取很多个宏块,甚至一个宏块行的数据,这样可以减少很多重复需要的数据,而且单次读取的数据量也很大,所以读取的效率很高。但是由于预先不知道实际需要的数据,所以,在运动比较负责的场景下,很多数据不再欲取数据范围内的时候,需要单独从外面取一些,这样也存在着数据浪费的问题,这种方式最适合的是静态或者左右缓慢移动镜头的场景,比较有限,而且需要开销很大的cache空间,而RAM在芯片内的成本很高,高速RAM的功耗也很大,所以在成本要求严格的嵌入式系统中,不太适合使用。这种方式很少有使用,在一些不太计较成本和功耗,如电视机等平台上有一些使用这种方案的硬件设计。
发明内容
本发明所要解决的技术问题在于提供一种高效的视频解码过程中数据读取方法及装置,可以使得解码时候的数据带宽利用率提升,来实现相同资源条件下更好的视频解码表现。
本发明采用以下技术方案解决上述技术问题:
本发明提供一种嵌入式设备上视频解码过程中数据读取方法,包括如下步骤:
步骤一:设置一个宽度和高度都为零的二维矩阵框,并记录下最小的横向纵向坐标值和最大的横向纵向坐标值信息,并根据内部空间情况设置二维矩阵框最大能够读取的数据值,和最多读取块数据个数;
步骤二:加入一个需要读取的二维数据,通过需读取数据MV信息和需要读取数据的大小对前面设置的二维矩阵框进行大小调整,及通过与记录的坐标信息进行比较,调整该信息,使得需要读取的数据落到这个二维矩阵框内;
步骤三:对调整后的数据框内数据量的大小和利用率进行判断,如果超过设置的空间界限,或利用率太低即加入后实际需要读取需要占用更加多的时间,则还原此次的大小调整并转到步骤六,否,则转到步骤四;
步骤四:判断读取到的数据块数目是否达到限定的最大值,如果是,转到步骤六,否,则转到步骤五;
步骤五:判断是否还有数据需要读取,如果有,则转到步骤二,如果没有,转到步骤六;
步骤六:按照确定下来的二维数据框的信息,到外部读取匹配数据到内部存储空间,并对可以从数据框内读取到数据的的块信息进行调整,使其都转向内部空间进行读取需要的数据;
步骤七:根据调整后的信息进行继续解码。
本发明还提供一种嵌入式设备上的视频解码装置,包括:
矩阵框设置单元,用于设置一个宽度和高度都为零的二维矩阵框,并记录下最小的横向纵向坐标值和最大的横向纵向坐标值信息,并根据内部空间情况设置二维矩阵框最大能够读取的数据值,和最多读取块数据个数;
矩阵框调整单元,用于加入一个需要读取的二维数据,通过需读取数据MV信息和需要读取数据的大小对前面设置的二维矩阵框进行大小调整,及通过与记录的坐标信息进行比较,调整该信息,使得需要读取的数据落到这个二维矩阵框内;
第一判断单元,用于对调整后的数据框内数据量的大小和利用率进行判断,如果超过设置的空间界限,或利用率太低即加入后实际需要读取需要占用更加多的时间,则还原此次的大小调整并触发下述的读取设置单元工作,否,则触发下述的第二判断单元工作;
第二判断单元,用于判断读取到的数据块数目是否达到限定的最大值,如果是,转到步骤六,否,则转到步骤五;
第三判断单元,用于判断是否还有数据需要读取,如果有,则触发矩阵框调整单元工作,如果没有,触发读取设置单元工作;
读取设置单元,用于按照确定下来的二维数据框的信息,到外部读取匹配数据到内部存储空间,并对可以从数据框内读取到数据的的块信息进行调整,使其都转向内部空间进行读取需要的数据;
视频解码单元,用于根据调整后的信息进行继续解码。
本发明的优点在于:本发明是一种自适应的数据存取方法,能够根据硬件资源配置好的空间智能选择最理想的高效的取数方式进行取数,使数据带宽利用率达到最高。
附图说明
下面参照附图结合实施例对本发明作进一步的描述。
图1是视频解码芯片中SDRAM时序图。
图2是视频解码芯片中SDRAM连续读取时序图。
图3是本发明工作流程示意图。
图4本发明是取数示意图。
具体实施方式
本发明提供一种嵌入式设备上视频解码过程中数据读取方法,如图3所示,包括如下步骤:
步骤一:设置一个宽度和高度都为零的二维矩阵框,并记录下最小的横向纵向坐标值和最大的横向纵向坐标值信息,并根据内部空间情况设置二维矩阵框最大能够读取的数据值,和最多读取块数据个数;
步骤二:加入一个需要读取的二维数据,通过需读取数据移动向量(Motion Vect,MV)信息和需要读取数据的大小对前面设置的二维矩阵框进行大小调整,及通过与记录的坐标信息进行比较,调整该信息,使得需要读取的数据落到这个二维矩阵框内;
步骤三:对调整后的数据框内数据量的大小和利用率进行判断,如果超过设置的空间界限,或利用率太低即加入后实际需要读取需要占用更加多的时间,则还原此次的大小调整并转到步骤六,否,则转到步骤四;
步骤四:判断读取到的数据块数目是否达到限定的最大值,如果是,转到步骤六,否,则转到步骤五;
步骤五:判断是否还有数据需要读取,如果有,则转到步骤二,如果没有,转到步骤六;
步骤六:按照确定下来的二维数据框的信息,到外部读取匹配数据到内部存储空间,并对可以从数据框内读取到数据的的块信息进行调整,使其都转向内部空间进行读取需要的数据;
步骤七:根据调整后的信息进行继续解码。
本发明的取数方法要求码流解析和图像重建异步进行,在重建模块中,根据前面码流解析得到的MV信息,按照当前要需要匹配进行取数的宏块N为开始位置建立一个需要读取的二维数据框(虚线框),如图4所示。向后每个宏块MV所框取数据范围进行搜寻,判断加入一个宏块的MV后数据框改变的大小是否能够比单独各个宏块取数的效率高,如果是,加入这次的取数范围并修改取数框的大小,并进入下一个宏块加入的影响判断,直到取数宏块空间范围达到内部RAM空间的最大值为止;如果加入一个宏块后会导致取数框增大过多,及会多取许多无效数据到内部,那么也要停止搜索。停止搜索后将前面搜索的数据作为一个数据框进行整块的数据读取,这样框内所有的宏块需要的数据都在这个高速取数的范围内,加快了取数的效率。这样处理后如图上的第一个框取范围为例,如果不进行任何处理取数,那么需要取3个17×17B的数据进来进行运算,如果总线是32Bit的总线,那么为减少开销,至少需要取3×17×5W的单位数据,按照前面SDRAM的时序设置分析,需要3×17×(6+5),及561个信号周期完成取数过程,但是如果采用我们的改进方案,只需要读取18×49B的数据,按照32Bit的总线,需要读取18×13W的数据单位,消耗时间为18×(6+13)及342个信号周期,比直接取数节省了219个cycle,节省了39%的数据带宽,这对于嵌入式设备来说,有很明显的帮助。由于采取了自适应的方式进行取数,不会造成取数的浪费,即使在运动特别剧烈的时候,效率也只会和单宏块取数方式相同。
本发明还提供一种嵌入式设备上的视频解码装置,包括:
矩阵框设置单元,用于设置一个宽度和高度都为零的二维矩阵框,并记录下最小的横向纵向坐标值和最大的横向纵向坐标值信息,并根据内部空间情况设置二维矩阵框最大能够读取的数据值,和最多读取块数据个数;
矩阵框调整单元,用于加入一个需要读取的二维数据,通过需读取数据MV信息和需要读取数据的大小对前面设置的二维矩阵框进行大小调整,及通过与记录的坐标信息进行比较,调整该信息,使得需要读取的数据落到这个二维矩阵框内;
第一判断单元,用于对调整后的数据框内数据量的大小和利用率进行判断,如果超过设置的空间界限,或利用率太低即加入后实际需要读取需要占用更加多的时间,则还原此次的大小调整并触发下述的读取设置单元工作,否,则触发下述的第二判断单元工作;
第二判断单元,用于判断读取到的数据块数目是否达到限定的最大值,如果是,转到步骤六,否,则转到步骤五;
第三判断单元,用于判断是否还有数据需要读取,如果有,则触发矩阵框调整单元工作,如果没有,触发读取设置单元工作;
读取设置单元,用于按照确定下来的二维数据框的信息,到外部读取匹配数据到内部存储空间,并对可以从数据框内读取到数据的的块信息进行调整,使其都转向内部空间进行读取需要的数据;
视频解码单元,用于根据调整后的信息进行继续解码。
本发明是一种自适应的数据存取方法,能够根据硬件资源配置好的空间智能选择最理想的高效的取数方式进行取数,使数据带宽利用率达到最高。相对于以前的常用方案,节省了30%~40%的带宽消耗,这对成本和性能都有较高要求的嵌入式多媒体系统来说,是一笔很大的资源节省。