diff --git a/spa/plugins/alsa/alsa-sink.c b/spa/plugins/alsa/alsa-sink.c index 7a4f9e30c..f9556d51b 100644 --- a/spa/plugins/alsa/alsa-sink.c +++ b/spa/plugins/alsa/alsa-sink.c @@ -383,15 +383,16 @@ impl_node_port_enum_params(struct spa_node *node, t->param_alloc_meta_enable.MetaEnable, ":", t->param_alloc_meta_enable.type, "I", t->meta.Ringbuffer, ":", t->param_alloc_meta_enable.size, "i", sizeof(struct spa_meta_ringbuffer), - ":", t->param_alloc_meta_enable.ringbufferSize, "i", this->period_frames * - this->frame_size * 32, + ":", t->param_alloc_meta_enable.ringbufferSize, "iru", this->props.min_latency * this->frame_size, + 2, this->props.min_latency * this->frame_size, + this->period_frames * this->frame_size, ":", t->param_alloc_meta_enable.ringbufferStride, "i", 0, ":", t->param_alloc_meta_enable.ringbufferBlocks, "i", 1, ":", t->param_alloc_meta_enable.ringbufferAlign, "i", 16); break; default: - return SPA_RESULT_NOT_IMPLEMENTED; + return SPA_RESULT_ENUM_END; } return SPA_RESULT_OK; diff --git a/spa/plugins/alsa/alsa-utils.c b/spa/plugins/alsa/alsa-utils.c index f04472d78..615992e55 100644 --- a/spa/plugins/alsa/alsa-utils.c +++ b/spa/plugins/alsa/alsa-utils.c @@ -369,10 +369,12 @@ pull_frames(struct state *state, n_bytes = SPA_MIN(avail, to_write * state->frame_size); n_frames = SPA_MIN(to_write, n_bytes / state->frame_size); - spa_ringbuffer_read_data(ringbuffer, d[0].data, index & ringbuffer->mask, dst, n_bytes); + spa_ringbuffer_read_data(ringbuffer, d[0].data, index % ringbuffer->mask, dst, n_bytes); spa_ringbuffer_read_update(ringbuffer, index + n_bytes); reuse = avail == n_bytes; + spa_log_trace(state->log, "%d %d %ld %zd", avail, index, to_write, n_bytes); + reuse = true; } else { offs = SPA_MIN(d[0].chunk->offset + state->ready_offset, d[0].maxsize); size = SPA_MIN(d[0].chunk->size + offs, d[0].maxsize) - offs;