HEVC函数分析之TComPattern::initPattern( )

来源:互联网 发布:nginx ssl跳转 编辑:程序博客网 时间:2024/04/30 11:48

废话不多说直接上代码注释。有错的话,请指教。

//设定当前CU中PU的参数Void TComPattern::initPattern( TComDataCU* pcCU,   //当前的CU(64*64到8*8)                          UInt uiPartDepth,   //PU相对于当前CU的深度     UInt uiAbsPartIdx ) //当前的PU以4*4块为单位,以Zscan扫描顺序的序号(以LCU为标准){//为了计算参考点的位置:是否需要计算上一行,左一列  Int   uiOffsetLeft  = 0;  Int   uiOffsetAbove = 0;    //当前PU的宽和高  //pcCU->getWidth (0)为当前CU的宽,当前CU可能会被分为很多层,第0个就是当前CU的尺寸  UChar uiWidth          = pcCU->getWidth (0)>>uiPartDepth;  UChar uiHeight         = pcCU->getHeight(0)>>uiPartDepth;    //先计算当前CU的起始地址,再加上Zscan的扫描序号,构成当前PU在整个图片中的绝对位置  UInt  uiAbsZorderIdx   = pcCU->getZorderIdxInCU() + uiAbsPartIdx;  UInt  uiCurrPicPelX    = pcCU->getCUPelX() + g_auiRasterToPelX[ g_auiZscanToRaster[uiAbsZorderIdx] ];  UInt  uiCurrPicPelY    = pcCU->getCUPelY() + g_auiRasterToPelY[ g_auiZscanToRaster[uiAbsZorderIdx] ];    /*  计算参考点的起始坐标  m_piPatternOrigin = pcCU->getPic()->getPicYuvRec()->getLumaAddr(pcCU->getAddr(), uiAbsZorderIdx)  - m_iOffsetAbove * m_iPatternStride //当前地址的上面m_iOffsetAbove行的位置处  - m_iOffsetLeft;//当前地址的左面m_iOffsetLeft列处  */  //在计算参考点的位置时,当前的位置的起始点要是在第一列,因为左面没有像素,需要设置0,不是第一列时取左面一列的数据,此时设为1  if( uiCurrPicPelX != 0 )  {    uiOffsetLeft = 1;  }    //在计算参考点的位置时,当前的位置的起始点要是在第一行,因为上面没有像素,需要设置0,不是第一行时取上一行的数据  if( uiCurrPicPelY != 0 )  {    uiOffsetAbove = 1;  }  //根据上面的偏移,计算Y,Cb,Cr的参考点处的位置,0,1,2用来表示是Y,Cb,Cr  m_cPatternY .setPatternParamCU( pcCU, 0, uiWidth,      uiHeight,      uiOffsetLeft, uiOffsetAbove, uiAbsPartIdx );  m_cPatternCb.setPatternParamCU( pcCU, 1, uiWidth >> 1, uiHeight >> 1, uiOffsetLeft, uiOffsetAbove, uiAbsPartIdx );  m_cPatternCr.setPatternParamCU( pcCU, 2, uiWidth >> 1, uiHeight >> 1, uiOffsetLeft, uiOffsetAbove, uiAbsPartIdx );}


请指教:1729048547


原创粉丝点击