USB Audio Class 2.0 - Как поддерживать несколько битрейтов / частот дискретизации
Я немного запутался, как добавить поддержку нескольких битрейтов / частот дискретизации в USB Audio Class 2.0. По сравнению с USB Audio Class 1.0 (который дает вам возможность добавлять несколько скоростей и т. Д.), USB Audio Class 2.0 не дает такой возможности. Как бы я изменил свои дескрипторы для этого? Я где-то читал, что вы используете больше альтернативных настроек, но я не знаю, как это могло бы помочь...
Вот мой дескриптор аудиоформата:
audioformat.bLength = sizeof(usb_audio_format_type_1_desc_t)
audioformat.bDescriptorType = 0x01
audioformat.bDescriptorSubtype = 0x02
audioformat.bFormatType = 0x01
audioformat.bSubSlotSize = 3
audioformat.bBitResolution = 24
Спасибо!
2 ответа
Да, так что я понял это, и, таким образом, награда не имеет большого значения.
Чтобы сделать несколько битрейтов: иметь альтернативные настройки с соответствующими дескрипторами формата аудиоданных /etc для поддержки разных битрейтов в порядке; например: альтернативная настройка 0 (без конечных точек), альтернативная настройка 1 (со всеми дескрипторами потока / класса, дескриптор формата поддерживает 16 бит), альтернативная настройка 2 (со всеми дескрипторами потока / класса дескриптор формата поддерживает 24 бита).
Для выполнения нескольких частот дискретизации: Вы должны следовать документу USB Audio Class 2.0 в формате CUR, MIN, MAX и передать управление хосту.
Например:
#define USB_AUDIO_SAMP_RATE_RANGE { CPU16_TO_LE8_ARRAY(2), \
CPU32_TO_LE8_ARRAY(SAMPLE_RATE_44_1), \
CPU32_TO_LE8_ARRAY(SAMPLE_RATE_44_1), \
CPU32_TO_LE8_ARRAY(0), \
CPU32_TO_LE8_ARRAY(SAMPLE_RATE_48_0), \
CPU32_TO_LE8_ARRAY(SAMPLE_RATE_48_0), \
CPU32_TO_LE8_ARRAY(0)}
В качестве ссылки, LE8 - это младший 8-разрядный бит, и определения преобразуют 16- или 32-разрядное целое число в массив из 8-разрядных целых чисел, отформатированных в младшем порядке.
В USB Audio 2.0 (UAC2) есть несколько объектов синхронизации. Но USB Audio 1.0 (UAC1) не имеет его. UAC1 напрямую предоставляет различные образцы частоты, по которым мы можем запросить.
Но в UAC2 мы должны использовать Clock Entities. Есть какой-то конкретный дескриптор, дающий информацию о часах сущностей.