ECM8.0——代码整体初窥

ECM8.0——代码整体初窥

    • 基本结构
    • 导航信息
    • 存储区域
    • 编码信息

参考链接

基本结构

ECM8.0——代码整体初窥_第1张图片
数据结构分三种类型:

导航信息

  • Size,Position,Area(Position+Size):基本二维信息(位置,尺寸)。
  • CompArea:继承自Area,表示特定分量的二维信息。
  • UnitArea:包含了多个分量的Area。

ECM8.0——代码整体初窥_第2张图片

  • SizeType是uint32的别称(在该项目中)
  • Size
    • width, height:描述了一个矩形的大小。

ECM8.0——代码整体初窥_第3张图片

  • PosType是int的别称(在该项目中)
  • Position
    • x, y:描述了一个点的二维信息。

ECM8.0——代码整体初窥_第4张图片

看起来pos()和size()返回的都是 *this,但其实返回类型是不一样的,返回的this会变成对应的类,可以说是基类指针和子类指针的区别,也可以说是一种运行时多态的实现方式。

  • Area: Size, Position
    • 继承自Size和Position,一个位于特定位置的特定大小的矩形。

ECM8.0——代码整体初窥_第5张图片
ECM8.0——代码整体初窥_第6张图片

  • CompArea: Area
    • 一个多分量信号中的特定分量的(compID)Area
    • CompArea 中有一个 Area 结构体的成员和一个 chromaFormat(图片/视频的采样格式,如下)和 compID 两个成员变量。

ECM8.0——代码整体初窥_第7张图片
在这里插入图片描述

  • UnitArea
    • blocks[0…N-1]:CompArea
    • N个多分量信号blocks的融合。
    • UnitArea中有 ChromaFormat 和 blocks 两个成员变量。

存储区域

  • AreaBuf:包含了一个二维信号在内存中的存储(buf 和 Stride),可以根据位置访问到相应的信号值,包含内存的操作方法(fill、copy等)。
  • UnitBuf:包含了多个分量的二维信号在内存中到的存储,包含内存的操作方法(fill、copy等)。
  • PelStorage:一个UnitBuf(Pel类型),需要分配自己的内存空间。
    ECM8.0——代码整体初窥_第8张图片
  • AreaBuf(为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):从别的区域将内容复制过来

ECM8.0——代码整体初窥_第9张图片

  • UnitBuf(为Pel和TCoeff定义为PelAreaBuf和CoeffAreaBuf)
    • 这是一个 C++ 结构体定义,名为 UnitBuf。它包含了一些成员变量和函数成员,用于存储和操作图像数据的缓冲区。其中,UnitBufBuffers 和 ConstUnitBufBuffers 类型的变量 bufs 分别存储了各个分量的图像数据,而 ChromaFormat 则表示图像的色度格式。此外,它还提供了一些函数成员,如 fill、copyFrom、subtract 等,用于对图像数据进行填充、拷贝、差分等操作。
    • bufs[0…N-1]:AreaBuf:包含了信号不同分量的描述信息.

编码信息

ECM8.0——代码整体初窥_第10张图片

你可能感兴趣的:(c++,算法,数据结构)