Основные виды кодеков

Информация о поддерживаемых видах кодеков

Статья содержит список основных поддерживаемых аудио стеком видов кодеков:

Audio Codec 97 (AC97)
AK4531

Кодек поддерживается только если он является стандартизированным, имеет подробную документацию и используется в актуальных платформах.

Кодек может поддерживать как функции аналогового аудиомикшера, так и другие callback-функции, полезные драйверу, например, передискретизацию (SRC, Sample Rate Conversion) или S/PDIF. См. раздел обработка аудио данных в формате PCM.

Для использования одного из этих кодеков вызовите ado_mixer_dll() в функции ctrl_init() драйвера. См. раздел обработка аналоговых данных.

В следующих разделах представлены примеры передачи аргументов в функцию ado_mixer_dll().

Audio Codec 97 (AC97)

Имя библиотеки

Передайте "ac97" в качестве аргумента mixer_dll функции ado_mixer_dll().

Заголовочный файл

<mixer/ac97_dll.h>

Структура параметров

Структура содержит указатели на callback-функции, необходимые при вызове библиотеки микшера:

typedef struct ado_mixer_dll_params_ac97 {
HW_CONTEXT_T *hw_context;
uint16_t (*read)( HW_CONTEXT_T *hw_context,
uint16_t reg );
void (*write)( HW_CONTEXT_T *hw_context,
uint16_t reg,
uint16_t val );
int32_t (*init)( HW_CONTEXT_T *hw_context );
void (*destroy)( HW_CONTEXT_T *hw_context );
} ado_mixer_dll_params_ac97_t;

В структуру входят:

hw_context
Указатель на структуру, которую можно использовать для любых контекстно-зависимых данных, необходимых драйверу. Используется только как аргумент при вызовах функций.
read()
Callback-функция для считывания значения в конкретном регистре ac97.
write()
Callback-функция для записи значения в конкретный регистр ac97.
init()
Callback-функция вызывается верхним уровнем аудио стека после инициализации кодека. Используется для внесения изменений перед началом работы.
destroy()
Callback-функция вызывается верхним уровнем аудио стека непосредственно перед завершением работы драйвера. В общем случае, callback используется для отмены всего, что было настроено в init().

В качестве аргумента ado_mixer_dll() передается указатель на структуру ado_mixer_dll_params_ac97_t.

Поддерживаемые элементы управления

Структура содержит указатели на callback-функции, предоставляемые библиотекой микшера, которые драйвер может вызвать для контроля устройства:

enum ac97_SRC {
AC97_FRONT_DAC_SRC,
AC97_SURR_DAC_SRC,
AC97_LFE_DAC_SRC,
AC97_LR_ADC_SRC,
};
typedef struct ado_mixer_dll_callbacks_ac97 {
MIXER_CONTEXT_T *mix_context;
int32_t (*SRC_test)( MIXER_CONTEXT_T *mix_context,
enum ac97_SRC src,
ado_pcm_cap_t * caps );
int32_t (*SRC_set)( MIXER_CONTEXT_T * mix_context,
enum ac97_SRC src,
uint32_t * rate );
} ado_mixer_dll_callbacks_ac97_t;

В структуру входят:

mix_context
Указатель на структуру, которую кодек использует для любых контекстно-зависимых данных. Используйте ее только как аргумент для вызова функций, определенных в этой структуре.
SRC_test
Callback-функция для проверки поддерживаемых преобразователем частот дискретизации (src sample rate converter) и обновления данных в структуре ado_pcm_cap_t.
SRC_set
Callback-функция для установки частоты дискретизации для преобразователя (src sample rate converter).

В качестве аргумента ado_mixer_dll() передается указатель на структуру ado_mixer_dll_callbacks_ac97_t.

AK4531

Имя библиотеки

Передайте "ak4531" в качестве аргумента mixer_dll функции ado_mixer_dll().

Заголовочный файл

<mixer/ak4531_dll.h>

Структура параметров

Структура содержит указатели на callback-функции, необходимые при вызове библиотеки микшера:

typedef struct ado_mixer_dll_params_ak4531 {
HW_CONTEXT_T *hw_context;
void (*write)( HW_CONTEXT_T *hw_context,
uint16_t reg,
uint16_t val );
void (*destroy)( HW_CONTEXT_T *hw_context );
} ado_mixer_dll_params_ak4531_t;

В структуру входят:

hw_context
Указатель на структуру, которую можно использовать для любых контекстно-зависимых данных, необходимых драйверу. Используется только как аргумент при вызовах функций.
write()
Callback-функция для записи значения в конкретный регистр ak4531.
destroy()
Callback-функция вызывается верхним уровнем аудио стека непосредственно перед завершением работы драйвера.

В качестве аргумента ado_mixer_dll() передается указатель на структуру ado_mixer_dll_params_ak4531_t.

Поддерживаемые элементы управления

Отсутствуют; следует передать NULL в качестве аргумента функции ado_mixer_dll().




Предыдущий раздел: Библиотека libado