1、复杂的数据结构
Z索引
不明确的数据模型(TComDateCU)
2、槽糕的代码可读性
复杂的内存操作与一般的数据流混杂在一起
缺乏数据和逻辑封装
3、复杂的可扩展性
数据结构的设计有严格的假设(例如:方块)
很多的想法因为扩展性的复杂而被放弃
1、简单明确的数据模型:采用现代O-O设计原则,快速且前沿
2、全局像素寻址
消除Z索引的使用
消除2级(CUT->Z索引)信号寻址
3、简单操作的封装(例如:内存操作):允许一般流程更好的可读性
4、更好的代码可读性:允许更容易的可扩展性
三、HM中重要的数据结构1、TComDateCU
存储编码信息
可能表示一个CU或者CTU(一个CTU包含多个CU)
图像位置到编码信息的映射
2、TComTU
允许更简单的TU结构导航的对象
不包含实际数据,而是包裹在TComDateCU的周围
3、TComPicYuv
存储视频信号
【注意】:在VVC的测试模型VTM中,上面三种数据结构全部被弃用,提出了一些新的数据结构
四、VVC中各种信号的存储1、导航(索引)信息
Size、Position、Area(其中 Area = Position + Size):表示基本的二维索引信息
CompArea:给定一个分量(块)的面积
UnitArea:表示多通道信号中的一个面积;描述同位分量的组成的块的集合
2、信号存储(包含在CommonLib中的Buffer.h文件中)
AreaBuf:结构体模板
描述二维信号在一维内存中的排版
包含简单的操作(复制、填充等)
UnitAreaBuf
描述多分量二维信号在一维内存中的排版
包含简单的操作(复制、填充等)
PelStorage:一个分配了内存的UnitAreaBuf