[翻译]VTM文档:NextSoftware-Data Structures
VTM的模型
指示信息
基础二维信息
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
可选Pel
、TCoeff
来生成PelAreaBuf
和CoeffAreaBuf
- 包含一些简单的操作
-
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
包含某个UnitArea
的CU,PU,TU
- 顶级(Top-level) 的
-
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)
:返回这个位置的重建信号是否已被生成
- area:
- 包含针对自上而下(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
-
归属:
EncLib
或DecLib
-
拥有:信号缓冲区,
Slice
对象,SEI
消息和TileMap
-
-
AreaBuf
,UnitBuf
- 拥有:不保存任何数据
-
PelStorage
- 拥有:可能拥有某些缓冲区(这取决于是否使用
create
或createFromBuf
来创建) - 拥有的数据保存在成员变量
m_origin
中
- 拥有:可能拥有某些缓冲区(这取决于是否使用
-
CodingStructure
- Top-Layer
- 归属:
Picture
- 拥有:链接至图像的信号缓冲区,但是并不拥有这些缓冲区
- 归属:
- Sub-Layer(暂时存在于RD-Search)
- 归属:
EncCu
或IntraSearch
- 拥有:包含一些信号的缓冲区,并拥有他们
- 归属:
- 总是拥有描述结构和布局的缓冲区(非信号)和变换系数缓冲区
- 不拥有
CU
等,仅仅是通过dynamic_cache
链接到他们
- Top-Layer
-
CodingUnit
,PredictionUnit
,TransformUnit
- 归属:属于
dynamic_cache
,其中对象是通过get
获取并通过cache
来释放 -
TransformUnit
不拥有变换系数缓冲区(在CodingStructure
中)
- 归属:属于
-
dynamic_cache
- Top-Level的缓冲区是全局的(在运行时动态分配。并在退出的时候释放)
- RD-Search的缓冲区是属于
EncCu
和IntraSearch