CN101710986B - 基于同构多核处理器的h.264并行解码方法和*** - Google Patents
基于同构多核处理器的h.264并行解码方法和*** Download PDFInfo
- Publication number
- CN101710986B CN101710986B CN 200910109830 CN200910109830A CN101710986B CN 101710986 B CN101710986 B CN 101710986B CN 200910109830 CN200910109830 CN 200910109830 CN 200910109830 A CN200910109830 A CN 200910109830A CN 101710986 B CN101710986 B CN 101710986B
- Authority
- CN
- China
- Prior art keywords
- macro block
- matrix
- decoding
- conditional
- coordinate
- 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.)
- Active
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开了一种基于同构多核处理器的H.264并行解码方法和***,所述方法包括分配N个核用于解码,由一个核以待解码图像的一帧为单位完成熵解码,由N-1个核对该帧以宏块或宏块组为单位进行并行解码;所述***包括熵解码模块(1),用于以一帧数据为单位创建一反映宏块可解码状态的条件矩阵和调度队列并进行初始化赋值;所述***还包括并行解码模块(2),用于在熵解码过程中对所述条件矩阵和调度队列进行更新,以所述调度队列宏块坐标所对应的宏块或宏块组为单元完成解码。通过本发明多个核可以互斥读取调度队列中的元素对应的宏块进行并行解码,提高了数据并行加速比,提高了解码速度。
Description
技术领域
本发明涉及视频编解码技术领域,尤其涉及一种在同构多核处理器上实现H.264并行解码的方法和***。
背景技术
H.264/AVC作为新一代视频编解码算法吸收了以往编码方案的优点,并在视频压缩性能和网络接口友好性上得到了很大提高,但这些优点都是以引入复杂度为前提的。分析H.264编码器的结构可知,其高复杂度的计算量主要来源于两个方面,一是帧间编码的1/4像素精度运动搜索,多种可变大小的块模式及多参考帧的运动估计;二是帧内编码的多种预测模式。H.264应用在当前的单核计算机环境下,由于受到自身复杂度以及硬件条件的限制,编解码速度还有待提高。随着人们对视频质量、实时性提出越来越高的要求,如何快速的实现编、解码成了H.264目前急需解决的问题,高效可行的实时高清视频应用解决方案也成了各个商家研究的热点问题。
如今多核处理器逐渐普及,把H.264应用在多核环境下并行处理以提高性能就成为了一种切实有效的解决方式。跟传统的单核处理器相比,多核处理器带来了更强的并行处理能力和更高的计算密度。多核时代的到来满足了用户对高性能及低功耗的双重需求,多核技术迅速的发展和应用可以说是历史必然,而用单核技术是很难构造高能效计算机平台的。
发明内容
本发明要解决的技术问题在于提供一种基于同构多核处理器的H.264并行解码方法和***,可以在负载均衡的基础上最大化多核处理器带来的并行加速比,有效地提高解码速度。
为了解决上述技术问题,本发明采用如下技术方案:
一种基于同构多核处理器的H.264并行解码方法,所述方法包括分配N个核用于解码,由一个核以待解码图像的一帧为单位完成熵解码,由N-1个核对该帧以宏块为单位进行并行解码。
所述以宏块为单位进行并行解码包括以下步骤:
i、为当前帧创建一反映宏块可解码状态的条件矩阵和调度队列,所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,对所述条件矩阵进行初始化赋值,该初始化条件矩阵至少有一个位于边缘的元素被赋值为M;
ii、当所述条件矩阵中的元素值为M时,将元素值为M的元素所对应的坐标全部压入所述调度队列,所述N个核互斥读取所述调度队列中的坐标所对应的宏块并进行解码;
iii、所述调度队列中的坐标所对应的宏块被解码后,将该坐标被移出所述调度队列,然后将该坐标在所述条件矩阵中的元素重新赋值为M-1,并对条件矩阵中已完成解码的坐标(i,j)邻近点(i-1,j)、(i,j+1)和(i+1,j)所对应的元素值都减1;
重复所述步骤ii至iii直到所述条件矩阵中所有元素值都变成M-1时为止。
对所述条件矩阵进行初始化赋值包括:将所述条件矩阵第一行首元素的值置为M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3。
所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码。
所述矩阵横向和纵向上的元素个数分别与所述待解码的图像水平与垂直方向上的宏块个数相同。
本发明还采用如下技术方案:
一种基于同构多核处理器的H.264并行解码方法,所述方法包括分配N个核用于解码,根据图像分辨率情况,由一个核以待解码图像的一帧为单位完成熵解码,由N-1个核对该帧以宏块组为单位进行并行解码。
所述以宏块组为单位进行并行解码包括以下步骤:
iv、为当前帧创建一反映宏块可解码状态的条件矩阵和调度队列,所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,对所述条件矩阵进行初始化赋值,该初始化条件矩阵至少有一个位于边缘的元素被赋值为M;对调度队列初始赋值为只含一个元素(0,0);
v、建立了所述条件矩阵和队列后,对该条件矩阵的元素进行多对一映射以形成一调度矩阵,所述条件矩阵中构成宏块组的元素与所述调度矩阵的一个元素对应;
vi、当条件矩阵中构成宏块组的元素都被赋值为当前宏块可解码时,将这些元素映射后形成的坐标压入所述队列,由***N个核从所述队列互斥取出坐标,通过所述形成的多对一映射关系对应得到所述条件矩阵中构成宏块组的元素的坐标,完成一次调度对多个元素对应的多个宏块进行解码;
vii、所述队列中的坐标(i,j)所对应的宏块组被解码后,将该坐标移出所述队列,并将所述条件矩阵中构成宏块组的元素都赋值为M-1,最后将与所述构成宏块组的元素所相邻的未完成解码的元素值减去1;
重复所述步骤vi至vii,直到所述条件矩阵的所有元素都被赋值为M-1为止。
对所述条件矩阵进行初始化赋值包括:将所述条件矩阵第一行首元素的值置为M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3。
所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码。
所述宏块组包括2x2宏块组、2x4宏块组、4x2宏块组或4x4宏块组。
对该条件矩阵的元素进行多对一映射以形成一调度矩阵,所述映射方法为:对所述条件矩阵的元素,若其坐标为(x,y),则
本发明还公开一种基于同构多核处理器的H.264并行解码***,所述***包括:
熵解码模块,包括一个核处理器,用于以一帧数据为单位创建一反映宏块可解码状态的条件矩阵和调度队列,在熵解码过程中对所述条件矩阵和调度队列进行更新,将获取的解码所需数据记录在当前处理帧的共享内存中;
熵解码模块,包括一个核处理器,用于以一帧数据为单位创建一反映宏块可解码状态的条件矩阵和调度队列并进行初始化赋值,将获取的解码所需数据记录在当前处理帧的共享内存中;
并行解码模块,包括多个核处理器,用于在解码过程中对所述条件矩阵和调度队列进行更新,以所述调度队列宏块坐标所对应的宏块或宏块组为单元完成解码并进行环路滤波;
所述进行共享和访问的数据包括条件矩阵和调度队列、解码参数和待解码的宏块或宏块组数据。
与现有技术相比,本发明的有益技术效果是:1、引入了条件矩阵和调度队列,提出了条件矩阵和调度队列初始化以及更新的机制,使得宏块解码的任务调度由各个核根据条件矩阵各自独立完成,减少了一个用于任务调度的核资源;2、多个核可以并行解码,提高了数据并行加速比,提高了解码速度。
附图说明
图1是本发明的基于同构多核处理器的H.264并行解码***的结构示意图;
图2a和2b是本发明的基于同构多核处理器的H.264并行解码方法流程图;
图3是本发明的条件矩阵和调度队列初始化的状态示意图;
图4是本发明的自适应宏块组示意图;
图5是本发明的自适应宏块组的条件矩阵坐标映射过程示意图;
图6是本发明的条件矩阵和调度队列更新前的某个状态示意图;
图7是本发明的条件矩阵和调度队列更新过程的示意图;
图8是本发明的条件矩阵更新规则理论依据,即宏块依赖关系示意图;
图9是本发明条件矩阵映射为调度矩阵的映射方程式。
具体实施方式
下面结合附图及最佳实施例,对本发明做进一步详细说明。
本发明引入了条件矩阵和调度队列,并提出一种条件矩阵和调度队列初始化以及更新的策略;多个核之间通过共享内存共同维护条件矩阵和调度队列,并可以互斥地读取和更新调度队列中可解码宏块的坐标,由于解码由多个核并行完成并可以根据需要扩展到任意多个核,因此可以很大程度上提高数据并行加速比,提高H.264的解码速度。
如图1所示,本发明的基于同构多核处理器的H.264并行解码***包括:
熵解码模块1,包括一个核处理器(如图1中Core-1),所述熵解码模块1用于以一帧数据为单位创建一反映宏块可解码状态的条件矩阵和调度队列并进行初始化赋值,将获取的解码所需数据记录在当前处理帧的共享内存中。
并行解码模块2,包括多个核处理器(如图1中Core-2~Core-N),所述并行解码模块2用于在解码过程中对所述条件矩阵和调度队列进行更新,以所述调度队列宏块坐标所对应的宏块或宏块组为单元完成解码并进行环路滤波。
所述熵解码模块1和并行解码模块2通过共享内存的方式对数据进行共享和访问,还通过同步信号进行通信。
当有H.264码流输入时,先由熵解码模块1对码流以帧为单位进行解码,获取解码参数和宏块数据并记录在当前处理帧的共享内存中,与并行解码模块同步并处理参考帧;完成同步后,熵解码模块1和并行解码模块2形成一级流水线,在并行解码模块2还在处理当前帧的同时,熵解码模块就可以处理下一帧数据;多核并行处理完每一帧数据后,帧缓冲直至整帧处理结束后输出数据。
图2a和2b示出了本发明提供的一种基于同构多核处理器的H.264并行解码方法的流程。为了便于描述,这里只示出了与本发明相关的部分。
分配N个核用于解码,其中1个核用于完成熵解码过程,N-1个核用于完成宏块级并行解码过程,所述熵解码和宏块级并行解码两者之间形成一级流水线。
下面对熵解码和并行解码的过程分别进行详细说明。熵解码的过程包括以下步骤:
首先对H.264解码器进行初始化,完成句柄的创建和私有内存的分配。然后以一帧数据为单位进行处理,若待解码的数据码流没有处理完毕,则重复执行以下的步骤S101到步骤S104:
步骤S101:为当前帧创建共享内存、流水线缓存、条件矩阵以及调度队列。
共享内存是熵解码模块与并行解码模块之间数据共享和访问的渠道,熵解码模块对每帧数据进行调度后,将解码所需参数记录在共享内存中,使得并行解码模块可以通过共享内存访问这些数据。条件矩阵和调度队列的元素也保存在共享内存中。
步骤S102:初始化当前帧索引并对当前帧进行熵解码,将获取的解码参数、宏块数据等解码所需数据记录在当前处理帧的共享内存中。
步骤S103:对当前帧的条件矩阵及调度队列进行初始化赋值。
所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码;对所述条件矩阵进行初始化赋值,该初始化条件矩阵至少有一个位于边缘的元素被赋值为M。
所述初始化赋值包括以下步骤:将所述矩阵第一行首元素的值置为整数M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3;在本发明的实施例中,M取值为0。
为了便于说明条件矩阵初始化的方法,下面先对本发明条件矩阵的概念和宏块数据依赖关系进行说明。
每一帧图像可以划分成一个一个边长为1像素的正方形的宏块,使得在并行解码模块中能以宏块或宏块组为单位进行解码。本发明形成如图3所示的二维的条件矩阵,矩阵长宽分别为待解码的图像水平与垂直方向上的宏块数,矩阵的每个元素是边长为1像素的正方形,每个元素可以唯一映射到待解码图像的相应宏块。把位于矩阵最左上方的点视为坐标原点(0,0),经过坐标原点水平向右的方向视为X轴,经过坐标原点竖直向下的方向视为Y轴,这样矩阵上的每个元素都能用一个唯一的坐标来表示。如坐标(0,0)、(1,0)、(2,0)表示位于矩阵第一行的前3个元素,坐标(0,1)、(1,1)、(2,1)表示位于矩阵第二行的前3个元素。
由于解码存在时间先后上的问题,宏块与宏块之间就形成了一种数据依赖关系,能否解码一个宏块取决于该宏块所依赖的所有宏块是否完成了解码。宏块间数据依赖关系如图8所示,当前宏块需要做解码操作时,必须满足左宏块、左上宏块、上宏块以及右上宏块已经完成解码。在实际的操作过程中,我们可以将依赖条件再进一步简化,将左上宏块的依赖条件并入上宏块;因为当上宏块的依赖条件满足了,左上宏块的依赖条件也必然满足。因此一个宏块解码最多依赖于3个宏块。
本发明条件矩阵上每个元素记录的值表示该元素对应的宏块所需的解码条件数。解码条件数反映了每个宏块解码所依赖的宏块中尚未解码的宏块个数,只有当一个宏块解码所依赖的所有宏块都完成了解码,该宏块才能被解码。因此,当元素记录的值变为0时,表示当前宏块解码所依赖的所有宏块都已经完成解码,当前宏块达到了正常解码的要求。
请参照图3,图3示出了一帧数据解码前条件矩阵初始化的方法。作为M取值为0的具体实施例,所述步骤S103的条件矩阵中的元素分别由数字-1、0、1、2、3,组成,数字-1、0、1、2、3分别表示当前宏块已解码、当前宏块可解码、当前宏块解码还差一个条件、当前宏块解码还差两个条件、当前宏块解码还差三个条件。初始化赋值时,将矩阵第一行首元素的值置为0,第一行除首元素外的其他元素的值都置为1,第一列以及最后一列除首元素外的其他元素的值都置为2,将除了首行、首列以及尾列外的剩余元素的值都置为3。这是因为第一行首元素不需要依赖任何其他模块即可解码,故解码条件数为0;第一行除首元素外的其他元素因位于图像的最上端,不存在来自上方与右上方的依赖条件,仅仅依赖于其左方的宏块,故解码条件数为1;第一列除首元素外的其他元素不存在左宏块的依赖,故解码条件数为2;最后一列除首元素外的其他元素不存在右上块的依赖,故解码条件数为2。
图3还示出了一帧数据解码前调度队列初始化的方法。调度队列是一个环形队列,队列里的元素是当前已经可以正常解码的宏块的坐标。每帧数据解码之前将调度队列置为仅含一个坐标为(0,0)的元素,因为初始化时条件矩阵只有首行的首元素可以解码。调度队列里的元素与条件矩阵的元素值紧密相关;当条件矩阵完成更新后发现存在值为0的元素,则会将该元素的坐标压入调度队列,代表该元素对应的宏块所需的依赖条件都已满足,可以进行正常的解码操作了。完成并行解码的各个核心空闲时会从调度队列里取相应的宏块坐标,完成解码操作。当调度队列为空时,代表当前状态没有满足数据依赖关系的可解码宏块。
步骤S104:将解码所需数据通过共享内存传递给Core-2~Core-n并与其同步,Core-1处理上一帧的参考帧队列并完成解码输出,更新当前帧索引。
对一帧图像完成熵解码后,形成了经过初始化的条件矩阵和调度队列,此时根据图像的分辨率情况,由N-1个核对该帧以宏块或宏块组为单位进行并行解码,以宏块为单位并行解码包括以下步骤:
步骤S201:等待熵解码模块的同步信令。
步骤S202:当所述条件矩阵中的元素值为M时,将元素值为M的元素所对应的坐标全部压入所述调度队列,所述N个核互斥读取所述调度队列中的坐标所对应的宏块并进行解码。
一旦有并行解码的核心进入空闲等待状态时,就会从调度队列中取元素,直到取到为止。例如,初始时某一空闲的核心发现调度队列中有一个坐标为(0,0)的元素,就对调度队列加锁,取出坐标(0,0)后解锁。在读取、更新调度队列或条件矩阵的元素时需要先加锁,因为条件矩阵与调度队列都是在共享内存的基础上实现的,对于涉及到多核的读写访问必须通过加锁机制保护,从而保证同一时间访问的唯一性;读取元素后又要解锁以保证其他核心可以互斥访问调度队列或条件矩阵的元素。
步骤S203:所述队列中的坐标(i,j)所对应的宏块被解码后,将该坐标移出所述队列,并将该坐标在所述矩阵中表示的元素赋值为已完成解码。具体的,可以将该坐标在所述矩阵中表示的元素赋值为M-1,当M取值为0时,元素赋值为-1表示已完成解码。
步骤S204:对条件矩阵中已完成解码的坐标(i,j)邻近点(i-1,j)、(i,j+1)和(i+1,j)所对应的元素值都减1。
步骤S205:重复以上步骤S202~S204的操作直至条件矩阵的所有元素都被赋值为已完成解码为止,即完成整帧处理。
下面结合图6对步骤S202至S204进行详细解释。如图6,条件矩阵中值为-1的元素,代表该元素对应的宏块已经完成了解码;条件矩阵有4个元素(7,0)、(5、1)、(3、2)和(1、3)值为0,表示当前宏块可解码,因此根据步骤S202将这四个元素压入调度队列中,并行解码核心可以获取这些元素对应的宏块,进行并行解码。例如,当并行解码模块获取到调度队列中一个坐标为(7,0)的元素,就可以对该元素对应的宏块进行解码,完成解码将(7,0)从调度队列中移出,将条件矩阵中坐标(7,0)的元素值由0修改为-1。
如图7,当坐标为(7,0)的元素所对应的宏块被解码后,即图7中条件矩阵第一行元素值为0的宏块被解码后,就可以对依赖于该宏块的左下宏块、下宏块以及右宏块进行更新:根据步骤S204,将坐标(6,1)、(7,1)和(8,0)的元素值2、3、1分别减去1;重复步骤S202检查条件矩阵中更新过的元素值,发现坐标(8,0)的元素值为0,于是并将坐标(8,0)压入调度队列。
本发明提出了自适应宏块组的数据并行方案,即根据不同的分辨率调整数据并行的层次。请参照图4,本发明的自适应宏块组包括1x1宏块级7,即宏块、2x2宏块组3、2x4宏块组4、4x2宏块组5和4x4宏块组6。是否以自适应宏块组为单位进行调度,可根据图像分辨率的具体情况来决定:比如QCIF、CIF格式可对应于宏块,4CIF可对应于2x2宏块组3,而高清(720P、1080i、1080P)则可对应于4x4宏块组6。之所以要提出自适应宏块组的方案,是因为在高分辨率下如高清1080P(1920x1080),如果仍以宏块为单位则调度频度将会达到CIF格式的20倍之多,况且调度机制是在共享内存上实现的,在访问效率低下且存在访问冲突的情况下,调度频度的激增将造成调度负载相应激增。若以自适应宏块组为单位,则一次调度就可以对多个宏块进行解码,从而较少调度频度和核间通讯的频率,提高解码效率。
以自适应宏块组为单位进行并行解码的方法包括以下步骤:分配N个核用于解码,根据图像分辨率情况,由一个核以待解码图像的一帧为单位完成熵解码,由N-1个核对该帧以宏块组为单位进行并行解码。
步骤S301:为当前帧创建一反映宏块可解码状态的条件矩阵和调度队列,所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码;对所述条件矩阵进行初始化赋值,该初始化条件矩阵至少有一个位于边缘的元素被赋值为M。
所述对条件矩阵进行初始化赋值包括以下步骤:将所述矩阵第一行首元素的值置为整数M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3;在本发明的实施例中,M取值为0。对调度队列初始赋值为只含一个元素(0,0)。
步骤S302:对条件矩阵的元素进行多对一映射以形成一个调度矩阵,所述条件矩阵中构成宏块组的元素与所述调度矩阵的一个元素对应。
如图9,所述映射方法为:对所述条件矩阵的元素,若其坐标为(x,y),则
以2x4宏块组4为单位时,映射后调度矩阵的坐标为
以4x2宏块组5为单位时,映射后调度矩阵的坐标为
其中,x、y分别是条件矩阵某个元素的横、轴坐标,(i,j)分别是(x,y)通过坐标映射方程式转换而来的调度矩阵的坐标,一个(i,j)可能对应着条件矩阵的多个元素。下面以2X2宏块组3为例,即每次以4个宏块为单位解码(顶角的例外)对通过坐标映射方程式形成调度矩阵的方法进行说明。请参照图5,左侧为条件矩阵,表示实际一帧的图像,每个正方形可对应为一个宏块;右侧为调度矩阵。坐标映射就是将左侧的坐标映射成右侧的坐标,为方便说明,用英文字母表示图中的正方形。根据坐标映射方程式,如图5中的元素
A(0,0)映射成A1(0,0);
B(1,0)、C(2,0)、D(0,1)、E(1,1)映射成B1(1,0);
F(3,0)、G(4,0)、H(2,1)、I(3,1)映射成C1(2,0);
J(0,2)映射成D1(0,1);
K(1,2)、L(2,2)、M(0,3)、N(1,3)映射成E1(1,1);
依次类推,可以形成一个调度矩阵。
步骤S303:当条件矩阵中构成宏块组的元素都被赋值为当前宏块可解码时,将这些元素映射后形成的坐标压入所述队列,由***N个核从所述队列互斥取出坐标,通过所述形成的多对一映射关系对应得到所述条件矩阵中构成宏块组的元素的坐标,完成一次调度对多个元素对应的多个宏块进行解码。
例如所述队列中存在当前可解码的坐标B1(1,0)时,取出该坐标后通过所述形成的多对一映射关系就可以对元素B,C,D,E所对应的4个宏块进行解码。
步骤S304:所述队列中的坐标(i,j)所对应的宏块组被解码后,将该坐标移出所述队列,并将所述条件矩阵中构成宏块组的元素都赋值为M-1,再将与所述构成宏块组的元素所相邻的未完成解码的元素值减去1。
将与所述构成宏块组的元素所相邻的未完成解码的元素值减去1,表示这些未完成解码的元素所依赖的解码条件变少了,只要条件矩阵中构成宏块组的元素值都变成当前宏块可解码状态,就能被空闲的N-1个核中的其中一个核取出进行解码。
重复所述步骤S303至S304,直至所述条件矩阵的所有元素都被赋值为M-1为止。
综上所述,本发明采用多个核共同完成H.264的解码,由条件矩阵记录宏块解码所需的条件,通过互斥读取调度队列能获得可以解码的宏块的坐标;通过对条件矩阵和调度队列进行实时更新,多核之间可连续处理可解码的宏块,提高了解码速度。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于同构多核处理器的H.264并行解码方法,其特征在于:
分配N个核用于解码,由一个核以待解码图像的一帧为单位完成熵解码,由N-1个核对该帧以宏块为单位进行并行解码;
所述以宏块为单位进行并行解码包括以下步骤:
i、为当前帧创建一反映宏块可解码状态的条件矩阵和调度队列,所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码;对所述条件矩阵进行初始化赋值,该初始化条件矩阵至少有一个位于边缘的元素被赋值为M,具体如下:将所述条件矩阵第一行首元素的值置为M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3;
ii、当所述条件矩阵中的元素值为M时,将元素值为M的元素所对应的坐标全部压入所述调度队列,所述N-1个核互斥读取所述调度队列中的坐标所对应的宏块并进行解码;
iii、所述调度队列中的坐标所对应的宏块被解码后,将该坐标移出所述调度队列,然后将该坐标在所述条件矩阵中的元素重新赋值为M-1,并对条件矩阵中已完成解码的坐标(i,j)邻近点(i-1,j+1)、(i,j+1)和(i+1,j)所对应的元素值都减1;
重复所述步骤ii至iii直到所述条件矩阵中所有元素值都变成M-1时为止。
2.根据权利要求1所述的基于同构多核处理器的H.264并行解码方法,其特征在于:所述条件矩阵横向和纵向上的元素个数分别与所述待解码的图像水平与垂直方向上的宏块个数相同。
3.一种基于同构多核处理器的H.264并行解码方法,其特征在于:
分配N个核用于解码,根据图像分辨率情况,由一个核以待解码图像的一帧为单位完成熵解码,由N-1个核对该帧以宏块组为单位进行并行解码;
所述以宏块组为单位进行并行解码包括以下步骤:
iv、为当前帧创建一反映宏块可解码状态的条件矩阵和调度队列,所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码;对所述条件矩阵进行初始化赋值,该初始化条件矩阵至少有一个位于边缘的元素被赋值为M,具体如下:将所述条件矩阵第一行首元素的值置为M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3;对调度队列初始赋值为只含一个元素(0,0);
v、建立了所述条件矩阵和调度队列后,对该条件矩阵的元素进行多对一映射以形成一调度矩阵,所述条件矩阵中构成宏块组的元素与所述调度矩阵的一个元素对应;
vi、当条件矩阵中构成宏块组的元素都被赋值为当前宏块可解码时,将这些元素映射后形成的坐标压入所述调度队列,由***N-1个核从所述队列互斥取出坐标,通过所述形成的多对一映射关系对应得到所述条件矩阵中构成宏块组的元素的坐标,完成一次调度对多个元素对应的多个宏块进行解码;
vii、所述调度队列中的坐标(i,j)所对应的宏块组被解码后,将该坐标移出所述队列,并将所述条件矩阵中构成宏块组的元素都赋值为M-1,最后将与所述构成宏块组的元素所相邻的未完成解码的元素值减去1;
重复所述步骤vi至vii,直到所述条件矩阵的所有元素都被赋值为M-1为止。
4.根据权利要求3所述的基于同构多核处理器的H.264并行解码方法,其特征在于:所述宏块组包括2x2宏块组(3)、2x4宏块组(4)、4x2宏块组(5)或4x4宏块组(6)。
6.一种基于同构多核处理器的H.264并行解码***,其特征在于所述***包括:
熵解码模块(1),包括一个核处理器,用于以一帧数据为单位创建一反映宏块可解码状态的条件矩阵和调度队列并进行初始化赋值,将获取的解码所需数据记录在当前处理帧的共享内存中;其中所述条件矩阵中的元素由表征解码状态的五个连续整数字M-1、M、M+1、M+2、M+3所组成,所述条件矩阵中的元素为M时表示可对该元素对应的宏块进行解码,所述条件矩阵中的元素为M-1时表示该元素对应的宏块已完成解码,所述条件矩阵中的元素为M+1、M+2、M+3时表示这些元素对应的宏块分别缺少一个条件、两个条件和三个条件才能解码;对所述条件矩阵进行初始化赋值为:将所述条件矩阵第一行首元素的值置为M,第一行除首元素外的其他元素的值都置为M+1,第一列以及最后一列除首元素外的其他元素的值都置为M+2,将除了首行、首列以及尾列外的剩余元素的值都置为M+3;
并行解码模块(2),包括多个核处理器,用于在解码过程中对所述条件矩阵和调度队列进行更新,以所述调度队列宏块坐标所对应的宏块或宏块组为单元完成解码并进行环路滤波;对所述条件矩阵进行更新具体为:所述调度队列中的坐标(i,j)所对应的宏块组被解码后,将该坐标移出所述调度队列,并将所述条件矩阵中构成宏块组的元素都赋值为M-1,最后将与所述构成宏块组的元素所相邻的未完成解码的元素值减去1;
所述熵解码模块(1)和并行解码模块(2)通过共享内存的方式对数据进行共享和访问,还通过同步信号进行通信。
7.根据权利要求6所述的基于同构多核处理器的H.264并行解码***,其特征在于:所述进行共享和访问的数据包括条件矩阵和调度队列、解码参数和待解码的宏块或宏块组数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910109830 CN101710986B (zh) | 2009-11-18 | 2009-11-18 | 基于同构多核处理器的h.264并行解码方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200910109830 CN101710986B (zh) | 2009-11-18 | 2009-11-18 | 基于同构多核处理器的h.264并行解码方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101710986A CN101710986A (zh) | 2010-05-19 |
CN101710986B true CN101710986B (zh) | 2012-05-23 |
Family
ID=42403743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200910109830 Active CN101710986B (zh) | 2009-11-18 | 2009-11-18 | 基于同构多核处理器的h.264并行解码方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101710986B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101977313B (zh) * | 2010-09-20 | 2012-11-21 | 中国科学院计算技术研究所 | 视频信号编码装置和方法 |
US8344917B2 (en) * | 2010-09-30 | 2013-01-01 | Sharp Laboratories Of America, Inc. | Methods and systems for context initialization in video coding and decoding |
CN102158408B (zh) * | 2011-04-01 | 2014-06-04 | 华为技术有限公司 | 数据流处理方法和装置 |
CN102625108B (zh) * | 2012-03-30 | 2014-03-12 | 浙江大学 | 一种基于多核处理器实现的h.264解码方法 |
DE102013110899B4 (de) * | 2012-10-04 | 2019-07-04 | Cognex Corporation | Symbologie-Lesegerät mit Multicore-Prozessor und Systeme und Verfahren zum Betrieb desselben |
CN105100803B (zh) * | 2014-04-29 | 2018-12-18 | 三星电子(中国)研发中心 | 视频解码优化方法 |
CN105635740B (zh) * | 2014-10-27 | 2019-05-28 | 阿里巴巴集团控股有限公司 | 对图像进行解码的方法及装置 |
CN104361553B (zh) * | 2014-11-02 | 2017-04-12 | 中国科学院光电技术研究所 | 一种提高图形处理器处理效率的同步方法 |
KR102273670B1 (ko) * | 2014-11-28 | 2021-07-05 | 삼성전자주식회사 | 움직임 보상 정보를 수정하는 데이터 처리 시스템과 데이터 처리 방법 |
CN104539972A (zh) * | 2014-12-08 | 2015-04-22 | 中安消技术有限公司 | 一种多核处理器中视频并行解码的控制方法和装置 |
US20170019679A1 (en) * | 2015-07-15 | 2017-01-19 | Mediatek Inc. | Hybrid video decoding apparatus for performing hardware entropy decoding and subsequent software decoding and associated hybrid video decoding method |
US20170026648A1 (en) * | 2015-07-24 | 2017-01-26 | Mediatek Inc. | Hybrid video decoder and associated hybrid video decoding method |
CN105204950B (zh) * | 2015-09-25 | 2019-01-11 | 深圳怡化电脑股份有限公司 | 一种任务间队列通信方法及装置 |
KR102171119B1 (ko) * | 2015-11-05 | 2020-10-28 | 삼성전자주식회사 | 복수개의 블록 기반의 파이프라인을 이용한 데이터 처리 속도 개선 장치 및 그 동작 방법 |
CN106954066A (zh) * | 2016-01-07 | 2017-07-14 | 鸿富锦精密工业(深圳)有限公司 | 视频解码方法 |
US10375395B2 (en) * | 2016-02-24 | 2019-08-06 | Mediatek Inc. | Video processing apparatus for generating count table in external storage device of hardware entropy engine and associated video processing method |
CN108347613B (zh) * | 2017-01-25 | 2020-05-26 | 龙芯中科技术有限公司 | 图像宏块并行编码方法和装置 |
CN107483948A (zh) * | 2017-09-18 | 2017-12-15 | 郑州云海信息技术有限公司 | 一种webp压缩处理中像素宏块处理方法 |
CN107820091B (zh) * | 2017-11-23 | 2020-05-26 | 苏州浪潮智能科技有限公司 | 一种图片处理方法、***及一种图片处理设备 |
CN116366864B (zh) * | 2023-03-23 | 2024-04-12 | 格兰菲智能科技有限公司 | 并行编解码方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1758213A (zh) * | 2004-02-27 | 2006-04-12 | 印芬龙科技股份有限公司 | 带有共享内容的异构型并行多线程处理器(hpmt) |
CN101022534A (zh) * | 2006-02-15 | 2007-08-22 | 松下电器产业株式会社 | 解码装置和集成电路 |
CN101461247A (zh) * | 2006-06-08 | 2009-06-17 | 高通股份有限公司 | 视频块的并行批量解码 |
-
2009
- 2009-11-18 CN CN 200910109830 patent/CN101710986B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1758213A (zh) * | 2004-02-27 | 2006-04-12 | 印芬龙科技股份有限公司 | 带有共享内容的异构型并行多线程处理器(hpmt) |
CN101022534A (zh) * | 2006-02-15 | 2007-08-22 | 松下电器产业株式会社 | 解码装置和集成电路 |
CN101461247A (zh) * | 2006-06-08 | 2009-06-17 | 高通股份有限公司 | 视频块的并行批量解码 |
Also Published As
Publication number | Publication date |
---|---|
CN101710986A (zh) | 2010-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101710986B (zh) | 基于同构多核处理器的h.264并行解码方法和*** | |
CN105491377B (zh) | 一种计算复杂度感知的视频解码宏块级并行调度方法 | |
CN102369552B (zh) | 存储器子*** | |
CN101193305B (zh) | 用于视频编解码芯片中帧内预测的数据存储和交换方法 | |
CN104885471A (zh) | 用于下一代视频的编码/未编码的数据的内容自适应熵编码 | |
CN104604235A (zh) | 用于视频处理的发送装置及其方法 | |
CN104737540A (zh) | 用于下一代视频的视频编解码器架构 | |
CN102263949A (zh) | 用于管理在存储单元和解码器之间的信息传送的视频处理***、计算机程序产品和方法 | |
CN1306822C (zh) | 一种基于软硬件协同控制的视频解码器 | |
CN102148990B (zh) | 一种运动矢量预测装置和方法 | |
CN102088603A (zh) | 用于视频编码器的熵编码器及其实现方法 | |
CN105323586A (zh) | 一种用于多核并行视频编码和解码的共享内存接口 | |
CN101873490A (zh) | 图像处理方法和使用该方法的图像信息编码设备 | |
Su et al. | Efficient parallel video processing techniques on GPU: from framework to implementation | |
CN101778280B (zh) | 一种基于avs运动补偿亮度插值运算的电路及方法 | |
Jiang et al. | Highly paralleled low-cost embedded HEVC video encoder on TI KeyStone multicore DSP | |
CN101902643B (zh) | 并行阵列式帧内预测解码器vlsi结构设计方法 | |
KR20050043607A (ko) | 신호처리방법 및 신호처리장치 | |
CN104602026B (zh) | 一种适用于hevc标准下编码器中全复用的重建环路结构 | |
Jiang et al. | Efficient gpu-based inter prediction for video decoder | |
CN106063268A (zh) | 将视频数据从h.264转码成h.265的方法和设备 | |
CN101472174A (zh) | 视频解码器中用于复原原始图像数据的方法及装置 | |
Migallón et al. | Performance analysis of frame partitioning in parallel HEVC encoders | |
CN101986713A (zh) | 基于视点合成的多视点容错编码框架 | |
Wang et al. | Multi-Grain Parallel Accelerate System for H. 264 Encoder on ULTRASPARC T2. |
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 |