H.266新参考软件VTM中的数据结构

     从今天开始研究新的266的参考软件啦----VTM,先来看看新代码中的数据结构。

     在以前的HM中,有三个很重要的数据结构,分别为TComDataCU,TComTU,TComPicYuv;

       TComDataCU----  存储编码信息;表示一个CU或者CTU;图像位置到编码信息的的映射;

       TComTU----允许更简单的TU结构指引的对象; 不包含实际的数据;

       TComPicYuv----储存视频信号;

    在新的测试模型中,上面提到的数据结构全部被抛弃,提出了一些新的数据结构;’

一 .VTM模型

1.Navigation

    Size,Position,Area(Position+Size)   

         ----  表示基本你的二维指引信息

  CompArea

        ----给定一个分量(块)的面积

  UnitArea

       ----表示多信道信号中的面积

       ----描述同位分量的组成的块的集合

2.Signal  Storage

   AreaBuf

      ----描述二维信号在一维内存中的排版

      ----包含简单的操作(复制,填充等)

  UnitAreaBuf

      ----描述多分量二维信号在一维内存中的排版

      ----包含简单的操作(复制,填充等)

  PelStorage

      ----一个分配了内存的UnitAreaBuf

3.Coding  Information

  Picture

     ----包含输入输出信号还有元数据(Slice 信息)

  CodingUnit ,PredictionUnit,TransformUnit

     ----单一单元的单一对象

     ----包含对应的信息

     ----包含位置信息

CodingStructrue

      ----管理CodingUnit,将他们和picture相关联

     ----包含用于从上至下的RD 搜索的额外的函数

4.框图

 

5.HM与VTM的比较


二.VTM模型的细节描述

1.CodingStructrue基础知识

  ----包含CodingUnit等对象,将他们映射到图像中

  ----TComDataCU的替代,但是是全局变量

          ——Top-Level的CodingStructrue包含一帧中所有的CU,PU和TU

         ——Sub-Level的CodingStructrue包含一个指定的UnitArea的表示

  ----在构建后是空的,需要填充

        ——addCU/PU/TU 方法构建并且映射特定的对象

        ——getCU/PU/TU获取特定的对象的地址,通过使用全局Position

  ----动态分配所需要的内存

       ——使用dynamic_cache

2.RD-Search with CodingStructure

   ----Designed for Top-Down approach

   ----Allows for local test encoding with “transparent” global context

        ——Follows the well known best-temp scheme with up-propagation

   ----Hierarchically cascaded

        ——A CodingStructure is set up to represent a local UnitArea

        ——Calls outside of this UnitArea are forwarded to the parent CodingStructure

  ----Parent nodes are not aware of the children nodes
        ——Best candidates need to be propagated to the parents

3.Hierarchial Cascading with CodingStructrue

   

4.Partitioner

  ----一个简单的管理划分(CU和TU,四叉树和可能的其他划分)的类

  ----建模成一个堆,在当前处理的区域上创建一个新的划分

  ----对于HEVC

        ——包含当前划分信息的访问器

        ——深度还有actual的当前UnitArea

   ----对于QTBT或者further

         ——允许设置划分限制

        ——允许执行划分可行性检查

   5.Data Ownership

      ----每一块数据都属于一些对象,这些对象需要分配和释放

      ----Picture

           ——被EncLib和DecLib拥有

           ——拥有信号缓存,Slice 对象和SEI信息和TileMap

      ----AreaBuf, UnitBuf

           ——没有任何数据

      ----PelStorage

            ——可能拥有缓存

           ——拥有的数据存储在m_origin成员中

      ----CodingStructrue

           ——Top-Layer:被Picture拥有

                   ——链接到Picture的信号缓存

           ——Other:被EncCU或者IntraSearch拥有

                  ——包含信号缓存区

           ——总是拥有描述结构和排版(不是信号的)的缓存

           ——拥有变换系数的缓存

           ——没有拥有CodingUnit等,只是通过dynamic_cache链接到他们上

   ----CodingUnit, PredictionUnit, TransformUnit

         ——为dynamic_cache所有

   ----TransformUnit

        ——没有变换系数缓存

        ——从CodingStructure链接到缓存上

  ----dynamic_cache

        ——Top-Level的缓存是全局的

        ——RD-Search 的缓存为EncCu和IntraSearch所有

  三.常见问题

  1.运动信息存储在哪里

      ----在HEVC中,运动矢量存储的最小分辨率是PU

      ----而在H.266标准新提出的工具中打破了这个传统

            ——需要运动矢量信息的子CU的分辨率

           ——将子PU存储为PU将破坏PU的逻辑目的

           ——对子PU的运动信息分配额外的缓存

    ----PU::spanMotionInfo 设置缓存

四.参考

    1.Size,Position,Area,UnitArea,CodingUnit,PredictionUnit,TransformUnit,AreaBuf

       Size----宽度和高度,描述矩形的大小

      Position----x,y,描述一个点的二维位置

      Area-----Size,Position,位于一个特定Position的一个指定Size的矩形

      CompArea----Area,一个多分量(Y,U,V)信号的一个指定分量的一个Area

      UnitArea----block:CompArea ;由N个block组成的多分量的compound

      CodingUnit---- UnitArea,描述用这个UnitArea描述的area是如何编码的

      PredictionUnit----UnitArea,描述这个UnitArea的预测信号是怎么生成

      TransfromUnit----UnitArea,描述这个UnitArea的变化编码是如何应用的

      AreaBuf----AreaBuf<T> ,将Pel和TCoeff定义为PelAreaBuf和CoeffAreaBuf

                   ----at(x, y) ,返回位置(x,y)的信号值

                   ----bufAt(x, y) ,返回指向位置(x,y)缓存的原始指针

                   ----subBuf(x, y, w, h) ,返回一个AreaBuf,描述an area offset by (x,y) of size (w,h)

                   -----fill(val),用指定的值填充指定的区域

                    ----copyFrom(other),从other area复制内容

                    ----substract, addAvg, reconstruct, removeHighFreq ,替代TComYuv的函数

                    UnitBuf<T>----AreaBuf,包含不同分量的信号描述

      CodingStructrue

                     ---- area:UnitArea,描述CodingStructrue跨越图像中的哪些区域  

                     ----addCU(UnitArea) ,构建并定位一个跨越UnitArea的CodingUnit

                     ----getCU(Position),返回位于指定Position的CodingUnit

                     ----setDecomp(CompArea),将指定的CompArea设置为重建的

                     ----setDecomp(UnitArea),类似于多信道操作???

                     ----isDecomp(Position),分辨Position的重建信号是否生成

                     ----initStructData(),清除所有当前包含的数据(信号的编码信息)

                     ----initSubStructure(),链接到一个新的CodingStructureat the bottom of the hierarchy

                     ----useSubStructure(),从sub-structrue中复制编码数据

                    ----copyStructrue(),从另一个structure复制编码数据,

猜你喜欢

转载自blog.csdn.net/cxy19931018/article/details/80457593