在MVP处理器中进行图像运动补偿的方法、装置及处理器与流程

文档序号:21407395发布日期:2020-07-07 14:41阅读:475来源:国知局
在MVP处理器中进行图像运动补偿的方法、装置及处理器与流程

本发明涉及处理器和视频处理领域,更具体地说,涉及一种在mvp处理器中进行图像运动补偿的方法、装置及处理器。



背景技术:

在中国专利号为:200910190339.1,发明名称为一种并行处理器及其线程处理方法的中国专利中,揭示了一种能够实现并行任务的mvp处理器(mvp:multithreadvirtualpipeline,多线程虚拟流水线;mvp处理器是带有mvp核的处理器),其对存在大量并行任务的应用较为有效率,性价比较高。在上述处理器中,当进行图像运动补偿时,可充分利用帧间和帧内的并行度,进行高效率的计算。但是,针对视频编解码中大量的块运算,纯粹利用mvp处理器来处理当然也是可以的,但是,因为mvp处理器专长在通用并行计算,而非计算密集型,这样的操作虽然也能够实现图像运动补偿,同时对于传统的cpu+gpu结构来讲,也能够在总体上节省处理时间(不需要通过南北桥和总线),但是也会导致了资源的浪费及能量的消耗。这是由于mpv的内核及其结构决定了其最佳的使用场景是并行计算。因此,在上述mpv处理器中虽然可以实现图像运动补偿,但是也有改进以提高其资源使用效率和节省能量消耗的余地。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述资源使用效率不高、能量消耗较大的缺陷,提供一种资源使用效率高、能量消耗较小的在mvp处理器中进行图像运动补偿的方法、装置及处理器。

本发明解决其技术问题所采用的技术方案是:构造一种在mvp处理器中进行图像运动补偿的方法,包括如下步骤:

运行在mvp处理器中的线程将该线程中的图像运动补偿任务形成任务链表;

发送该任务链表到本地存储器,依据所述任务链表产生线程任务并将其推入图像处理单元的任务缓存中;

图像处理单元取得所述输入缓存中的线程任务,并对所述线程任务指向的任务链表进行运动补偿计算;

将得到的运动补偿数据写回所述本地存储器,所述运行在mvp处理器中的线程由所述本地存储器取得该返回的运动补偿数据并继续运行;

其中,所述任务链表中包括该线程中的多个涉及运动补偿的子任务;所述图像处理单元是设置在所述mvp处理器中的用于运动补偿计算的硬件单元。

更进一步地,一个任务链表中的一个子任务对应于该图像帧中一个块的yuv运动通道补偿计算,并包括实现所述yuv运动通道补偿计算所需的参数。

更进一步地,所述图像处理单元每次由其任务缓存中取出一个线程任务,所述线程任务包括其表示的任务链表中包含的子任务个数和子任务在所述本地存储器中的起始地址;取得所述线程任务后,所述图像处理单元逐个处理所述子任务。

更进一步地,在执行每个子任务时,所述图像处理单元首先由外部ddr中取得参考帧(referenceframe),之后的所有数据均由本地存储器中取得,且结果写入本地存储器。

更进一步地,所述图像处理单元按照每个块的位置将每个所述子任务的处理结果写入所述本地存储器。

更进一步地,所述任务链表发送到所述本地存储器后,所述运行在mvp处理器中的线程被挂起,并释放其占用的资源。

更进一步地,一个任务链表中的运动补偿数据写回所述本地存储器后,所述图像处理单元唤醒发送该任务链表的线程。

更进一步地,在所述mvp处理器中,多个线程并行处理多个图像帧,每个线程在需要时均按所述步骤执行。

本发明还涉及一种实现上述方法的装置,包括:

任务链表形成单元:用于使运行在mvp处理器中的线程将该线程中的图像运动补偿任务形成任务链表;

任务链表发送单元:用于发送该任务链表到本地存储器,依据所述任务链表产生线程任务并将其推入图像处理单元的任务缓存中;

任务链表执行单元:用于图像处理单元取得所述输入缓存中的线程任务,并对所述线程任务指向的任务链表进行运动补偿计算;

返回单元:用于将得到的运动补偿数据写回所述本地存储器,所述运行在mvp处理器中的线程由所述本地存储器取得该返回的运动补偿数据并继续运行;

其中,所述任务链表中包括该线程中的多个涉及运动补偿的子任务;所述图像处理单元是设置在所述mvp处理器中的用于运动补偿计算的硬件单元。

本发明还涉及一种处理器,该处理器包括mvp处理器,所述处理器还包括上述装置。

实施本发明的在mvp处理器中进行图像运动补偿的方法、装置及处理器,具有以下有益效果:由于将在mvp处理器的一个线程中处理的一帧图像数据的运动补偿计算或任务(包括必要的数据)形成一个链表,并将该链表发送到本地存储器中;根据该任务链表形成线程任务并推入图像处理单元的缓存中,使得单独的图像处理单元能够由本地存储器中取得该链表并对其进行计算,并将得到的补偿结果数据返回本地存储器;这样,当上述线程继续进行时,只需要读取本地存储器就能够得到上述结果数据,不需对由外部存储器或系统内存(对于处理器而言,是外部存储器)进行读写,能够节省大量的数据存储、取得时间;同时,在上述图像处理单元处理上述计算时,该线程可以被挂起,释放资源用于其他线程。因此,其资源使用效率高、能量消耗较小。

附图说明

图1是本发明在mvp处理器中进行图像运动补偿的方法、装置及处理器实施例中的方法流程图;

图2是所述实施例中的装置结构示意图;

图3是所述实施例中图像处理单元的缓存结构示意图;

图4是所述实施例中处理器的结构示意图。

具体实施方式

下面将结合附图对本发明实施例作进一步说明。

如图1所示,在本发明的在mvp处理器中实现图像运动补偿的方法、装置及处理器实施例中,该在mvp处理器进行图像运动补偿的方法是在mvp处理器上实现的,关于mvp的具体情况,包括其结构及其操作流程,请参见专利号为cn200910190339.1的中国专利,在此不再赘述。在本实施例中,该方法包括如下步骤:

步骤s11将一帧图像数据中的需要进行图像运动补偿计算的部分形成任务链表:在本步骤中,运行在mvp处理器中的线程将该线程中的运动补偿任务形成任务链表;通常来讲,mvp处理器可以并行运行多个线程,而在对图像任务进行处理的时候,一般一个线程处理一帧图像。具体来讲,在本实施例中,一帧图像中需要进行运动补偿计算的通常是该图像中的多个块(block),按照一定的顺序,将对这些块进行运动补偿计算的数据放入链表中,就形成任务链表。在本实施例中,上述顺序包括块的顺序和数据的顺序。即按照一定的空间排列将一帧图像中处理运动补偿计算需要的、多个块的数据依次放置在所述链表中,而在一个块数据中,每个数据或每种数据也是按照设定的顺序放入该链表的。在本实施例中,一个任务链表中的一个子任务对应于该图像帧中一个块的yuv运动通道补偿计算,并包括实现所述yuv运动通道补偿计算所需的参数。换句话说,上述多个块的数据是分成子任务存放在上述链表中的,一个块的数据,就是一个子任务,一个子任务在上述链表中占据指定数量个链节,例如,一个链节。

步骤s12发送该任务链表到本地存储器,得到线程任务并推送到图像处理单元的缓存:在本步骤中,发送该任务链表到本地存储器,依据所述任务链表产生线程任务并将其推入图像处理单元的任务缓存(taskfifo)中。首先要将上述任务链表存储在本地存储器或本地存储区域中,存储的方式可以是边形成链表,边存储;也可以是形成一个完整的任务链表后存入。当任务链表存储在本地存储器中后,就能够知道该任务链表包括多少子任务,也能够确定每个子任务的开始存储地址,于是,将上述一个任务链表中的子任务数量、名称及其起始存储地址按照一定的顺序组合在一起,就得到线程任务。该线程任务实际上就是指出一个线程形成的任务链表中包括多少个子任务,每个子任务的开始地址为何,便于图像处理单元在进行处理时取得相关的数据,请参见图3。在图3中,taskfifo是图像处理单元的(先进先出的)缓存。每个正在mvp处理器中运行的线程都可以将其运动补偿任务形成的线程任务写入该缓存。写入该缓存中的数据包括该线程任务在本地存储器中的起始存储地址以及子任务的数量,task0-taskm就是本地存储器中的具体的子任务,上述子任务之间形成链条。换言之,上述线程任务形成后,将其按照顺序推送到图像处理单元的输入缓存(fifo)中。

步骤s13图像处理单元取得线程任务,并依据线程任务由本地存储器读取数据,处理运动补偿计算:在本步骤中,图像处理单元取得所述输入缓存(fifo)中的线程任务,并对所述线程任务指向的任务链表进行运动补偿计算;所述图像处理单元每次由其任务缓存中取出一个线程任务,所述线程任务包括其表示的任务链表中包含的子任务个数和子任务在所述本地存储器中的起始地址;取得所述线程任务后,所述图像处理单元逐个处理所述子任务。在执行每个子任务时,所述图像处理单元首先由外部ddr中取得参考帧(referenceframe),之后的所有数据均由本地存储器中取得,且结果写入本地存储器。值得一提的是,上述参考帧是视频编解码中的相邻几帧或一帧,有可能是正在处理的帧前面的帧,也可能是正在处理的帧后面的帧。在本步骤中,图像处理单元根据设置,读取相应的参考帧数据进来到本地存储器,跟运动补偿数据进行运算,获得补偿后的视频数据,并写回本地存储器,其中,图像处理单元执行的操作主要是插值运算。

步骤s14将得到的计算结果存入本地存储器,并在完成所述线程任务后唤醒线程,继续处理该图像帧:在本步骤中,将得到的运动补偿数据写回所述本地存储器,所述运行在mvp处理器中的线程由所述本地存储器取得该返回的运动补偿数据并继续运行。在本实施例中,处于节省时间的目的,采用边处理便存储的方式将上述子任务的处理后的数据写回本地存储器;其写回地址由线程自动设置,因此,和原先子任务的数据存储地址通常是不相同的。所述图像处理单元按照每个块的位置将每个所述子任务的处理结果写入所述本地存储器。所述任务链表发送到所述本地存储器后,所述运行在mvp处理器中的线程被挂起,并释放其占用的资源。一个任务链表中的运动补偿数据写回所述本地存储器后,所述图像处理单元唤醒发送该任务链表的线程。在本实施例中,为了提高性能,线程在准备好任务链表并把任务写入到上述taskfifo后,会自行挂起退出,并释放mvp硬件资源。当然,在一些情况下,例如,mvp处理器并不繁忙,硬件资源有富余,同时对能量消耗要求不高的情况下,线程软件也可以选择不退出;而当图像处理单元在处理完线程任务后,会发done信号给对应的上述线程。即使在该线程挂起的情况下,该线程也可以通过某种方式,例如时钟输入,唤醒其自己,进入待执行任务列表,一旦有硬件资源,则会切换上去执行。

值得一提得是,在本步骤中,所述任务链表中包括该线程中的多个涉及运动补偿的子任务;所述图像处理单元是设置在所述mvp处理器中的用于运动补偿计算的硬件单元。

在本实施例中,在所述mvp处理器中,多个线程并行处理多个图像帧,每个线程在需要时均会按上述步骤执行。这样能够充分发挥mvp处理器的优势,快速对数据进行处理。

本发明还涉及一种实现上述方法的装置,包括任务链表形成单元1、线程任务发送单元2、线程任务执行单元3和返回单元4;其中,任务链表形成单元1用于使运行在mvp处理器中的线程将该线程中的运动补偿任务形成任务链表;线程任务发送单元2用于发送该任务链表到本地存储器,依据所述任务链表产生线程任务并将其推入图像处理单元的任务缓存中;线程任务执行单元3用于图像处理单元取得所述输入缓存中的线程任务,并对所述线程任务指向的任务链表进行运动补偿计算;返回单元4用于将得到的运动补偿数据写回所述本地存储器,所述运行在mvp处理器中的线程由所述本地存储器取得该返回的运动补偿数据并继续进行运行;

其中,所述任务链表中包括该线程中的多个涉及运动补偿的子任务;所述图像处理单元是设置在所述mvp处理器中的用于运动补偿计算的硬件单元。请参见图4,图4示出了一种情况下mvp及上述的图像处理单元之间的连接关系。在图4中,可以看到图像处理单元(vpu)包括了vpu控制模块vpuctrl和插值模块interpolationunit;而mvp中的硬件线程(hardwarethreads)可以直接和上述vpu控制模块进行交互,插值模块可以和mvp的本地存储器进行数据交互,于是,在硬件线程上运行的图像处理任务形成线程任务并存入本地存储器中后,能够通知上述vpu控制模块,vpu控制模块通过上述插值模块由mvp的本地存储器取得数据并进行插值处理后返回上述本地存储器,而vpu控制模块根据上述插值模块的处理结果告知mvp的线程控制器(threadcontroller),从而唤醒或通知原先运行在硬件线程上的线程,在重新分配的硬件线程(即硬件资源)上继续执行。

本发明还涉及一种处理器,该处理器包括mvp处理器,所述处理器还包括上述装置。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1