HM编码器代码阅读(39)——帧内预测(六)帧内预测之色度色度的操作
来源:互联网 发布:人工智能的原理是什么? 编辑:程序博客网 时间:2024/05/18 03:17
色度分量的帧内预测
入口函数
对色度分量进行帧内预测的入口函数是:estIntraPredChromaQT
1、调用getAllowedChromaDir构造色度分量的帧内预测候选模式列表2、遍历候选模式列表,对于每一个模式,调用xRecurIntraChromaCodingQT进行预测、变换量化操作,并得出率失真代价
3、通过比较率失真代价得到最优的模式
Void TEncSearch::estIntraPredChromaQT( TComDataCU* pcCU, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, TComYuv* pcResiYuv, TComYuv* pcRecoYuv,UInt uiPreCalcDistC ){UInt uiDepth = pcCU->getDepth(0);UInt uiBestMode = 0;UInt uiBestDist = 0;Double dBestCost = MAX_DOUBLE;//----- init mode list -----UInt uiMinMode = 0;UInt uiModeList[ NUM_CHROMA_MODE ];pcCU->getAllowedChromaDir( 0, uiModeList );UInt uiMaxMode = NUM_CHROMA_MODE;//----- check chroma modes -----for( UInt uiMode = uiMinMode; uiMode < uiMaxMode; uiMode++ ){//----- restore context models -----m_pcRDGoOnSbacCoder->load( m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST] );//----- chroma coding -----UInt uiDist = 0;pcCU->setChromIntraDirSubParts ( uiModeList[uiMode], 0, uiDepth );xRecurIntraChromaCodingQT ( pcCU, 0, 0, pcOrgYuv, pcPredYuv, pcResiYuv, uiDist );if( pcCU->getSlice()->getPPS()->getUseTransformSkip() ){m_pcRDGoOnSbacCoder->load( m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST] );}UInt uiBits = xGetIntraBitsQT( pcCU, 0, 0, false, true, false );Double dCost = m_pcRdCost->calcRdCost( uiBits, uiDist );//----- compare -----if( dCost < dBestCost ){dBestCost = dCost;uiBestDist = uiDist;uiBestMode = uiModeList[uiMode];UInt uiQPN = pcCU->getPic()->getNumPartInCU() >> ( uiDepth << 1 );xSetIntraResultChromaQT( pcCU, 0, 0, pcRecoYuv );::memcpy( m_puhQTTempCbf[1], pcCU->getCbf( TEXT_CHROMA_U ), uiQPN * sizeof( UChar ) );::memcpy( m_puhQTTempCbf[2], pcCU->getCbf( TEXT_CHROMA_V ), uiQPN * sizeof( UChar ) );::memcpy( m_puhQTTempTransformSkipFlag[1], pcCU->getTransformSkip( TEXT_CHROMA_U ), uiQPN * sizeof( UChar ) );::memcpy( m_puhQTTempTransformSkipFlag[2], pcCU->getTransformSkip( TEXT_CHROMA_V ), uiQPN * sizeof( UChar ) );}}//----- set data -----UInt uiQPN = pcCU->getPic()->getNumPartInCU() >> ( uiDepth << 1 );::memcpy( pcCU->getCbf( TEXT_CHROMA_U ), m_puhQTTempCbf[1], uiQPN * sizeof( UChar ) );::memcpy( pcCU->getCbf( TEXT_CHROMA_V ), m_puhQTTempCbf[2], uiQPN * sizeof( UChar ) );::memcpy( pcCU->getTransformSkip( TEXT_CHROMA_U ), m_puhQTTempTransformSkipFlag[1], uiQPN * sizeof( UChar ) );::memcpy( pcCU->getTransformSkip( TEXT_CHROMA_V ), m_puhQTTempTransformSkipFlag[2], uiQPN * sizeof( UChar ) );pcCU->setChromIntraDirSubParts( uiBestMode, 0, uiDepth );pcCU->getTotalDistortion () += uiBestDist - uiPreCalcDistC;//----- restore context models -----m_pcRDGoOnSbacCoder->load( m_pppcRDSbacCoder[uiDepth][CI_CURR_BEST] );}
建立候选模式列表
1、色度模式的候选模式是:planar模式,DC模式、水平模式、垂直模式,对应的亮度分量的模式
2、调整模式:如果对应的亮度分量的模式和(planar,DC、水平、垂直)这几种模式中的一个重复了,那么把对应亮度分量模式改成模式34
3、遍历候选的模式,选出最优的模式,然后直接对色度分量的模式的编号进行编码(会经过一定的判断和调整,细节就不说了)。附色度分量的模式的编号:
模式0:planar
模式1:垂直模式(即角度模式26)
模式2:水平模式(即角度模式10)
模式3::DC模式
模式4:对应亮度分量模式
Void TComDataCU::getAllowedChromaDir( UInt uiAbsPartIdx, UInt* uiModeList ){uiModeList[0] = PLANAR_IDX;uiModeList[1] = VER_IDX;uiModeList[2] = HOR_IDX;uiModeList[3] = DC_IDX;uiModeList[4] = DM_CHROMA_IDX;UInt uiLumaMode = getLumaIntraDir( uiAbsPartIdx );for( Int i = 0; i < NUM_CHROMA_MODE - 1; i++ ){if( uiLumaMode == uiModeList[i] ){uiModeList[i] = 34; // VER+8 modebreak;}}}
预测操作
这一步其实还做了变换量化相关的处理,相关的函数是xRecurIntraChromaCodingQT(顺带变换和量化),它和xRecurIntraCodingQT函数是类似的,这里不再细说了,可以参考HM编码器代码阅读(38)——帧内预测(五)帧内预测之正式的预测操作
0 0
- HM编码器代码阅读(39)——帧内预测(六)帧内预测之色度色度的操作
- HM编码器代码阅读(38)——帧内预测(五)帧内预测之正式的预测操作
- 色度分量帧内预测的代码
- HM编码器代码阅读(36)——帧内预测(三)帧内预测之参考像素块的预处理和滤波
- HM编码器代码阅读(37)——帧内预测(四)帧内预测之候选模式列表的建立
- HM编码器代码阅读(35)——帧内预测(二)帧内预测总流程
- HM编码器代码阅读(40)——帧内预测的总结
- HM编码器代码阅读(34)——帧内预测(一)
- JM8.6 色度帧内预测函数剖析(IntraChromaPrediction8x8)
- HM编码器代码阅读(16)——帧间预测之AMVP模式(四)预测MV的获取
- HM编码器代码阅读(31)——帧间预测之AMVP/Merge模式(六)运动补偿
- HM代码阅读:帧内预测(一)
- HM编码器代码阅读(33)——帧间预测的总结
- HM编码器代码阅读(13)——帧间预测之AMVP模式(一)总体流程
- HM编码器代码阅读(14)——帧间预测之AMVP模式(二)predInterSearch函数
- HM编码器代码阅读(15)——帧间预测之AMVP模式(三)xGetBlkBits函数
- HM编码器代码阅读(30)——帧间预测之AMVP模式(五)运动估计
- HM编码器代码阅读(17)——帧间预测之merge模式(一)Merge模式的介绍以及相关函数
- android跨应用aidl通讯
- Bootstrap Switch(开关控件)
- js 冒泡排序法
- 模仿网易新闻,点击举报按钮,弹出举报对话框
- 好用的dialog
- HM编码器代码阅读(39)——帧内预测(六)帧内预测之色度色度的操作
- Delphi 完成端口使用
- 01、mysql 简介
- 获得安卓手机的相关信息
- rabbitmq学习6:RPC
- App安全之网络传输安全
- Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架
- 【OpenCV】9th-关于argc
- Ubuntu16.04版本搭建Tensorflow环境并启用GPU支持