Alles, was Sie brauchen, ist in der TComDataCU
Klasse verfügbar.
1) Für Bewegungsinformationen gibt es die Funktion getCUMvField()
, die den Bewegungsvektor zurückgibt. Es ist jedoch nicht einfach damit zu arbeiten.
Um auf fast alle Syntaxelemente der PU/CU-Ebene zugreifen zu können, müssen Sie in der Lage sein, mit dem absoluten Index dieser PU/CU zu arbeiten. Dieser eindeutige Index teilt Ihnen mit, wo sich Ihre PU/CU in der CTU befindet, indem Sie auf den nach oben weisenden 4x4-Block dieses Teils zeigen. Ich erinnere mich, dass dieser Index meistens in der Variablen uiAbsPartIdx
gespeichert ist.
Wenn Sie erfahren, wie Sie mit diesem Index arbeiten, können Sie die Informationen zur Blockpartitionierung in der CTU-Ebene abrufen. Also für 2) mein Vorschlag ist, dass Sie auf die Scheibe Ebene gehen, wenn Sie eine Schleife über CUTs haben (ich denke, das ist in der compressSlice()
Funktion getan). Und nachdem die compressCtu()
-Funktion für jede CTU aufgerufen wurde (was bedeutet, dass alle RDO-Entscheidungen getroffen wurden und die CTU-Partitionierung entschieden ist), legen Sie eine Schleife über alle uiAbsPartIdx
s der CTU und erhalten ihre Breite und Höhe. Wenn Ihre CTU-Größe beispielsweise 128 ist, haben Sie 32 * 32 = 1024 eindeutige 4x4-Blöcke in Ihrer CTU. Die Funktion zum Ermitteln der Breite/Höhe der CU, die einer bestimmten uiAbsPartIdx
entspricht, ist pCtu->getWidth(uiAbsPartIdx)
.
Ich hoffe, es war klar.
Die Antwort [auf diese Frage] (https://stackoverflow.com/questions/40502892/in-hevc-reference-software-hm-16-9-i-need-help-for-generating-details-of- -cus-pu) sollte hilfreich sein. – damjeux