Все, что вам нужно, доступно в классе TComDataCU
.
1) Для информации о движении есть функция getCUMvField()
, которая возвращает вектор движения. Хотя работать с ним непросто.
По сути, чтобы получить доступ практически к любому элементу синтаксиса уровня PU/CU, вам нужно иметь возможность работать с абсолютным индексом этого PU/CU. Этот уникальный индекс сообщает вам, где именно находится ваш PU/CU в CTU, указывая на верхний левый блок 4x4 этой части. Я помню, что в большинстве случаев этот индекс хранится в переменной uiAbsPartIdx
.
Если вы научитесь работать с этим индексом, то сможете получить информацию о разбиении блоков на уровне CTU. поэтому для 2) мое предложение состоит в том, что вы переходите на уровень среза, когда у вас есть цикл над CUT (я думаю, что это делается в функции compressSlice()
). И после того, как функция compressCtu()
вызывается для каждой CTU (что означает, что все решения RDO приняты и принято решение о разбиении CTU), вы зацикливаете все uiAbsPartIdx
s CTU и получаете их ширину и высоту. Например, если размер вашего CTU равен 128, то в вашем CTU будет 32*32=1024 уникальных блока 4x4. Функция для получения ширины/высоты CU, соответствующей определенному uiAbsPartIdx
, называется pCtu->getWidth(uiAbsPartIdx)
.
Я надеюсь, что это было ясно.
person
Mosen
schedule
21.04.2017