我正在使用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 );
....
....
答案 0 :(得分:1)
HEVC版本1中有8种类型的PU,例如2Nx2N,Nx2N,2NxN,NxN,2NxnU,2NxnD,nRx2N和nLx2N。您可以在pcCU(TComDataCU *结构)的m_pePartSize中看到PU类型
我建议在TComLoopFilter.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;
} }