[翻译]VTM文档:NextSoftware-Data Structures

VTM的模型

[翻译]VTM文档:NextSoftware-Data Structures

指示信息

基础二维信息

Size

  • 描述一个长方形的尺寸
  • width,height

Position

  • 表示一个点的二维位置
  • x,y

Area

  • 某个位置(Position)处的某尺寸(Size)矩形
  • Position,Size

扩展二维信息

CompArea

  • 描述多通道信号的某个分量(component)的区域信息(Area)
  • 分量使用compID表示

UnitArea

  • 描述多通道信号的多个分量(CompArea)组成的的N个块(blocks)
  • blocks[0…N-1]:由CompArea组成

信号存储

AreaBuf <T>

  • 描述线性内存(linear memory)中一个二维信号的布局(memory layout)
  • T可选PelTCoeff来生成PelAreaBufCoeffAreaBuf
  • 包含一些简单的操作
    • at(x,y):返回信号在位置(x,y)处的值
    • bufAt(x,y):返回缓存(buffer)在位置(x,y)处的原始指针(raw pointer)
    • subBuf(x,y,w,h):返回偏移(x,y)的尺寸为(w,h)的一个AreaBuf
    • fill(val):使用给定的值填充某个区域
    • copyFrom(other):从其他区域复制内容
    • substract, addAvg, reconstruct, removeHighFreq替代TComYUV中的功能

UnitAreaBuf <T>

  • 描述线性内存(linear memory)中一个多通道(multi-component)二维信号的布局(memory layout)
  • 包含一些简单操作,与AreaBuf有相似的接口
  • bufs[0…N-1]:由AreaBuf组成,包含了信号的不同分量

PelStorage

  • 一个UnitAreaBuf,同时也分配自己的内存

编码信息

Picture

  • 包含了作为元数据的输入输出信号(slice info等)

CU、PU、TU

  • 单一对象(single object)对应着单一的单元(single unit)

  • 包含相应的信息,包含位置信息(从UnitArea中得到)

  • CodingUnit:描述某个UnitArea所表示的区域如何进行编码

  • PredictionUnit:描述某个UnitArea所表示的区域的预测信号如何生成

  • TransformUnit:描述某个UnitArea所表示的区域如何进行变化编码(transforming coding)

CodingStructure

  • 包含CU,PU,TU,并将它们映射到Picture上面
  • CodingStructure是全局分配的(globally allocated)
    • *(Top-level) 的CodingStructure包含当前帧全部的CU,PU,TU
    • 次级(Sub-level) 的CodingStructure包含某个UnitAreaCU,PU,TU
  • CodingStructure被创建后需要进行填充
  • 使用dynamic_cache动态地分配需要的资源以提高性能
  • 包含操作
    • area:UnitArea类型,描述了CodingStructure跨越(span)了图像的哪些区域
    • addCU/PU/TU(UnitArea):创建并定位跨越了UnitArea的特定对象
    • getCU/PU/TU(position):返回位于指定位置的特定对象
    • setDecomp(CompArea):设置指定的CompArea为已重建状态(reconstructed)
    • setDecomp(UnitArea):模拟多通道的setDecomp操作
    • isDecomp(Position):返回这个位置的重建信号是否已被生成
  • 包含针对自上而下(Top-Down)的率失真搜索(RD-search)的额外功能
    • 允许使用“透明的(transparent)”全局上下文(global context)进行本地测试编码
    • 遵循众所周知的具有向上传播(up-propagation)的最佳临时方案
    • 层次级联
      • 一个CodingStructure用来表达一个局部的UnitArea
      • 对于此UnitArea之外的调用将转发到当前CodingStructure的父节点
      • 父节点不知道全部的子节点,最好的候选者将被传播给父节点
    • 包含操作
      • initStructData():清除当前CodingStructure包含的所有数据(信号和编码信息)
      • initSubStructure():将一个新的CodingStructure连接到下一层
      • useSubStructure():从子层中复制编码数据
      • copyStructure():从其他结构中复制编码信息,并不受到父子之间的约束关系

HM与VTM的对比

HM VTM
Z-index, (CTU)-RS-address, Depth Position, Size, (Comp)Area, UnitArea
TComDataCU CodingUnit, PredictionUnit, TransformUnit
CU, PU, TU的命名空间中操作
CodingStructure
TComTU 划分由Partitioner监管
TComPicYuv Picture
TComPic Picture
TComYuv UnitAreaBuf

具体细节

CodingStructures

已整合至VTM模型::CodingStructures

划分

数据的归属

  • 每一个数据都属于某个(些)对象,并需要分配内存以及释放

  • Picture

    • 归属:EncLibDecLib

    • 拥有:信号缓冲区Slice对象,SEI消息和TileMap

  • AreaBufUnitBuf

    • 拥有:不保存任何数据
  • PelStorage

    • 拥有:可能拥有某些缓冲区(这取决于是否使用createcreateFromBuf来创建)
    • 拥有的数据保存在成员变量m_origin
  • CodingStructure

    • Top-Layer
      • 归属:Picture
      • 拥有:链接至图像的信号缓冲区,但是并不拥有这些缓冲区
    • Sub-Layer(暂时存在于RD-Search)
      • 归属:EncCuIntraSearch
      • 拥有:包含一些信号的缓冲区,并拥有他们
    • 总是拥有描述结构和布局的缓冲区(非信号)和变换系数缓冲区
    • 不拥有CU等,仅仅是通过dynamic_cache链接到他们
  • CodingUnitPredictionUnitTransformUnit

    • 归属:属于dynamic_cache,其中对象是通过get获取并通过cache来释放
    • TransformUnit不拥有变换系数缓冲区(在CodingStructure中)
  • dynamic_cache

    • Top-Level的缓冲区是全局的(在运行时动态分配。并在退出的时候释放)
    • RD-Search的缓冲区是属于EncCuIntraSearch