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