Методы построения и разбора Exp-Golomb CodeWord
Я работаю с кодеком OpenH264. OpenH264 использует Exp-Golomb Coding для информации, связанной с заголовком. Я изучил несколько веб-сайтов и собрал немного информации о Exp-Golomb Coding. OpenH264 использует 4 типа методов кодирования Exp-Golomb. Они есть:
- Ue [Когда значения являются только неотрицательными величинами]
- Te [когда значения только 1 или 0]
- Se [когда значения являются как отрицательными, так и положительными величинами]
- Me [когда значения стандартная кодовая карта определяется для значений]
Я научился строить или анализировать методом Ue.
Формат синтаксиса для Exp-Golomb(Ue) = [M-Zeros][1][INFO].
Конструкция: Предположим, у нас есть Code_Num = 226.
Сейчас,
M = этаж (log2(Code_Num)) = этаж (log2 (226)) = 7
INFO = Code_Num + 1 - pow (2, M) = 226 + 1 - 128 = 99 = (1100011) в двоичном формате
Так,
CodeWord = 0000000 1 1100011 [M-нули, 1 игнорирующий бит, INFO]
Разбор: Предположим, у нас есть CodeWord = 000000011100011
Code_Num = pow (2, M) + INFO - 1 = 128 + 99 - 1 = 226
Теперь я могу вычислить Exp-Golomb(Ue). Но я хочу изучить все теории, связанные с Se, Te и Me. Но я не могу найти какие-либо ресурсы для других методов. Пожалуйста, помогите мне.
1 ответ
OpenH264 является реализацией видеокодека H.264/AVC.
AVC использует кодирование Exp-Golomb в различных заголовках, так же как и во всех совместимых кодировщиках.
Кроме того, te(v) расшифровывается как усеченное кодирование по экспоненциальному голомбу.
В любом случае, вы можете найти информацию о прочтении подписанных кодов Exponential-Golomb на вики-странице:
но очень быстро tl;dr это 0 = 1, 1 = 010, -1 = 011 и т. д.
что касается этого беспорядка:
M = floor(log2(Code_Num)) = floor(log2(226)) = 7
INFO = Code_Num + 1 - pow(2,M) = 226 + 1 - 128 = 99 = (1100011) in Binary
So,
CodeWord = 0000000 1 1100011 [M-zeros, 1 ignoring bit, INFO]
Это не совсем точно, вы должны добавить 1 во время кодирования и вычесть 1 во время декодирования (только для беззнакового Exp-Golomb), Signed Exp-Golomb использует совершенно другую систему.
Редактировать:
Сопоставленный Exp-Golomb точно такой же, как и Unsigned Exp-Golomb, плюс поиск в таблице.
Усеченный Exp-Golomb аналогичен стандартному кодированию RICE, известному как Unary, за исключением того, что стоповый бит равен 0.
Если вам не хочется создавать свои собственные декодеры / кодировщики, взгляните на мой проект BitIO, потому что я их уже написал, особенно функции ReadRICE/WriteRICE и ReadExpGolomb/WriteExpGolomb, BitIO на Github