diff --git a/spa/plugins/alsa/alsa-pcm-sink.c b/spa/plugins/alsa/alsa-pcm-sink.c index c86b20bcb..0eccd1e95 100644 --- a/spa/plugins/alsa/alsa-pcm-sink.c +++ b/spa/plugins/alsa/alsa-pcm-sink.c @@ -793,6 +793,8 @@ impl_init(const struct spa_handle_factory *factory, spa_alsa_channel_from_name(p, len); p += len + strspn(p+len, ","); } + } else if (!strcmp(info->items[i].key, "api.alsa.period-size")) { + this->default_period_size = atoi(info->items[i].value); } } return 0; diff --git a/spa/plugins/alsa/alsa-pcm-source.c b/spa/plugins/alsa/alsa-pcm-source.c index c7c57441e..9447e2174 100644 --- a/spa/plugins/alsa/alsa-pcm-source.c +++ b/spa/plugins/alsa/alsa-pcm-source.c @@ -814,6 +814,8 @@ impl_init(const struct spa_handle_factory *factory, spa_alsa_channel_from_name(p, len); p += len + strspn(p+len, ","); } + } else if (!strcmp(info->items[i].key, "api.alsa.period-size")) { + this->default_period_size = atoi(info->items[i].value); } } return 0; diff --git a/spa/plugins/alsa/alsa-pcm.c b/spa/plugins/alsa/alsa-pcm.c index 4c1639c3d..ea10292b7 100644 --- a/spa/plugins/alsa/alsa-pcm.c +++ b/spa/plugins/alsa/alsa-pcm.c @@ -560,7 +560,7 @@ int spa_alsa_set_format(struct state *state, struct spa_audio_info *fmt, uint32_ state->frame_size *= info->channels; dir = 0; - period_size = 1024; + period_size = state->default_period_size ? state->default_period_size : 1024; is_batch = snd_pcm_hw_params_is_batch(params); if (is_batch) { const char *id; @@ -577,8 +577,8 @@ int spa_alsa_set_format(struct state *state, struct spa_audio_info *fmt, uint32_ /* batch devices get their hw pointers updated every period. Make * the period smaller and add one period of headroom */ period_size /= 2; - spa_log_info(state->log, NAME" %s: batch mode, period_size:%ld headroom:%u", - state->props.device, period_size, state->headroom); + spa_log_info(state->log, NAME" %s: batch mode, period_size:%ld", + state->props.device, period_size); } CHECK(snd_pcm_hw_params_set_period_size_near(hndl, params, &period_size, &dir), "set_period_size_near"); diff --git a/spa/plugins/alsa/alsa-pcm.h b/spa/plugins/alsa/alsa-pcm.h index 1204a90e4..55574362b 100644 --- a/spa/plugins/alsa/alsa-pcm.h +++ b/spa/plugins/alsa/alsa-pcm.h @@ -110,6 +110,7 @@ struct state { bool have_format; struct spa_audio_info current_format; + uint32_t default_period_size; uint32_t default_format; unsigned int default_channels; unsigned int default_rate;