Режим ALSA asyn c не вызывает функцию обратного вызова - PullRequest
0 голосов
/ 18 февраля 2020

Я написал простую оболочку C ++, представляющую AudioStream, основанную на ALSA API. Мне кажется очень удобным использовать режим asyn c. К сожалению, функция обратного вызова, зарегистрированная для асинхронного режима c, не вызывается.

В документации alsa указано для snd_async_add_handler():

Эта функция связывает функцию обратного вызова с данный файл и сохраняет эту связь в объекте snd_async_handler_t. Всякий раз, когда сигнал SIGIO поднимается для файла fd, вызывается функция обратного вызова с параметром, указывающим на объект обработчика asyn c, возвращаемый этой функцией. Обработчик sigaction ALSA для сигнала SIGIO автоматически мультиплексирует уведомления в зарегистрированные асинхронные обратные вызовы c. Однако приложение отвечает за указание драйверу устройства генерировать сигнал SIGIO. Возможно, сигнал SIGIO был заменен другим сигналом, см. Snd_async_handler_get_signo.

Особенно полужирная часть интересно. Означает ли это, что пользователь должен каким-то образом настроить драйвер для генерации этих SIGIO? Я полагаю, что SIGIO - это просто какое-то прерывание, поэтому нужно разрешить генерацию прерываний драйвером ??? Я ожидаю, что это будет обязанностью ALSA через конфигурацию hw_params или около того.

Единственное, что мне удалось найти, было по следующей ссылке, где в ответе говорится, что ASYN C устарела однако из документации ALSA это не так.

ALSA - управление asyn c IO

Документация ALSA для справки: https://www.alsa-project.org/alsa-doc/alsa-lib/group___global.html#gafd936c40505997bb659b74bd368636b8

1 Ответ

0 голосов
/ 19 февраля 2020

snd_async_add_pcm_handler() является оберткой для snd_async_add_handler() и автоматически включает сигнал.

И вам следует , а не указать SND_PCM_ASYNC в вызове snd_pcm_open().

И вы должны использовать устройство, которое фактически поддерживает генерацию сигналов.

И ваш обработчик сигналов не должен использовать какие-либо функции, кроме тех, которые перечислены в списке асинхронных c -сигнал-безопасных функций .

...