自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 对于Merge列表的一些理解

Merge候选列表,就是极尽所能找到所有的与当前块运动信息有关的mvp信息,也就是找到对当前块运动信息有联系有相关性的所有的mvp信息,存储到merge列表中对当前块给与参考。对于Merge列表中的空域和时域以及成对平均mvp的添加,不多说。对于HMVP的添加,其实也满足上一段中的话“极尽所能找到所有的与当前块运动信息有关的mvp信息”。HMVP添加的mvp,就是:与当前块可能不相邻,但是运动信...

2019-12-30 20:52:16 827

原创 VTM3.0中判断一个pu的预测模式的过程

首先判断isIntra( cu ),如果是,则为帧内模式解码帧内预测的亮度色度预测模式如果否,则当前pu为帧间模式,接下里判断pu的帧间预测模式先判断skip_flag,为真时则为skip模式若skip_flag为false,判断merge_flag若merge_flag为true,判断affine_flag,若true,则为Affine_Merge模式若affine_flag为fals...

2019-12-27 23:21:16 367 2

原创 VTM3.0代码阅读:xReconIntraQT函数

xReconIntraQT函数在解码端实现帧内预测模式cu的解析恢复。根据解码得到的帧内亮度和色度的预测模式,得到预测像素pred,再由coeff经过反变换等操作得到残差像素resi,由pred和resi像素信息,就可以重建得到cu帧内模式重建像素reco。相比VTM1,函数只多了LM模式预测的代码,其它的函数流程等都没有变化。void DecCu::xReconIntraQT( Codin...

2019-12-27 23:17:44 345

原创 VTM3.0代码阅读:xReconInter函数

xDeriveCUMV函数获取到了skip、merge一类模式、以及inter_ME与Affine_ME模式的mv,xReconInter函数则由得到的mv重建cu的reco像素。首先由得到的mv,经过运动补偿MC,得到预测像素pred;再调用xDecodeInterTexture函数将coeff经过反变换,得到残差像素resi;pred像素和resi像素相加,即得到cu的重建像素reco。...

2019-12-27 23:10:24 406

原创 VTM3.0代码阅读:xDeriveCUMV函数

xDeriveCUMV函数根据解码得到的预测参数数据,计算得到mv。函数内根据解码得到的各个模式的数据,获取到MMVD、三角预测、AffineMerge、普通merge、AffineME、普通interME等模式的运动信息。函数中没有涉及MHIntra模式,是因为:MHIntra中的intra_dir已经在coding_unit()时解码获得,MHIntra模式的inter信息,其实不需要特别...

2019-12-27 23:02:27 584

原创 VTM3.0代码阅读:decompressCtu函数

decompressCtu函数对coding_tree_unit函数解码得到的数据进行解析恢复,根据解码得到的运动参数恢复ctu的重建像素reco信息。入口参数cs是picture的cs,其中包括了一帧内所有ctu的所有信息。函数获取ctu区域内的所有cu,判断这些cu的预测模式是intra还是inter,然后分别进行帧内和帧间的像素重建。函数流程与VTM1中基本没有差别,当然,其中需要解析...

2019-12-27 22:52:44 250

原创 VTM3.0代码阅读:解码端coding_unit函数

coding_unit函数解码一个cu的预测模式、预测数据、残差数据等信息。其实,编码端的coding_unit是如何编码的,解码端的coding_unit按照相同的顺序如何解码就行。函数return一个bool值,表示当前cu是否是这一帧的最后一个cu。由于VTM3.0中加入了很多的编码工具,所以相较于VTM1,coding_unit函数会对更多的模式的信息进行解码.对于帧内pu的几种模...

2019-12-27 22:47:54 432

原创 VTM3.0代码阅读:解码端coding_tree函数

coding_tree函数通过递归调用,寻址ctu中的所有cu,对每个cu调用coding_unit解码cu信息。其实,coding_tree函数根据解码得到的QT和MT的flag,逐步递归划分当前区域直到cu,本质就是在解码端重建编码端的划分树,直到叶子节点解码cu。本函数与VTM1中代码的大致流程一致,最大区别就是对>64的DualITree块进行特别处理:对于>64的Dua...

2019-12-27 22:34:51 323

原创 VTM3.0代码阅读:解码端coding_tree_unit函数

解码端的coding_tree_unit函数会返回一个bool值,赋给isLastCtuOfSliceSegment,标识当前解码ctu是否是一帧的最后一个ctu,如果是最后一个ctu,decompressCtu之后还需要解码剩余bit。入口参数cs是picture的cs,包含存储了一帧内所有ctu的所有信息,area即当前解码ctu的区域。函数中调用coding_tree寻址解码ctu中的所有...

2019-12-27 22:22:47 235

原创 VTM3.0代码阅读:decompressSlice函数

decompressSlice函数是解码端解码ctu数据的统领函数。其中调用coding_tree_unit函数实现ctu数据的解码,调用decompressCtu函数实现ctu数据和像素信息的解析恢复。大致流程可以总结为:当前帧picture.cs的各种数据的初始化,方便ctu各种数据的解码和存储;读取到每个ctu的编码信息数据流,每个sub数据流可以解码得到一个ctu的数据;for循环...

2019-12-27 22:10:18 145

原创 merge、skip、PCM、TransformSkip的区别

merge模式构建merge候选列表,传递mergeIdx和coeff数据skip模式作为merge模式的特例,只传递mergeIdx,对于pred和orig的像素残差不传送PCM模式直接将原始像素信息直接传递TransformSkip模式,是对预测的残差像素resi不进行变换操作,直接传送残差像素...

2019-12-27 19:44:43 891

原创 VTM3.0代码阅读:编码端coding_unit函数

coding_unit函数,对一个cu中的所有预测信息、变换系数等信息进行编码。其实对一个cu的编码,主要编码3个信息:预测模式、预测数据、变换系数。由于VTM3中加入了很多的编码工具,所以相较于VTM1,coding_unit函数会对更多的模式的信息进行编码。对于帧内pu的几种模式的码字编写过程没有细看,以后补上。void CABACWriter::coding_unit( const ...

2019-12-27 19:41:04 532 1

原创 VTM3.0代码阅读:编码端coding_tree函数

coding_tree递归调用,按照ctu在xCompressCU中得到的划分树,寻址到ctu中的每个cu,对于每个cu,调用coding_unit函数进行编码。本函数基本上和VTM1中的流程一致,但要对>64的DualITree块进行特别处理:对与>64的DualITree块,在QT时要对亮度和色度统一进行,保持QT对亮度和色度划分一致。对于>64的DualITree块,...

2019-12-27 19:32:25 418

原创 VTM3.0代码阅读:编码端coding_tree_unit函数

coding_tree_unit函数进行一个CTU的信息的编码,将CTU的信息编码为二进制码。coding_tree_unit函数在两个地方会被调用:第一个地方是EncSlice::encodeCtus,这里调用coding_tree_unit仅仅是为了更新各个上下文模型的参数,并没有真的编码传输;第二个地方是EncSlice::encodeSlice,这里是真正的编码端将CTU信息编码为二...

2019-12-27 19:25:26 397 1

原创 VTM3.0代码阅读:xRecurIntraChromaCodingQT函数

xRecurIntraChromaCodingQT在estIntraPredChromaQT函数中被调用,用来计算每个帧内色度预测模式时的cost。流程:首先判断tu是否需要划分,若tu划分时,对每个划分出的小tu递归调用本函数,计算每个小tu的在chromaIntra模式下的最优的cost,最后求和;如果tu不划分,分别对Cb和Cr通道进行处理。对于每个通道,是/否TS模式+是/否跨组件预...

2019-12-27 19:15:13 189 1

原创 VTM3.0代码阅读:xGetLMParameters函数

xGetLMParameters在predIntraChromaLM函数中被调用,来获取MMLM和MDLM模式的线性模型参数。函数搜寻参考像素中亮度像素的最大最小点,保存两个点的luma和chroma值。由保存的亮度像素最大最小点的值即可确定线性模型参数a、b、shift。void IntraPrediction::xGetLMParameters(const PredictionUnit ...

2019-12-27 19:04:23 347

原创 VTM3.0代码阅读:predIntraChromaLM函数

predIntraChromaLM在estIntraPredChromaQT函数中被调用,来进行帧内色度模式中,MMLM、LM_T和LM_L模式的预测。函数首先区分三种LM模式,获得该LM模式时,pu的参考块的亮度像素经采样之后的像素Temp;然后调用xGetLMParameters,获取LM模式中线性模型的几个参数:a, b, iShift;然后调用linearTransform函数,由线...

2019-12-27 18:58:50 291

原创 VTM3.0代码阅读:xGetLumaRecPixels函数

xGetLumaRecPixels函数在estIntraPredChromaQT函数中被调用,以获取MMLM和MDLM模式中的luma重建像素采样值,包括左和上的参考像素采样,以及pu内luma采样:X X X X XX Y YX Y YXX如上X和Y的排列所示,为MDLM模式采样,X代表参考像素采样,Y表示pu内luma像素采样。MMLM模式没有左下和右上部分的多余X。void I...

2019-12-27 18:43:02 270

原创 VTM3.0代码阅读:getIntraChromaCandModes函数

getIntraChromaCandModes在estIntraPredChromaQT函数中被调用,用来构建帧内色度预测时的候选模式列表,帧内色度预测就是将该列表中的模式。色度模式列表的长度为8。流程:预置色度预测模式planar、ver、hor、DC、LM、LM_L、LM_T、DM;获取色度块对应亮度块的lumaMode;如果前4个候选中有和lumaMode相同的,修改为模式66。...

2019-12-27 18:03:29 146

原创 VTM3.0代码阅读:estIntraPredChromaQT函数

estIntraPredLumaQT进行帧内色度模式的预测,获取最优的色度帧内模式。getIntraChromaCandModes函数得到色度的8个候选模式,相比VTM1多了LM、LM_T和LM_L模式。首先对获取的色度帧内模式SATD粗选择,其中只检查DC、VER、HOR、LM_T、LM_L这几种模式;去除掉SATD后cost最大的两种帧内色度模式;最后通过RDO选取最优色度帧内模式。...

2019-12-27 17:58:57 187

原创 VTM3.0代码阅读:xIntraCodingTUBlock函数

xIntraCodingTUBlock在xRecurIntraCodingLumaQT函数和xRecurIntraChromaCodingQT函数中均会被调用,进行给定变换模式和帧内预测模式下的一系列操作。调用xIntraCodingTUBlock函数的目的,就是对tu在给定变换模式和帧内模式的情况下,求得解码端reco像素和orig的失真。函数流程:对pu进行帧内预测得到pred像素,由p...

2019-12-27 17:53:51 219

原创 VTM3.0代码阅读:xRecurIntraCodingLumaQT函数

xRecurIntraCodingLumaQT是lumaIntra预测模式中最后进行RDO选最优模式的主要函数,xRecurIntraCodingLumaQT函数的作用就是计算一个具体的lumaIntra模式时的cost。由于函数中涉及到很多的tu块变换方面的知识,没有太懂,以后对VTM变换量化方面看懂之后补充本函数和VTM1中基本没有任何区别:VTM1.0代码阅读:xRecurIntraC...

2019-12-27 17:45:10 238

原创 VTM3.0代码阅读:getIntraMPMs函数

getIntraMPMs在estIntraPredLumaQT函数中被调用,用来获取MPM候选模式,MPM模式存储在mpm中。流程大致为:获取左侧和上侧的pu帧内预测模式,然后按照left和above模式的情况,给mpm列表赋值。MPM列表长度为6。由于宏JVET_L0165_6MPM开启,所以删掉了一些无用的代码。int PU::getIntraMPMs( const Prediction...

2019-12-27 17:40:20 218

原创 VTM3.0代码阅读:xPredIntraAng函数

xPredIntraAng函数进行2到66的角度模式的预测,pSrc即参考像素,pDst即需要得到的pu预测像素,dirMode为帧内预测角度模式号。相比于VTM1中,函数由于MRL模式产生了很多的调整。具体的角度预测模式预测像素计算时更加复杂。角度预测计算像素的过程,变得复杂了。以后细看void IntraPrediction::xPredIntraAng( const CPelBuf &...

2019-12-27 17:36:46 446

原创 VTM3.0代码阅读:predIntraAng函数

predIntraAng函数进行帧内角度预测,根据给定的帧内预测模式,求得该模式下的预测像素piPred。相比于VTM1,函数在进行完帧内DC、planar、角度预测之后,最后会判断进行PDPC。相比于VTM1,函数中多了一些MRL和宽角度模式的代码。planar和DC模式的处理过程和VTM1中没有任何变化。void IntraPrediction::predIntraAng( const...

2019-12-27 17:33:33 272

原创 VTM3.0代码阅读:initIntraPatternChType函数

initIntraPatternChType函数在帧内预测的过程中会被调用,完成当前块帧内预测参考像素模板的初始化工作。initIntraPatternChType用来准备好帧内预测过程中需要用到的当前pu左侧和上侧的参考像素。获取当前pu的参考模板像素,存入m_piYuvExt,之后对参考像素滤波,存入m_piYuvExt,这些过程其实和书上说的过程是差不多的。相比于VTM1,本函数基本没有...

2019-12-27 17:28:41 276

原创 VTM3.0代码阅读:estIntraPredLumaQT函数

estIntraPredLumaQT进行帧内亮度模式的预测,在67种帧内亮度模式中,获取帧内亮度模式的最优模式。首先进行SATD粗选择,对HEVC中的35种角度模式进行SATD选择;再分别对SATD所选择的角度模式的左右两种角度模式(即模式号±1),进行再一次的SATD;然后进行MRL模式的检测;再添加亮度的MPM模式;最后对列表中的帧内亮度模式进行RDO,分别调用xRecurIntra...

2019-12-27 17:23:31 376

原创 VTM3.0代码阅读:xCheckRDCostIntra函数

xCheckRDCostIntra为帧内预测的总入口函数,在xCompressCU函数中被调用,用来check帧内预测模式,获取intra模式的最优帧内模式的数据。其中调用estIntraPredLumaQT函数和estIntraPredChromaQT函数,分别获得最优亮度帧内模式和色度帧内模式。函数相比于VTM1中基本没有变化,函数流程一样。void EncCu::xCheckRDCos...

2019-12-27 16:57:15 642

原创 VTM3.0代码阅读:xPredAffineInterSearch函数

xPredAffineInterSearch函数在predInterSearch函数中被调用,用来计算Affine_ME模式,进行4参数和6参数Affine_ME模式的计算。函数流程和普通的interME的函数流程很像,即和predInterSearch函数流程很相似:初始化、单向、双向、数据存储。函数中调用xEstimateAffineAMVP函数,得到AffineME模式的各控制点的CPM...

2019-12-27 16:51:54 841 1

原创 VTM3.0代码阅读:运动估计中xTZSearch与xTZSearchHelp等函数

xTZSearch是interME模式的重要过程,它是inter运动估计过程中的一种整像素搜索模式。其实,VTM3.0中整像素运动估计过程与VTM1.0代码是没有区别的,xTZSearch、xTZ8PointDiamondSearch、xPatternSearchFracDIF以及xTZSearchHelp函数,基本都没有任何差别。(xPatternSearchFracDIF和xTZSearchH...

2019-12-27 16:37:21 538

原创 VTM3.0代码阅读:xMotionEstimation函数

inter_ME模式中,xMotionEstimation函数实现运动估计,利用得到的AMVP最优候选为起点,搜索范围内的最佳匹配块,从而确定mv。IntTZSearchStruct结构体在ME过程中很重要,包含了搜索匹配过程的所有关键数据:typedef struct { SearchRange searchRange; //搜素范围 const CPelBuf* pc...

2019-12-27 16:23:57 734

原创 VTM3.0代码阅读:xGetTemplateCost函数

xEstimateMvPredAMVP函数在获取到AMVP列表之后,调用xGetTemplateCost函数,来逐个计算每个AMVP候选的失真大小。参数cMvCand,即为需要计算失真的AMVP候选。iMVPIdx为AMVP候选在列表中的idx,iMVPNum为AMVP候选列表的大小。失真的计算,就是AMVP候选mv所指向的pred像素predBuf,与pu原始像素origBuf之间的失真。x...

2019-12-27 16:18:50 228

原创 VTM3.0代码阅读:fillMvpCand函数

fillMvpCand在xEstimateMvPredAMVP函数中被调用,用来构建AMVP列表,将AMVP候选存储于amvpInfo。AMVP列表的构建,添加顺序为:1.左下、左pu的无缩放信息2.左下、左pu的缩放信息3.右上、上、左上pu无缩放信息4.如果左下和左的pu都无效,那么添加右上、上、左上pu的缩放信息5.添加TMVP6.添加HMVP7.补0其中,调用addMVP...

2019-12-27 16:15:58 209

原创 VTM3.0代码阅读:xEstimateMvPredAMVP函数

AMVP运用于inter_ME模式的时候。xEstimateMvPredAMVP进行AMVP,获得当前pu的相邻运动信息,构建AMVP列表,最终选择出最优的MVP。AMVP最终获得的MVP作为ME的起点。xEstimateMvPredAMVP函数流程很简单:fillMvpCand函数构建AMVP列表;然后遍历列表中所有AMVP候选,通过xGetTemplateCost函数得到失真;最终选...

2019-12-27 15:57:11 242

原创 VTM3.0代码阅读:predInterSearch函数

predInterSearch函数在xCheckRDCostInter中被调用,用来获取inter_ME以及Affine_ME模式下的最优inter运动信息。首先对单向预测,分别对L0和L1的所有帧进行AMVP、ME,得到各个参考帧下的各种最优的运动信息;再进行双向预测,双向预测用到了单向时得到的各帧的各种运动信息,通过4次迭代,找到最优的双向运动信息;对比前向、后向和双向预测的cost,取...

2019-12-27 15:52:57 745 1

原创 VTM3.0代码阅读:xCheckRDCostInter函数

xCheckRDCostInter函数在xCompressCU中被调用,用来check普通帧间模式,也就是inter_ME模式。inter_ME模式通过AMVP得到相邻块中的最优的两个运动信息,以此作为运动估计的起始点,然后经过ME,获得MVP和MVD等inter运动信息。在通过ME得到运动信息之后,即MVP之后,通过MC得到pred像素。这些都在predInterSearch函数中实现。(p...

2019-12-27 15:48:14 495

原创 VTM3.0代码阅读:getTriangleMergeCandidates函数

getTriangleMergeCandidates函数在xCheckRDCostMergeTriangle2Nx2N函数中被调用,来构建三角预测的merge候选列表。三角预测的单向列表构建:首先类似merge候选列表构建直到TMVP,再由candidate来构建三角预测的单向列表。void PU::getTriangleMergeCandidates( const PredictionUni...

2019-12-27 15:25:07 128

原创 VTM3.0代码阅读:xCheckRDCostMergeTriangle2Nx2N函数

三角预测模式,首先会获取一个三角预测单向候选模式列表,表长为5,就像普通merge模式的函数流程那样;然后MC计算5个候选的预测像素pred,方便之后的40种三角组合模式的pred像素加权计算;对40种三角组合模式进行SATD,计算出最优的3种组合模式;对SATD得到的最优的三角组合预测模式,RDO得到最优的一种三角组合预测模式。void EncCu::xCheckRDCostMergeT...

2019-12-27 15:16:33 186

原创 VTM3.0代码阅读:Affine模式运动补偿时xPredAffineBlk函数

xPredAffineBlk函数在pu块的运动补偿的时候被调用,处理Affine模式时的运动补偿任务,根据控制点运动信息CPMVP获取预测像素pred。_mv为affine模式2或3个控制点的CPMVP,dstPic为需要得到的Affine模式预测像素。运动补偿函数见:VTM3.0代码阅读:motionCompensation函数void InterPrediction::xPredAff...

2019-12-27 14:59:21 701

原创 VTM3.0代码阅读:运动补偿MC时xPredInterBlk函数

xPredInterBlk函数在pu块的运动补偿的时候被调用,处理非Affine帧间预测模式时的运动补偿任务,根据运动信息获取预测像素pred。xPredInterBlk调用了filterHor和filterVer进行pu参考块位置的亚像素插值,得到pu预测像素。与VTM1相比,函数中多了一些BIO的一些代码,BIO代码以后理解。运动补偿函数见: VTM3.0代码阅读:motionCompe...

2019-12-27 10:27:43 890

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除