DMVR(decode MV refinement)解码端MV细化。
顾名思义,就是将MV在解码端做一个细化操作,那么相应的,就可以不在编码端做过多的搜索细化等操作。好处是可以减小传输的码率,缩短编码时间。为了保证质量,将细化的任务放在解码端,虽然增加了一部分解码时间,但在一定条件下,可以将增加的解码时间减小到最少。
以上便是DMVR的思想:分为两步,第一步:构造template;第二步:搜索最匹配的块。
代码中的实现逻辑:
主要由几个函数构成:
Void xBIPMVRefine(TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, Int iWidth, Int iHeight, TComYuv* pOrgYuv, TComYuv* pDstYuv, UInt uiMaxSearchRounds, UInt nSearchStepShift, UInt& uiMinCost);
UInt xDirectMCCost(Int iBitDepth, Pel* pRef, UInt uiRefStride, Pel* pOrg, UInt uiOrgStride, Int iWidth, Int iHeight);
Void xPredInterLines(TComDataCU *cu, TComPicYuv *refPic, UInt partAddr, TComMv *mv, Int width, Int height, Pel* dstPix, Int dstStride, Bool bi, const Int bitDepth);
Void