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

ГОСТ Р 54713-2011 Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. MPEG-2, часть VII: усовершенствованное кодирование звука (MPEG-2 AAC)

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


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

При описании элемента указываются

- его имя;

- его длина в битах, где указывает, что количество битов принадлежит диапазону от до , включая и . {; } означает, что количество битов равно или , в зависимости от значения других элементов данных в потоке битов;

- мнемоника для его типа и порядок передачи.

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

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

while ( condition ) {
data_element
. . .
}

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

do {
data_element
. . .

 } while ( condition )

Элемент данных всегда появляется, по крайней мере, однажды.

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

if ( condition) {
{ data_element
. . .
}

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

else {
data_element
. . .
}

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

for (expr1; expr2; expr3) {
data_element
. . .
}

Expr1 является инициализирующим выражением цикла. Обычно оно определяет начальное состояние счетчика. Ехрr2 является условием, определяющим проверку перед каждой итерацией цикла. Цикл завершается, когда условие не является "истиной". ExprЗ является выражением, которое выполняется в конце каждой итерации цикла, обычно оно инкрементирует счетчик.

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

for ( i = 0; i < n; i++) {
data_element
. . .
}

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

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

data_element []

data_element является массивом данных. Количество элементов массива зависит от контекста.

data_element [n]

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

data_element [m] [n]

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

data_element [l] [m] [n]

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

data_element [m...n]

data_element [m...n] содержит биты массива data_element с m по n включительно.


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

Определение функции nextbits

Функция nextbits() реализует сравнение строки битов со строкой битов на входе декодера.