最近,由于研究需要,打算统计深度视频编码时的编码块的分割情况和编码模式的选择情况,就先来看看我们的3D-HEVC测试平台是怎么编码存储这些信息的吧。
作为新一代视频编码标准的3D扩展,3D-HEVC编码独立视点的框架仍然是HEVC,不考虑对于多视点编码和深度视频编码添加的编码技术,其骨架保持的和HEVC一模一样,研究3D-HEVC就相当温习HEVC了。
那么,复习开始,看代码
//这里开始Compress编码单元
Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth, PartSize eParentPartSize )
在xCompressCU函数中,编码块预测调用的主要函数有这些:
//判断当前编码slice!=I_SLICE开始进行帧间预测
if(m_pcEncCfg->getUseEarlySkipDetection())// 这里是一个快速算法的判断语句,默认不执行这里
{
rpcTempCU->setICFlagSubParts(bICFlag, 0, 0, uiDepth);
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N, bFMD );
rpcTempCU->initEstData( uiDepth, iQP );
//by Competition for inter_2Nx2N
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N );
rpcTempCU->initEstData( uiDepth, iQP );
//by Competition for inter_2Nx2N
rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
}
帧间预测首先进行skip和merge模式的计算,调用 xCheckRDCostMerge2Nx2N函数
xCheckRDCostMerge2Nx2N( rpcBestCU, rpcTempCU, &earlyDetectionSkipMode );//by Merge for inter_2Nx2N
//再开始进行2Nx2N预测模式的代价值计算,调用xCheckRDCostInter函数
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N, bFMD );
对于非skip模式的代价值计算都是调用xCheckRDCostInter函数,对于不同的预测模式,其中的SIZE参数不同
//NxN预测模式
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN, bFMD );
//Nx2N
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N, bFMD );
//2NxN
xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxN, bFMD );
//然后进行AMP非对称分割预测,同样调用xCheckRDCostInter函数,函数的参数分别为SIZE_2NxnU, SIZE_2NxnD, SIZE_nLx2N, SIZE_nRx2N
最后进行帧内模式的计算,调用 xCheckRDCostIntra函数
xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_2Nx2N );
xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_NxN );
其中还调用了PCM模式的计算,这个模式我的算法中没有做过改进,之后就不展开研究了,调用了xCheckIntraPCM函数。
大概的帧间预测编码的框架是这样的,对于每一个函数具体实现以后再逐步分析完整。