Разбор Opus TOC Byte

Для работы с аудиокодеком Opus мне нужно проанализировать байт TOC из буфера символов и извлечь сегменты config, s и c, каждый из которых представляет число.

Мне нужно было бы хранить эти числа в отдельных переменных для дальнейшего использования, и мне интересно, каков наилучший способ достичь этого (в C ++).

Правильно сформированный пакет Opus ДОЛЖЕН содержать хотя бы один байт [R1].
Этот байт формирует заголовок таблицы содержания (TOC):

0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| config | s | с |
+-+-+-+-+-+-+-+-+

Первые пять битов байта TOC, помеченные как «config», кодируют один из 32
возможные конфигурации режима работы, полосы пропускания звука и кадра
размер.

Один дополнительный бит, помеченный «s», сигнализирует моно против стерео, с 0
указывает на моно и 1 указывает на стерео.

Оставшиеся два бита байта TOC, обозначенные «c», кодируют номер
кадров на пакет (коды от 0 до 3).

Этот формат в соответствии с RFC находится здесь: https://tools.ietf.org/html/rfc6716#section-3.1

Спасибо!

-2

Решение

Просто используйте правый сдвиг (>>) сдвинуть биты в младшие биты, если необходимо, и побитовое и (&) чтобы замаскировать другие биты.

int config = (toc >> 3) & 31;
int s = (toc >> 2) & 1;
int c = toc & 3;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]