2015-11-03 5 views
0

Я работаю над встроенным Linux-приложением с аудиопростой с использованием ALSA. Он имеет очень строгие требования к задержке.ALSA passthrough latency

Выходной буфер настолько мал, насколько это возможно, что приводит к случайному (возможно, одному часу) переходу на выход. Это приемлемо. Однако, когда это происходит, это вызывает «резервное копирование» в буфере захвата, и результат является ползучим увеличением латентности.

Кажется, что нет надежного способа узнать, сколько выходных данных было потеряно, чтобы отбросить одинаковый объем ввода. Я могу экспериментировать, но хотя это встроенное приложение, оно должно быть независимым от устройства, поэтому нам нужно надежное решение.

Кто-нибудь знает способ определить, сколько данных было потеряно, или если это всегда один буфер или другие предложения?

ответ

1

Если вы не хотите, чтобы устройства PCM останавливались при переполнении/переполнении, настройте их не останавливаясь, установив порог остановки на граничное значение. Затем они будут продолжать работать, и количество доступных кадров будет продолжать увеличиваться (для захвата) или уменьшаться (для воспроизведения). (Не все эти фреймы будут использоваться, кольцевой буфер просто обтекает.)

+0

Большое спасибо. – DCBillen