一种减少hevc编码器中帧内编码时延的方法_3

文档序号:9380968阅读:来源:国知局
加入到帧内预测模块中。
[0067] 判断步骤S6中最大编码单元是否遍历了所有的子编码单元的方法是:
[0068] 当将编码单元送入帧内编码模式时,分别统计当前编码单元的亮度和色度分量的 每个基本单元的面积;
[0069] 将所有基本单元的面积相和,并将相加之和与当前最大编码单元的面积进行比 较,若面积相等,则判定最大编码单元遍历了所有的编码单元。
[0070] 步骤S5中的所需数据是下一个帧内编码单元所依赖的编码单元的重构图像数 值。
[0071] 更加具体的是:图3是将帧内预测循环从总的编码器框图中抽出来,以更加明确 帧内循环存在的数据依赖。图中可见,帧内预测模块不仅需要当前单元的预测模式,还需要 之前的编码单元的重建图像结果。而之前编码单元的重建图像结果,只有通过帧内预测、变 换量化和反量化反变换三个阶段才能获得最终的结果,所以这种数据依赖不仅造成的这三 个运算单元的运算吞吐量不足,而且使整个编码过程的时延增大。
[0072] 图4为本发明的帧内预测循环框图。首先,一个LCU的所有编码单元的分割结果 及预测模式被调度器接收,调度器将产生出各个帧内预测基本单元(即变换单元TU)的依 赖图。其中,每个变换单元都有一个ID标明其位置。当一个变换单元完成其重构图像时, 其ID被反馈至调度器,调度器根据依赖图向下一个运算单元(即帧内编码预测模块)输入 所需数据,并触发其运行。例如,在图2中,当编码单元5的重构图像完成后,可以触发编码 单元6开始计算,同时,即使编码单元6没有完成重构,编码单元7就可以准备好送入帧内 预测模块了。这样,当编码单元6完成帧内预测后,可以立即开始编码单元7的帧内预测编 码。此时,变换量化模块正在运行编码单元6的数据。这样帧内预测循环各运算单元就可 以尽可能的实现流水线运算,从而提高运算单元的吞吐率,减少了系统总的编码时延。
[0073] 下面分三步介绍本发明的具体算法。首先介绍了依赖图产生算法;然后重点说明 对于一个TU来判断其所依赖的重构图像TU的编号。最后说明了如何利用数据依赖图及最 近产生的重构图像的结果进行帧内预测编码单元的调度。
[0074] 变换单元是进行帧内预测的基本单元。为了清楚地定义某个TU,对一个IXU的所 有TU编号作为其标识ID。用一个二维数组MarkL[0. . 16] [0. . 16]来存贮64x64大小的 IXU中的每个亮度4x4小块对应的TU编号。用一个二维数组MarkC[0. . 8] [0. . 8]来存贮 64x64LCU中的每个色度4x4小块对应的TU编号。因为二个色度都采用同样的预测块大小 和预测模式,所以只考虑一个色度分量如C b的依赖情况,另一个色度分量Q的依赖情况与 Cb相同。
[0075] 因为帧内预测的最小运算单元是4x4块,所以按整个IXU都是4x4块TU时每个 4x4块的标准定义的运算顺序,将整个LCU分为256个亮度小块,64个色度小块。每个小块 的运算顺序作为其编号,这个编号也就是其在LCU四叉树中的前向遍历的顺序号。对于大 于4x4的TU,采用其左上角的4x4块对应的编号作为整个TU的编号,因此,编号可能是不连 续的。
[0076] 在一个LCU内,其包括的TU分别表示为TUY (nY)、TUCb (nCb)和TUC; (η(;),其中nY =0· . NY,nYCb= 0· . NC,nYC 0· . NC。NY和NC分别对应亮度和色度的TU个数。
[0077] 依赖图产生算法:
[0078] 1、根据每个 TU 的大小对 MarkL[0. · 15] [0· · 15]和 MarkC[0. · 7] [0· · 7]赋值。
[0079] 2、按编码顺序遍历IXU的所有亮度TUY (nY)。对每个TU所依赖的相邻TU做反向 触发标记。具体地讲,如果TU(η)的帧内预测需要TU(X)的重建图像元素,则将TU(η)作为 TU(X)的触发端之一。同时,记录当前TU所需的触发源数量。当所有TU遍历完成后,每个 TU都会有一个它所影响的TU的ID列表,和它会被多少个TU触发的总数。每个TU的触发 端列表以及其本身的触发源个数构成了此LCU的数据依赖图。如果当前TU不依赖任何一 个TU,将其放入一个单独的序列TU_Ii中。TU_Ii中包括第一个TU以及其它非帧内模式的 TUo
[0080] 3、依照类似的方法统计色度TU触发端列表及触发源个数。因为Cb与(^的数据依 赖情况是一致的,所以,只需对上述计算运行一次得到结果对C b与(^均适用。
[0081] 用来判断运算单元的依赖TU编号的算法:
[0082] 一个TU运算单元所依赖的其它重构像素是其左侧和左下侧同高度的边、其上方 和右斜上方同宽度的边以及其左上方的像素。图5展示了一个4x4块可能依赖的相邻像素。 一个TU所依赖的相邻重构像素,不仅与其按规范定义的在四叉树中遍历的顺序有关,不同 的TU尺寸和预测模式也会有不同的依赖像素集合。
[0083] 为减少描述调度算法的复杂性,此处以IXU为同步点,即假设之前一个IXU重建已 经完成。考虑到左边IXU的未完成时的算法只需在本算法的基础上实现一个乒乓运算即 可。考虑到上边IXU未完成时的算法对大尺寸图像意义不大,而只需处理当前IXU时确认 上边IXU已完成重建即可。
[0084] 假设当前TU(η)在LCU内的坐标为(X,y)(其中横向及纵向的单位均为4个像素), 通过查找附录一中针对不同TU大小、预测模式以及当前对应分量,就可获得其对应的依赖 TU 列表 TUi (Xi, y;),i = 0· · · Dx。则其对应的依赖 TU 坐标为(X+Xi, y+y;)。当 x+x^ y+y i 小于0时,表示在当前LCU外,为简化描述,此处当作无依赖处理。
[0085] 附录表中只列出了亮度TU大小为4x4到16x16,色度TU大小为4x4和8x8的TU 依赖查找表。32x32亮度TU及16x16色度TU依赖查找表可用类似方法根据规范推出。如 果当前块的模式为帧间预测块,不需要帧内预测模块运行。当当前块是帧间预测块或无残 差预测块(skip模式)时,帧内预测模块无需运行。并且,这两种模式也不存在帧内模式运 算所需数据依赖。此处将其依赖标记为TU (-X-1,-y-Ι),意为无数据依赖。
[0086] 对当前TU获得的依赖TU列表TU1 (Xl,yi),查找MarkL[x+Xl] [y+yj或者 MarkC[x+Xl] [y+yj,即可获得该依赖TU的ID值。如果该ID值大于当前TU的ID,则不将 其计入本TU的依赖列表,否则将其ID作为当前TU所依赖TU的ID,相同ID的TU只记录一 次,最后获得的总的依赖TU的ID集合即是当前TU所依赖之TU集合。
[0087] 以下为事先建立的不同尺寸TU的依赖TU查找表:
[0088] 亮度分量依赖查找表





[0097] 根据LCU的数据依赖图对帧内预测模块进行调度:
[0098] 1、从TlLI1中选择第一个TU运行。比如对第一个TU(O);依次将TUY(O)、TUC b(O)、 TUC;(0)三个TU分量的输入送入帧内预测处理模块的队列中。初始送入流水线的的个数由 帧内编码循环的流水线级别定义。
[0099] 2、当出现流水线吞吐不足时,从TlLI
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1