Кодирование переменной длины, сколько бит читать? - PullRequest
0 голосов
/ 05 мая 2018

Вот снимок из стандарта AAC ISO: enter image description here

Как узнать, сколько бит нужно прочитать для hcod_sf ? Что означает 1..19 ?

1 Ответ

0 голосов
/ 05 мая 2018

VLC ( Кодирование переменной длины ) обозначает переменное количество используемых битов. Таким образом, в вашем примере текущее значение составляет от 1 до 19 бит.

Поначалу это может показаться странным, но следует строгой логике. В приложении * обязательно будет таблица, определяющая, какая битовая комбинация представляет какое значение.

Каждое значение представлено определенной уникальной битовой комбинацией, которая может быть определена последовательными битами чтения .

Например, эта таблица:

0xxxxxxxxxxxxxxxxxx = value = 0  ( 1 bit length )
10xxxxxxxxxxxxxxxxx = value = 1  ( 2 bit length )
110xxxxxxxxxxxxxxxx = value = 2  ( 3 bit length )
1110xxxxxxxxxxxxxxx = value = 3  ( 4 bit length )
...
1111111111111111110 = value = 18 ( 19 bit length )

В этом примере 0 обозначает конец значения , который в сочетании с 1 s кодирует значение VLC. Как уже было сказано, вы должны читать битовый поток последовательно, чтобы получить длину в битах значения, поэтому в этом примере вам нужно будет проверить конечный 0.

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

Как узнать, сколько бит следует прочитать для hcod_sf?

Вы можете определить количество читаемых бит, только прочитав их. Практически вы читаете (по меньшей мере 19) битов одновременно, а затем оцениваете, сколько из этих битов принадлежит значению (часто с помощью таблицы ).

Что означает 1..19?

Это минимальное (1) и максимальное (19) количество битов в этом конкретном значении.

Наконец:
Это довольно сложно реализовать, поэтому знание расширения набора команд BMI действительно полезно для x86-способа обработки этого.

...