视频编码SVC --- JSVM代码阅读笔记(五)


ErrValMbEncoder::xEstimateMb16x16( IntMbTempData*&  rpcMbTempData,
                             IntMbTempData*&  rpcMbBestData,
                             RefListStruct&   rcRefListStruct,
                             UInt           
摘要由CSDN通过智能技术生成

ErrVal

MbEncoder::xEstimateMb16x16( IntMbTempData*&  rpcMbTempData,

                             IntMbTempData*&  rpcMbBestData,

                             RefListStruct&   rcRefListStruct,

                             UInt             uiMinQP,

                             UInt             uiMaxQP,

                             UInt             uiMaxNumMv,

                             UInt             uiNumMaxIter,

                             UInt             uiIterSearchRange,

                             MbDataAccess*    pcMbDataAccessBase,

                             Bool             bResidualPred )

//运动估计队列用的是MEList

 

//如果允许MotionPred

iBLRefIdx [0] = pcMbDataAccessBase->getMbMotionData( LIST_0 ).getRefIdx ();              //ref_idx

cBLMvPred [0] = pcMbDataAccessBase->getMbMotionData( LIST_0 ).getMv     ();      // BLmv  作为EL运动估计的MVP

 

rpcMbTempData->clear();                       // 清空

//设置几个参数

rpcMbTempData->setMbMode( MODE_16x16 );    

rpcMbTempData->setBLSkipFlag( false );

rpcMbTempData->setResidualPredFlag( bResidualPred );

 

//List0List1每个ref_idx,进行ME

pcRefFrame = rcRefFrameList0[iRefIdxTest];     //读取参考帧

 

// 根据当前块的ABC块得到MVP  存入cMvPred[0][iRefIdxTest]

rpcMbTempData->getMbDataAccess().getMvPredictor   ( cMvPred[0][iRefIdxTest], iRefIdxTest, LIST_0 );   

 

m_pcMotionEstimation->estimateBlockWithStart(…)   // 运动估计出mv

//注意:这里MVP一定是周围块得到的MVP搜索起点可能是MVP,也可能是BLmv(BLref_idx与当前的ref_idx相等时就以BLMv为搜索起点,但是MVP仍是周围块得到的)

 

//如果这个ref_idxBL的相同,则    MotionPrediction

m_pcMotionEstimation->estimateBlockWithStart(…)   // 运动估计出mv

//注意:这里MVPBLmv,搜索起点可能是BLmv

 

//如果cost比前面的最小cost(org-ref的失真 Mvref_idx的比特数)

选用该ref_idxmv

 

//如果是List1预测,还要补偿出双向预测用的块

m_pcMotionEstimation->compensateBlock ( &cYuvMbBuffer[1], PART_16x16, MODE_16x16 )

 

//如果是B帧,还要进行迭代的Bi-Pred,步骤与上面相同

//注意:MVP用对应LISTMVP,起始MV也用上次对应LIST运动估计出的MV,包括StdMEBLME

 

//保存ref_idxmvmvd

  rpcMbTempData->getMbMotionData( LIST_0 ).setRefIdx ( iRefIdx [0] );

  rpcMbTempData->getMbMotionData( LIST_0 ).setAllMv ( cMv [0] );

  rpcMbTempData->getMbMvdData   ( LIST_0 ).setAllMv ( cMvd [0] );

 

//设置每个4x4块的MotionPredFlag

  rpcMbTempData->getMbMotionData( LIST_0 ).setMotPredFlag( bBLPred [0] );

  rpcMbTempData->getMbMotionData( LIST_1 ).setMotPredFlag( bBLPred [1] );

 

//计算4x4变换的RDCost

xSetRdCostInterMb(*rpcMbTempData, pcMbDataAccessBase, rcRefListStruct, uiMinQP, uiMaxQP, bLowComplexMbEnable )           后面分析

 

xCheckBestEstimation(  rpcMbTempData, rpcMbBestData )

  //如果当前4x4变换的RdCostBestDataRdCost大,则函数退出

 

  //交换rpcMbTempData rpcMbBestData

 

xCheckInterMbMode8x8(  rpcMbTempData, rpcMbBestData, pcMbRefData, rcRefListStruct, uiMinQP, uiMaxQP,

false, pcMbDataAccessBase )

  //计算当前8x8变换的RdCost

   xSetRdCost8x8InterMb( *rpcMbTempData, pcMbDataAccessBaseMotion, rcRefListStruct,  

                              uiMinQP, uiMaxQP, bBLSkip, 0, pcBaseLayerRec, pcBaseLayerResidual )

   xCheckBestEstimation(  rpcMbTempData, rpcMbBestData )

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值