alsa: improve ringbuffer params

Always reuse the ringbuffer after we consumed some of it. This is
the trigger for upstream to write some more in the buffer.
This commit is contained in:
Wim Taymans 2017-10-27 17:54:34 +02:00
parent 84d422bc46
commit 91ba492712
2 changed files with 7 additions and 4 deletions

View file

@ -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;

View file

@ -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;