mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
alsa: small cleanups
Use flags for buffers
This commit is contained in:
parent
5bff143eaf
commit
e7bff4293d
4 changed files with 22 additions and 17 deletions
|
|
@ -490,7 +490,7 @@ impl_node_port_use_buffers(struct spa_node *node,
|
|||
uint32_t type;
|
||||
|
||||
b->outbuf = buffers[i];
|
||||
b->outstanding = true;
|
||||
b->flags = BUFFER_FLAG_OUT;
|
||||
|
||||
b->h = spa_buffer_find_meta(b->outbuf, this->type.meta.Header);
|
||||
|
||||
|
|
@ -582,10 +582,12 @@ static int impl_node_process_input(struct spa_node *node)
|
|||
input = this->io;
|
||||
spa_return_val_if_fail(input != NULL, -EIO);
|
||||
|
||||
spa_log_trace(this->log, NAME " %p: process input %d %d", this, input->status, input->buffer_id);
|
||||
|
||||
if (input->status == SPA_STATUS_HAVE_BUFFER && input->buffer_id < this->n_buffers) {
|
||||
struct buffer *b = &this->buffers[input->buffer_id];
|
||||
|
||||
if (!b->outstanding) {
|
||||
if (!SPA_FLAG_CHECK(b->flags, BUFFER_FLAG_OUT)) {
|
||||
spa_log_warn(this->log, NAME " %p: buffer %u in use", this, input->buffer_id);
|
||||
input->status = -EINVAL;
|
||||
return -EINVAL;
|
||||
|
|
@ -594,10 +596,11 @@ static int impl_node_process_input(struct spa_node *node)
|
|||
spa_log_trace(this->log, NAME " %p: queue buffer %u", this, input->buffer_id);
|
||||
|
||||
spa_list_append(&this->ready, &b->link);
|
||||
b->outstanding = false;
|
||||
input->buffer_id = SPA_ID_INVALID;
|
||||
input->status = SPA_STATUS_OK;
|
||||
SPA_FLAG_UNSET(b->flags, BUFFER_FLAG_OUT);
|
||||
}
|
||||
input->buffer_id = SPA_ID_INVALID;
|
||||
input->status = SPA_STATUS_OK;
|
||||
|
||||
return SPA_STATUS_OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -276,15 +276,13 @@ impl_node_port_get_info(struct spa_node *node,
|
|||
|
||||
static void recycle_buffer(struct state *this, uint32_t buffer_id)
|
||||
{
|
||||
struct buffer *b;
|
||||
struct buffer *b = &this->buffers[buffer_id];
|
||||
|
||||
spa_log_trace(this->log, NAME " %p: recycle buffer %u", this, buffer_id);
|
||||
|
||||
b = &this->buffers[buffer_id];
|
||||
spa_return_if_fail(b->outstanding);
|
||||
|
||||
b->outstanding = false;
|
||||
spa_list_append(&this->free, &b->link);
|
||||
if (SPA_FLAG_CHECK(b->flags, BUFFER_FLAG_OUT)) {
|
||||
spa_log_trace(this->log, NAME " %p: recycle buffer %u", this, buffer_id);
|
||||
spa_list_append(&this->free, &b->link);
|
||||
SPA_FLAG_UNSET(b->flags, BUFFER_FLAG_OUT);
|
||||
}
|
||||
}
|
||||
|
||||
static int port_get_format(struct spa_node *node,
|
||||
|
|
@ -499,7 +497,7 @@ impl_node_port_use_buffers(struct spa_node *node,
|
|||
struct spa_data *d = buffers[i]->datas;
|
||||
|
||||
b->outbuf = buffers[i];
|
||||
b->outstanding = false;
|
||||
b->flags = 0;
|
||||
|
||||
b->h = spa_buffer_find_meta(b->outbuf, this->type.meta.Header);
|
||||
|
||||
|
|
|
|||
|
|
@ -397,7 +397,7 @@ pull_frames(struct state *state,
|
|||
|
||||
if (state->ready_offset >= d[0].chunk->size) {
|
||||
spa_list_remove(&b->link);
|
||||
b->outstanding = true;
|
||||
SPA_FLAG_SET(b->flags, BUFFER_FLAG_OUT);
|
||||
spa_log_trace(state->log, "alsa-util %p: reuse buffer %u", state, b->outbuf->id);
|
||||
state->callbacks->reuse_buffer(state->callbacks_data, 0, b->outbuf->id);
|
||||
state->ready_offset = 0;
|
||||
|
|
@ -477,7 +477,7 @@ push_frames(struct state *state,
|
|||
d[0].chunk->size = n_bytes;
|
||||
d[0].chunk->stride = state->frame_size;
|
||||
|
||||
b->outstanding = true;
|
||||
SPA_FLAG_SET(b->flags, BUFFER_FLAG_OUT);
|
||||
io->buffer_id = b->outbuf->id;
|
||||
io->status = SPA_STATUS_HAVE_BUFFER;
|
||||
state->callbacks->have_output(state->callbacks_data);
|
||||
|
|
@ -707,6 +707,9 @@ int spa_alsa_start(struct state *state, bool xrun_recover)
|
|||
ts.it_interval.tv_nsec = 0;
|
||||
timerfd_settime(state->timerfd, 0, &ts, NULL);
|
||||
|
||||
state->io->status = SPA_STATUS_OK;
|
||||
state->io->buffer_id = SPA_ID_INVALID;
|
||||
|
||||
state->started = true;
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -53,7 +53,8 @@ struct props {
|
|||
struct buffer {
|
||||
struct spa_buffer *outbuf;
|
||||
struct spa_meta_header *h;
|
||||
bool outstanding;
|
||||
#define BUFFER_FLAG_OUT (1<<0)
|
||||
uint32_t flags;
|
||||
struct spa_list link;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue