Я аспирант, в настоящее время работаю над расширением современных кодеков сжатия изображений и видео для достижения лучшей производительности. Я сейчас работаю над модификацией БПГ(Лучшая портативная графика) и x265 (реализация HEVC / H.265).
Мой текущий подход предусматривает добавление дополнительных режимов внутреннего прогнозирования, которые могут использовать большее количество информации, чем только 1 пиксельная строка от CTU (Единицы дерева кодирования) выше и 1 пиксельная колонка от CTU слева.
Я реализовал свой подход и назвал мой режим внутрикадрового прогнозирования как «35» (BPG и hevc используют режимы от 0 до 34). Мой текущий подход требует, чтобы я сохранял два дополнительных числа (12 бит) каждый раз, когда я использую свой режим внутреннего предсказания. Я сталкиваюсь с проблемами при встраивании этих двух чисел в поток битов (кодирование) и при извлечении их из потока битов (декодирование).
Я модифицировал функцию codeIntraDirLumaAng в entropy.cpp из пакета x265, который поставляется с BPG, так что он записывает два дополнительных числа, когда он сталкивается с моим новым режимом внутреннего предсказания 35.
Мой набор вопросов заключается в следующем.
1) Учитывая, что у меня есть большее количество режимов прогнозирования, и я ожидаю, что они увеличатся еще больше, я должен изменить следующую строку кода
encodeBinsEP(dir[j], 5);
быть
encodeBinsEP(dir[j], 6);
2) Когда я запускаю декодер, он впервые сталкивается с экземпляром, в котором он должен был сохранить режим 35. Он не может прочитать его, вместо этого он читает режим 26. Я полагаю, это из-за процедуры деривации Intra-Luma Pred-Dir в hevc? (Любые входные данные о том, как правильно встроить мой новый режим внутреннего предсказания в поток битов, чтобы его можно было правильно прочитать)?
3) Должен ли я что-то делать с состояниями CABAC для двух дополнительных чисел, которые я кодирую? Я создал дополнительный контекст для обработки этого нового вида информации. Я был бы признателен за указатели на то, как установить значение переменной NUM_STATES_CTX, которую я определил дополнительно, и как использовать CABAC для наилучшего кодирования этих двух чисел?
Задача ещё не решена.
Других решений пока нет …