Статус документа
Статус документа

ГОСТ Р 54711-2011 Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. MPEG-1 часть III (MPEG-1 audio)

     3.3 Метод описания синтаксиса потока битов


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

Действие, вызванное декодируемым элементом данных в потоке битов, зависит от значения этого элемента данных и элементов данных, декодируемых ранее. Декодирование элементов данных и определение параметров состояния, используемых в их декодировании, описываются в подразделе 5.2.

В этом синтаксисе используется принятое в языке С соглашение о том, что переменная или выражение, возвращающие ненулевое значение, эквивалентны результату "истина".

Для выражения условия присутствия элементов данных используются следующие конструкции:

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

Элемент данных всегда существует, по крайней мере один раз.

Элемент данных повторяется при условии "истина".

Если условие "истина", то первая группа элементов данных появляется затем в потоке данных.

Если условие "истина" не сохраняется, то вторая группа элементов данных появляется затем в потоке данных.

Является инициализирующим выражением цикла.

Обычно оно определяет начальное состояние счетчика.

Является условием, определяющим проверку перед каждой итерацией цикла. Цикл завершается, когда условие "не истина".





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

Следует обратить внимание на наиболее распространенные варианты использования этой конструкции:

Группа элементов данных появляется n раз. Условия в пределах группы элементов данных могут зависеть от значения переменной управления циклом i, которая обнуляется при первом появлении, увеличивается на 1 при втором появлении и т.д.

               

Как отмечено, группа элементов данных может содержать вложенные условные конструкции. Для компактности скобки { } могут быть опущены, когда следует только один элемент данных.

data_element [ ]

Является массивом данных.

Количество элементов массива зависит от контекста.

data_element [n]

Является (n+1)-м элементом массива данных.

data_element [m][n]

Является элементом (m+1)-й строки (n+1)-го столбца двухмерного массива данных.

data_element [l][m][n]

Является (I+1), (m+1), (n+1)-м элементом трехмерного массива данных.

data_element [m…n]

Биты массива data_element с m по n включительно.


Знание самого синтаксиса потока битов в 5.3 не следует считать достаточным для декодирования. В частности, это лишь определяет корректный и свободный от ошибок входной поток битов. Реальные декодеры для того, чтобы правильно начать декодирование, должны иметь средства обнаружения стартовых последовательностей.

bytealigned( )

Возвращает 1, если текущая позиция находится на границе байта, так что следующий бит потока будет первым битом нового байта. В противном случае функция возвращает 0.

nextbits( )

Реализует сравнение строки битов со строкой битов на входе декодера.

next_start_code( )

Удаляет все нулевые биты и биты стаффинга и определяет положение следующего синхрослова.

     

 



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