JEM
文章平均质量分 81
小小柴
这个作者很懒,什么都没留下…
展开
-
VVC/JEM代码学习8:predIntraAng
(个人理解) predIntraAng()主要完成65种角度模式(外加DC和planar模式)的预测,预测之前还要对参考像素进行相应的滤波操作。Void TComPrediction::predIntraAng( const ComponentID compID, UInt uiDirMode, Pel* piOrg /* Will be null for decoding */,...原创 2018-01-22 12:32:41 · 846 阅读 · 4 评论 -
VVC/JEM代码学习22:xCheckRDCostInterKLT
在JEM中新加入了KLT模式,暂时还没看出来哪里体现出了KLT,但是此函数是在执行完帧间,帧内,PCM模式后才会执行。与帧间,帧内,PCM也形成了竞争关系。#if VCEG_AZ08_INTER_KLT#if VCEG_AZ08_USE_KLT if (sps.getUseInterKLT())//JEM中新加的; {#endif if (!rpcBestCU->is...原创 2018-04-01 20:47:50 · 529 阅读 · 0 评论 -
VVC/JEM代码学习15:xCheckRDCostAffineMerge2Nx2N
Affine模式是JEM中新加的,属于帧间预测,与FRUC,merge,inter形成竞争关系。#if COM16_C1016_AFFINEVoid TEncCu::xCheckRDCostAffineMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU ){ assert( rpcTempCU->ge...原创 2018-04-01 16:35:47 · 832 阅读 · 0 评论 -
VVC/JEM代码学习12:transformNxN
对残差次数进行量化编码的函数,相比于HEVC,JEM中加入了二次变换,即在第一次主变换又进行第二次变换;此外,还加入了EMT,和DCT2是并列关系,根据相关索引进行选择;Void TComTrQuant::transformNxN( TComTU & rTu, const ComponentID ...原创 2018-03-27 22:30:24 · 640 阅读 · 1 评论 -
VVC/JEM代码学习23:xRecurIntraCodingLumaQT()
在执行亮度分量的预测时,在确定好最后的要执行RD cost的候选模式后,对于每个模式,都调用一遍xRecurIntraCodingLumaQT(),在此函数里面完成预测,求残差,变换量化和重建,并返回失真。VoidTEncSearch::xRecurIntraCodingLumaQT(TComYuv* pcOrgYuv, ...原创 2018-04-22 22:46:38 · 740 阅读 · 0 评论 -
VVC/JEM代码学习24:xRecurIntraChromaCodingQT()
在执行色度分量的预测时,对色度分量的11种候选模式都调用一次xRecurIntraChromaCodingQT函数,在里面完成预测,求残差,变换量化和重建,并返回失真。VoidTEncSearch::xRecurIntraChromaCodingQT(TComYuv* pcOrgYuv, TComYuv* p...原创 2018-04-22 22:50:18 · 519 阅读 · 0 评论 -
H.266中的各类滤波器总结
一直搞不清楚各种滤波器之间的区别,今天好好看看记录下来(持续更新)。一.参考采样中的平滑滤波在函数initIntraPatternChType里面,完成对相邻参考采样的填充后,要对参考采样进行平滑滤波;平滑滤波又分为强平滑滤波和常规平滑滤波。强平滑滤波的条件:只用于亮度分量且块的宽大于32且相邻采样间的差大于某个阈值 Bool useStrongIntraSmoothing = isL...原创 2018-04-15 17:40:41 · 1843 阅读 · 2 评论 -
VVC/JEM代码学习26:m_pcTrQuant->transformN*N
在H.266中,做完主变换后,还要进行二次变换,然后才进行量化;Void TComTrQuant::transformNxN( TComTU & rTu, const ComponentID compID, Pel ...原创 2018-05-08 22:20:58 · 706 阅读 · 1 评论 -
VVC/JEM代码学习26:xIntraCodingTUBlockTM
考虑到帧内和帧间有很多相似的patches,H.266提出了信号独立变换(SDT)技术,利用这样的相关性通过KLT的方法提高编码效率。这个训练的KLT扮演了一个转换的角色,旨在更有效地压缩能量。 通过本函数来实现SDT技术,在此函数中,首先,获得了一个由重构的左上模板t_b和编码块的预测块p组成的参考patch R。然后,使用参考patch在重建区域搜索N个最相似的patc...原创 2018-05-08 22:37:49 · 660 阅读 · 0 评论 -
H.266中帧内预测的亮度预测模式和色度模式的熵编解码
一.帧内预测的亮度模式的熵编码过程将67种预测模式分为3部分:a.6种MPM模式; 对于使用6 MPMs选择的模式的熵编码,使用一个截断的一元码。前三个bins用上下文进行编码,上下文取决于与当前正在被发送的bin相关的MPM模式。MPM模式可以被分成3类:(a)水平主导的模式,即MPM模式的编号小于或等于对角方向的模式编号(b)垂直主导的模式,即MPM模式的编号大于对角方...原创 2018-04-26 21:04:48 · 1427 阅读 · 1 评论 -
VVC/JEM代码学习27:xIntraRecBlk
VoidTDecCu::xIntraRecBlk( TComYuv* pcRecoYuv, TComYuv* pcPredYuv, TComYuv* pcResiYuv, const ComponentID co...原创 2018-06-09 16:38:30 · 770 阅读 · 0 评论 -
在编解码参考软件中设置全局变量统计数据
今天想在解码端加一个全局变量统计模式信息; 一开始,现在decmain.cpp中的main()函数外面声明了几个全局变量,然后在main()函数里面进行初始化; 接着在TDecSbac.cpp中的parseIntraDirLumaAng函数上面用extern声明了这几个变量,在parseIntraDirLumaAng函数里面对这几个全局变量进行累加计算; ...原创 2018-06-26 11:22:59 · 416 阅读 · 0 评论 -
VVC/JEM代码学习20:xCheckRDCostIntra
在执行完所有的帧间模式的预测后,才执行帧内模式预测。Void TEncCu::xCheckRDCostIntra( TComDataCU *&rpcBestCU, TComDataCU *&rpcTempCU, Double &cos...原创 2018-04-01 19:57:51 · 825 阅读 · 0 评论 -
VVC/JEM代码学习18:xCheckRDCostInter
在xCheckRDCostMerge2N*2N执行完,如果m_useEarlySkipDetection==false,则继续执行xCheckRDCostInter函数。(如果m_useEarlySkipDetection==true,则此函数在帧间的最开始执行)#if AMP_MRGVoid TEncCu::xCheckRDCostInter( TComDataCU*& rpcBest...原创 2018-04-01 19:43:08 · 814 阅读 · 3 评论 -
VVC/JEM代码学习9:解码框架解析
只简单写了几个最重要的几个函数,调用层次关系为1-->2-->3-->4-->5-->6-->7-->8-->9-->10-->11,其中最重要的解码函数是xDecompressCU,在此函数完成图像的解码。1.mian() { cTAppDecTop.decode(); }2.Void TAppDe...原创 2018-01-21 23:13:31 · 1272 阅读 · 0 评论 -
JEM中的数据结构和访问方式
1.LCU和子CU------所有的CU都通过TComDataCU *指针来处理------从LCU开始,子CU通过Z扫描进行迭代处理2.TComDataCU类里面有我们需要的所有信息------真正的数据存储只在LCU层进行分配------在子CU中,数据存储指向LCU存储中的合适位置3.CU中的信息都通过索引来进行访问------基本上,每个索引就翻译 2018-01-12 16:24:35 · 597 阅读 · 2 评论 -
VVC/JEM代码学习6:xCompressCU()
xCompressCU是一个递归函数,对于每一个CU,该函数都会被调用,主要是计算当前CU编码之后代价,然后再计算当前CU的每一个子CU编码后的代价,和当前CU的编码代价相比较,用来决定是否对当前CU进行分割。这个函数太复杂啦,继续慢慢学习吧。Void TEncCu::xCompressCU( TComDataCU*& rpcBestCU, TComDataCU*& r...原创 2018-01-17 15:29:20 · 2487 阅读 · 7 评论 -
VVC/JEM代码学习5:predLMIntraChroma
(个人理解) 该技术(称为CCLM)是JEM里新加的分量间线性模型预测技术,顾名思义就是利用亮度分量预测色度分量,目的是减少分量间的冗余。该函数的作用是利用重建的亮度采样计算色度分量的预测值。计算之前,还要利用当前块的邻近亮度采样和色度采样通过线性回归计算两个系数。CCLM又分为单一模型CCLM和多模型CCLM(MMLM)。单一模型可以计算出一组系数α和β。而MMLM根据阈值将亮度和色度...原创 2018-01-15 23:26:20 · 487 阅读 · 0 评论 -
VVC/JEM代码学习7: xIntraCodingTUBlock
总结一下,xIntraCodingTUBlock()这个函数里面进行了多个过程,包括预测值的计算,残差信号的计算,变换和量化,反变换和反量化,重建信号,更新失真。其中,在进行预测值计算时分成两种情况,一种是使用CCLM进行色度预测-- 一种...原创 2018-01-18 12:13:32 · 396 阅读 · 0 评论 -
JEM的调用结构
简单记录了最重要函数的调用关系: encode()--->encode()--->compressGOP()--->compressSlice() --->compressctu()--->xcompressCU()--->xCheckRDCostIntra()等等; 主要是对这几个函数的调用关系有些疑问,先记录下来,慢慢学习。1.int m原创 2018-01-17 22:52:50 · 641 阅读 · 0 评论 -
VVC/JEM代码学习10:xEncodeCU
#if JVET_C0024_QTBTVoid TEncCu::xEncodeCU( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth, UInt uiWidth, UInt uiHeight, UInt uiSplitConstrain )#elseVoid TEncCu::xEncodeCU( TComDataCU* pcCU, UInt...原创 2018-03-06 17:20:24 · 487 阅读 · 10 评论 -
VVC/JEM代码学习13 : SAOProcess
在compressSlice和encodeSlice之间,还有两个主要的处理函数,一个是SAOProcess,一个是ALFProcess(ALF是JEM中新加的);也就是说,当前帧完成重构后要对重构图像进行样点自适应补偿和自适应环路滤波,最后才进行真正的熵编码。 样点自适应补偿的原理是由于量化导致高频信息的丢失从而在解码图像上产生振铃效应,为此,样点自适应补偿技术从像素域入手,对重构...原创 2018-03-29 23:29:30 · 1453 阅读 · 0 评论 -
VVC/JEM代码学习14:loopFilterPic
在代码学习13中,记录了SAO技术的详细过程,其实在执行SAO之前,要先对重建图像进行去方块滤波;去方块滤波和样点自适应补偿合并称为环路滤波。今天就记录一下去方块滤波的详细过程。 去方块滤波的原理:由于在编码时各个块的变换量化相互独立,对不同的块使用了不同的量化参数,导致每个块引入的量化误差大小不一致,导致相邻块边界的不连续性。此外,运动补偿预测过程中,相邻块的预测值可能来自不同图像的不同位置...原创 2018-03-30 23:26:19 · 966 阅读 · 0 评论 -
VVC/JEM代码学习16:xCheckRDCostMerge2Nx2N
在执行完xCheckRDCostAffineMerge2N*2N函数后,执行此函数,在HEVC中,merge的候选模式个数为5个,在JEM中,候选模式的个数增加到了7个(加了两个额外ATMVP和STMVP推导得到的merge模式)。并且为了加速,先对7个候选模式计算SATD,选取其中4个最小的模式,并且如果在前四个中有模式的代价大于最小SATD的1.25倍,则该模式及其后面模式被取消候选资格。最后...原创 2018-04-01 18:14:38 · 778 阅读 · 0 评论 -
VVC/JEM代码学习17:xCheckRDCostMerge2Nx2NFRUC
在执行完xCheckRDCostMerge2N*2N函数完后,会执行此函数。FRUC包含两种技术,一种是模板匹配,一种是双边匹配。该计算的关键在于怎么推导MV,下次再看吧。#if VCEG_AZ07_FRUC_MERGEVoid TEncCu::xCheckRDCostMerge2Nx2NFRUC( TComDataCU*& rpcBestCU, TComDataCU*& rpc...原创 2018-04-01 18:31:42 · 486 阅读 · 0 评论 -
修改代码注意事项(持续更新)
都是用鲜血换来的教训: 1).如果在修改代码过程中,扩展了右上方和左下方的相邻重建值,一定要记得修改对应存储数组的大小。 2)....原创 2018-06-26 17:09:31 · 2069 阅读 · 1 评论