Для работы с аудиокодеком 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
Спасибо!
Просто используйте правый сдвиг (>>
) сдвинуть биты в младшие биты, если необходимо, и побитовое и (&
) чтобы замаскировать другие биты.
int config = (toc >> 3) & 31;
int s = (toc >> 2) & 1;
int c = toc & 3;
Других решений пока нет …