Поиск размеров PU в справочном коде HM 12.1

Я использую эталонный код 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 );
  ....
  ....


person Sourabh    schedule 04.03.2014    source источник


Ответы (1)


В версии 1 HEVC существует 8 типов PU, таких как 2Nx2N, Nx2N, 2NxN, NxN, 2NxnU, 2NxnD, nRx2N и nLx2N. Вы можете увидеть типы PU из m_pePartSize в pcCU (структура TComDataCU*)

Я рекомендую ссылаться на функцию xSetEdgefilterPU в TComLoopFilter.cpp Вы можете увидеть, как проверить тип 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;
}  }
person Hyunho Jo    schedule 12.03.2014