HEVC帧间预测模式获取

2019-04-14 16:55发布

       昨天尝试用markdown编辑博客文章,结果将生成的html文件导入博客编辑的时候失败,还真是郁闷。暂时先不纠结用什么编辑BLOG的事了,还是赶紧看看HEVC帧间预测模式 吧。  
       现在我想知道每个编码CU的预测模式的情况,那么首先就是看代码如何存储这些信息的了。昨天,我已经列出了编码CU需要遍历的所有的模式所调用的函数,这些函数计算编码模式代价值之后,选出最优模式,最终代码必然会保存这些信息以便于解码端解码。好的,看看他们保存在哪里。  
       进入xCompressCU函数里面,可以看出函数传入的参数有rpcBestCU,rpcTempCU,uiDepth,eParentPartSize。后两个参数就不说了,前两个参数一个是存储最优编码的参数的,后一个用于临时存储CU信息,大概可以知道我们要的信息在rpcBestCU这个对象里面。 Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth, PartSize eParentPartSize )
在这个对象的类里面,存储了解码需要的信息。已编码的单元可以得到这些信息。在TComDataCU中可以得到的编码信息有很多,只要调用函数就可以获得。比如,需要得到帧间编码模式,则调用getPartitionSize(UInt uiIdx)。
//可以得到编码预测块的大小 enum PartSize { SIZE_2Nx2N, ///< symmetric motion partition, 2Nx2N对称分割 SIZE_2NxN, ///< symmetric motion partition, 2Nx N SIZE_Nx2N, ///< symmetric motion partition, Nx2N SIZE_NxN, ///< symmetric motion partition, Nx N SIZE_2NxnU, ///< asymmetric motion partition, 2Nx( N/2) + 2Nx(3N/2)非对称分割 SIZE_2NxnD, ///< asymmetric motion partition, 2Nx(3N/2) + 2Nx( N/2) SIZE_nLx2N, ///< asymmetric motion partition, ( N/2)x2N + (3N/2)x2N SIZE_nRx2N, ///< asymmetric motion partition, (3N/2)x2N + ( N/2)x2N SIZE_NONE = 15 };
举个栗子:如果编码块为是Inter2Nx2N模式,即遍历xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N, bFMD )之后存储。rpcTempCU->setPartSizeSubParts( PartSize eMode, UInt uiAbsPartIdx, UInt uiDepth )保存模式时需要调用的函数。
      目前统计的工作已经结束,下面会研究3D-HEVC区别于HEVC的一些算法上面。