alsa: improve max-latency property

Half of the buffersize is not enough to support as a max-quantum, we
need to divide by (4 * frame_scale) to allow some headroom and account
for the DSD scaling. We do the same calculation to suggest a buffer size
using the quantum-limit.

See #3744
This commit is contained in:
Wim Taymans 2024-01-22 16:04:38 +01:00
parent 7775363d8e
commit 7e1e05f0da

View file

@ -3534,7 +3534,8 @@ void spa_alsa_emit_node_info(struct state *state, bool full)
state->stream == SND_PCM_STREAM_PLAYBACK ? "Audio/Sink" : "Audio/Source"); state->stream == SND_PCM_STREAM_PLAYBACK ? "Audio/Sink" : "Audio/Source");
items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_DRIVER, "true"); items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_DRIVER, "true");
if (state->have_format) { if (state->have_format) {
snprintf(latency, sizeof(latency), "%lu/%d", state->buffer_frames / 2, state->rate); snprintf(latency, sizeof(latency), "%lu/%d",
state->buffer_frames / (4 * state->frame_scale), state->rate);
items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_MAX_LATENCY, latency); items[n_items++] = SPA_DICT_ITEM_INIT(SPA_KEY_NODE_MAX_LATENCY, latency);
snprintf(period, sizeof(period), "%lu", state->period_frames); snprintf(period, sizeof(period), "%lu", state->period_frames);
items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-size", period); items[n_items++] = SPA_DICT_ITEM_INIT("api.alsa.period-size", period);