基本结构
数据结构分三种类型:
导航信息
- Size,Position,Area(Position+Size):基本二维信息(位置,尺寸)。
- CompArea:继承自Area,表示特定分量的二维信息。
- UnitArea:包含了多个分量的Area。
- SizeType是uint32的别称(在该项目中)
- Size
- width, height:描述了一个矩形的大小。
- PosType是int的别称(在该项目中)
- Position
- x, y:描述了一个点的二维信息。
看起来pos()和size()返回的都是 *this,但其实返回类型是不一样的,返回的this会变成对应的类,可以说是基类指针和子类指针的区别,也可以说是一种运行时多态的实现方式。
- Area: Size, Position
- 继承自Size和Position,一个位于特定位置的特定大小的矩形。
- CompArea: Area
- 一个多分量信号中的特定分量的(compID)Area
- CompArea 中有一个 Area 结构体的成员和一个 chromaFormat(图片/视频的采样格式,如下)和 compID 两个成员变量。
- UnitArea
- blocks[0…N-1]:CompArea
- N个多分量信号blocks的融合。
- UnitArea中有 ChromaFormat 和 blocks 两个成员变量。
存储区域
- AreaBuf:包含了一个二维信号在内存中的存储(buf 和 Stride),可以根据位置访问到相应的信号值,包含内存的操作方法(fill、copy等)。
- UnitBuf:包含了多个分量的二维信号在内存中到的存储,包含内存的操作方法(fill、copy等)。
- PelStorage:一个UnitBuf(Pel类型),需要分配自己的内存空间。
- AreaBuf<T>(为Pel和TCoeff定义为PelAreaBuf和CoeffAreaBuf)
- 这是一个模板类 AreaBuf,用于表示一个二维区域的缓冲区。它包含了缓冲区的指针,宽度、高度、步长等信息,以及一系列操作缓冲区的方法,如填充、复制、扩展边界、线性变换等。其中,T 是缓冲区元素的类型,可以是任意类型。这个类的设计用于处理视频编解码相关的数据。
- at(x, y):返回信号在(x, y)处的值
- bufAt(x, y):返回一个指向(x, y)位置的缓冲区的未加工(raw)的指针
- subBuf(x, y, w, h):返回一个AreaBuf,描述距离(x, y)的偏移量为(w, h)的位置的缓冲区
- fill(val):使用特定的值填充特定的区域
- copyFrom(other):从别的区域将内容复制过来
- UnitBuf<T>(为Pel和TCoeff定义为PelAreaBuf和CoeffAreaBuf)
- 这是一个 C++ 结构体定义,名为 UnitBuf。它包含了一些成员变量和函数成员,用于存储和操作图像数据的缓冲区。其中,UnitBufBuffers 和 ConstUnitBufBuffers 类型的变量 bufs 分别存储了各个分量的图像数据,而 ChromaFormat 则表示图像的色度格式。此外,它还提供了一些函数成员,如 fill、copyFrom、subtract 等,用于对图像数据进行填充、拷贝、差分等操作。
- bufs[0…N-1]:AreaBuf:包含了信号不同分量的描述信息.