1. CodingStructure类
CodingStructure
类表示视频编码中的结构层次,用于存储编码单元(CU)、预测单元(PU)和变换单元(TU)等信息。
主要成员变量:
area
: 表示当前编码单元的区域。cus
: 存储当前编码单元的列表。pus
: 存储当前预测单元的列表。tus
: 存储当前变换单元的列表。sps
,pps
,slice
: 存储序列参数集(SPS)、图像参数集(PPS)和切片(Slice)信息。cost
,dist
,fracBits
: 用于存储编码成本、失真度和编码比特。
主要成员函数:
init
: 初始化编码结构。clearCUs
: 清除编码单元。addCU
,addPU
,addTU
: 添加编码单元、预测单元和变换单元。getRecoBuf
: 获取重建后的图像缓冲区。
2. Partitioner类
Partitioner
类用于管理图像划分的过程,包括划分编码单元(CU)、预测单元(PU)和变换单元(TU)。
主要成员变量:
modeType
: 表示当前的模式类型(例如帧内模式或帧间模式)。currArea
: 表示当前划分区域。chType
: 表示当前处理的通道类型(亮度或色度)。
主要成员函数:
initCtu
: 初始化编码树单元(CTU)。splitCurrArea
: 划分当前区域。nextPart
: 移动到下一个划分单元。
3. EncCu类
EncCu
类用于管理编码单元(CU)的编码过程。
主要成员变量:
m_CABACEstimator
: CABAC编码器,用于熵编码。m_CurrCtx
: 当前上下文状态。m_modeCtrl
: 模式控制器,用于管理编码模式。
主要成员函数:
xCompressCU
: 压缩编码单元。xCheckRDCostIntra
: 计算帧内模式的RD成本。xCheckRDCostInter
: 计算帧间模式的RD成本。
4. RdCost类
RdCost
类用于计算率失真成本(Rate-Distortion Cost)。
主要成员变量:
m_distParam
: 失真参数。m_costMode
: 成本模式。
主要成员函数:
calcRdCost
: 计算率失真成本。getDistPart
: 获取特定部分的失真度。
5. IntraSearch类
IntraSearch
类用于帧内预测的搜索和编码。
主要成员函数:
estIntraPredLumaQT
: 估计亮度帧内预测的四叉树。estIntraPredChromaQT
: 估计色度帧内预测的四叉树。
6. InterSearch类
InterSearch
类用于帧间预测的搜索和编码。
主要成员函数:
motionCompensation
: 运动补偿。xEstimateMvPredAMVP
: 估计运动矢量预测(AMVP)。
7. CABACEstimator类
CABACEstimator
类用于CABAC熵编码。
主要成员函数:
resetBits
: 重置编码比特。coding_unit
: 编码单元。getEstFracBits
: 获取估计的比特数。
8. CA 视频编码中的树结构(编码树、SepTree、DualTree、Tree_D等)在视频压缩中起到了关键作用。它们是基于分层分割和预测策略,用于提高压缩效率和视频质量。以下是对这些概念的详细说明:
编码树(Coding Tree)
编码树是视频编码中用来表示和处理图像块的分层结构。编码树通常指的是编码树单元(CTU,Coding Tree Unit),是视频帧中最大的基本处理单元。
- CTU(Coding Tree Unit):CTU是一种分层结构,通常大小为64x64像素,可以递归地划分成更小的编码单元(CU,Coding Unit)。
- CU(Coding Unit):CTU可以划分成多个CU,CU是进行预测和变换的基本单元。CU的大小可以变化,通常是8x8到64x64的范围。
分割树(Partitioning Tree)
在编码过程中,CTU可以根据图像内容的复杂度进行分割,以提高压缩效率。分割树的概念包括QuadTree、SepTree、DualTree等。
QuadTree
四叉树(QuadTree)是一种数据结构,用于递归地将一个二维平面(如图像)划分为四个相等的子区域。四叉树在视频编码中非常重要,尤其是在高效视频编码(HEVC)和通用视频编码(VVC)标准中,用于编码单元(CU)的划分。
- 四叉树划分:CTU可以递归地分割成四个子CU,直到达到最小CU大小。
SepTree
SepTree(Separate Tree)用于表示在不同的颜色分量上进行独立分割的树结构。在视频编码中,Y、Cb和Cr分量可以分别进行分割。
- 分离树划分:Y、Cb、Cr分量分别进行QuadTree划分,这样可以更灵活地处理颜色信息。
DualTree
Separable Tree (SepTree) 是视频编码中一种用于灵活划分和处理编码单元(CU)的技术。它主要用于处理帧内(Intra)和帧间(Inter)预测时的不同需求,允许对亮度(Luma)和色度(Chroma)信号进行单独和独立的处理。
- 独立划分:允许亮度(Luma)和色度(Chroma)信号独立划分和编码。
- 灵活处理:可以对亮度和色度信号采用不同的预测模式和划分策略,提升编码效率和图像质量
-
帧内预测(Intra Prediction):
- 在帧内预测中,亮度信号和色度信号可能有不同的纹理特征和需求。通过 Separable Tree,可以对亮度和色度信号分别进行最优的预测和编码。
-
帧间预测(Inter Prediction):
- 在帧间预测中,运动补偿可能对亮度和色度信号有不同的影响。SepTree 可以独立处理亮度和色度信号的运动矢量,提高运动补偿的精度和效果。
Tree_D (多分辨率树)
Tree_D 或多分辨率树是一种用于更复杂视频编码场景的高级树结构。它允许在不同分辨率下进行自适应划分和编码。
- 多分辨率划分:在不同分辨率下进行块划分,以更精细地捕捉视频内容的细节。
- 应用场景:适用于高分辨率视频或复杂场景,需要更高的编码灵活性和效率。