本文是对VVC参考软件下doc目录中的NextSoftware-Data Structure的一个翻译和解读。
动机
HM的缺点
- 复杂的数据结构
- Z-index
- 令人产生歧义的数据模型(TComDataCu)
- 糟糕的代码可读性
- 复杂的内存操作与一般的数据流混合在一起
- 缺乏数据和逻辑封装
- 复杂的可拓展性
- 数据结构设计的时候伴随着严格的设定,例如:square blocks
- 由于错误的实现,很多设想都被抛弃了
目标
下一代参考软件的设计准则
- 简单的、没有歧义的数据模型
- 现代的面向对象的设计,即快速又整洁
- 全局的像素地址
- 去除Z-index
- 去除二级的信号地址:CTU到Z-Index
- 封装繁琐的操作,例如:内存操作
- 使得一般的流程更加易读
- 更好的代码可读性
- 能够简单地拓展
回顾HM模型的数据结构
- TComDataCU
- 保存编码的信息
- 可能表示一个CU或者一个CTU(包含多个CU)
- 基本上是图像位置到编码信息的映射
- TComCU
- 允许更容易的TU结构导航的对象
- 不包含实际的数据,而是包含在TComDataCU中
- TComPicYuv
- 保存视频信号
下一代参考软件的模型
导航
- Size、Position、Area(Position+Size),这三个结构都是使用结构体实现的,包含在 EncoderLib 中的
Common.h
文件中- 表示基础的二维信息
- CompArea
- 一个给定的分量的区域
- UnitArea
- 表示多通道信号中的区域
- 描述共同定位分量组成的一组块
信号存储,包含在 CommonLib 中的Buffer.h
文件中
- AreaBuf:结构体模版
- 描述了在线性的内存中一个二维信号的布局
- 包含了一些简单的操作:copy、fill
- UnitAreaBuf
- 描述了在线性的内存中一个多组件二维信号的布局
- 包含了简单的操作:copy,fill
- PelStorage
- 一个UnitAreaBuf,同时也分配自己的内存
编码信息
- Picture
- 包含了输入输出信号作为元数据(slice info等等)
- Coding、PredictionUnit、TransformUnit
- 单一对象对应着单一的单元
- 包含相应的信息
- 包含位置信息&#