在HM 12.1参考代码中查找PU尺寸

时间:2014-03-04 08:06:49

标签: video video-processing hevc h.265

我正在使用HM 12.1参考代码。我的任务是找到PU尺寸(对称和非对称) 来自编码的h.265比特流 在TLibDecoder中> TDecEntropy.cpp> decodePUWise函数,我插入了一个printf语句 打印尺寸,但它似乎没有给出正确的答案。请帮忙!


for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset ) { printf("%d X %d\n", pcCU->getHeight(uiSubPartIdx), pcCU->getWidth(uiSubPartIdx)); /* I put this code */

  decodeMergeFlag( pcCU, uiSubPartIdx, uiDepth, uiPartIdx );
  ....
  ....

decodeMergeFlag( pcCU, uiSubPartIdx, uiDepth, uiPartIdx ); .... ....

1 个答案:

答案 0 :(得分:1)

HEVC版本1中有8种类型的PU,例如2Nx2N,Nx2N,2NxN,NxN,2NxnU,2NxnD,nRx2N和nLx2N。您可以在pcCU(TComDataCU *结构)的m_pePartSize中看到PU类型

我建议在TComLoopF​​ilter.cpp中引用xSetEdgefilterPU函数 您可以看到如何检查PU的类型

switch ( pcCU->getPartitionSize( uiAbsZorderIdx )) {
case SIZE_2Nx2N:
{
  break;
}
case SIZE_2NxN:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_HOR, uiHHeightInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
case SIZE_Nx2N:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_VER, uiHWidthInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
case SIZE_NxN:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_VER, uiHWidthInBaseUnits, m_stLFCUParam.bInternalEdge );
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_HOR, uiHHeightInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
case SIZE_2NxnU:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_HOR, uiQHeightInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
case SIZE_2NxnD:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_HOR, uiHeightInBaseUnits - uiQHeightInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
case SIZE_nLx2N:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_VER, uiQWidthInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
case SIZE_nRx2N:
{
  xSetEdgefilterMultiple( pcCU, uiAbsZorderIdx, uiDepth, EDGE_VER, uiWidthInBaseUnits - uiQWidthInBaseUnits, m_stLFCUParam.bInternalEdge );
  break;
}
default:
{
  break;
}  }