В эталонном программном обеспечении Hevc HM 16.9 мне нужна помощь для создания деталей CU, PU и TU

Для тестовой последовательности я хочу получить следующую информацию:

  1. Где в справочном коде и как я могу получить информацию о глубине CU.

  2. Где и как взять размеры и режимы ПУ для конкретного ГТЕ.

  3. Где и как взять информацию о векторе движения для PU.

  4. Где и как я могу получить информацию об опорных кадрах PU и их местонахождении в опорном кадре?

  5. Где и как я могу получить информацию об используемых режимах SKIP и Merge?

  6. Где и как я могу получить информацию о стоимости RD для PU?

Мне нужна информация для статистического анализа, поэтому вся указанная выше информация должна быть после того, как все решения CTU будут приняты.

Первая часть предназначена для получения данных, по которым я могу провести некоторый анализ. После этого мне нужно знать, как заставить программу использовать мои расчетные значения для различных параметров. Это первая часть моего вопроса.

Вторая часть моего вопроса: где в эталонном программном коде мы можем изменить указанные выше параметры?

например Я хочу установить глубину 2 для определенного CTU, как я могу этого добиться? или я хочу принудительно включить режим SKIP для определенного PU, как я могу это сделать? или я хочу заставить программное обеспечение использовать 2Nx2N для определенного PU, как я могу сделать это в программном обеспечении?


person S.khan    schedule 09.11.2016    source источник


Ответы (1)


Во-первых, все решения для CTU принимаются, когда m_pcCuEncoder->compressCtu( pCtu ); вызывается в TEncSlice.cpp.

pCtu относится к типу TComDataCU, поэтому, если вы посмотрите на TComDataCU.h, вы можете увидеть всю информацию, которая содержится в объекте (глубина, размер раздела, режим прогнозирования, информация о векторах движения и т. Д.)

Для доступа к этой информации у вас есть функции getDepth(), getPartitionSize(), getPredictionMode(), getMvField и так далее.

Что касается второй части вашего вопроса, где изменить вышеуказанные параметры, зависит от того, чего вы хотите достичь. Например, если вы измените глубину вашего CTU до запуска m_pcCuEncoder->compressCtu( pCtu );, значения, которые вы изменили, будут перезаписаны этой функцией ...

person damjeux    schedule 15.11.2016
comment
pCtu- ›getPredictionMode (); дает мне режим предсказания pCtu- ›getDepth (); дает мне глубину pCtu- ›getPartitionSize (); дает мне размер раздела pCtu- ›getSkipFlag (); дает мне флаг пропуска pCtu- ›getPic () -› getPOC (); дает мне POC pCtu- ›getCUMvField (REF_PIC_LIST_0) -› getMv (i) .getHor (); дает мне векторы движения (горизонтальный компонент) для каждого упомянутого i-го раздела m_pcCuEncoder- ›compressCtu (pCtu); говоря, что все решения по CTU принимаются по его вызову. есть еще одна строка в коде, которая, как мне кажется, кодирует все CTU. m_pcCuEncoder- ›encodeCtu (pCtu); не могли бы вы объяснить разницу. между 2 - person S.khan; 15.12.2016
comment
Для каждого CTU я получаю 256 результатов, что означает, что этот раздел из 256 имеет размер 4x4, и каждый раздел проверяется на результат. Для межкадрового предсказания я не смог узнать номер опорного изображения, то есть, из какого изображения эталон принимается в качестве окончательного решения. В случае внешнего предсказания мне нужно узнать номер опорного изображения, чтобы я знал, из какого изображения была сделана ссылка. Что касается второй части моего вопроса, я хотел знать, где принимаются решения, чтобы, если я хочу принудительно установить определенный параметр, я могу сделать это там. TEncCu.cpp - место для этого? - person S.khan; 15.12.2016
comment
compressCtu( pCtu) - это оптимизация скорости и искажения, то есть принимаются решения о кодировании (структура блока, режим прогнозирования и т. Д.). Если я правильно помню, encodeCtu( pCtu ) затем выполняет энтропийное кодирование и генерирует фактический битовый поток. - person damjeux; 15.12.2016
comment
спасибо приятель за вашу помощь. Я не могу найти номер опорного кадра для PU. для этого нужна помощь. - person S.khan; 16.12.2016