diff --git a/spa/include/spa/graph/graph.h b/spa/include/spa/graph/graph.h index 000ec80fa..ee4872457 100644 --- a/spa/include/spa/graph/graph.h +++ b/spa/include/spa/graph/graph.h @@ -65,10 +65,9 @@ static inline int spa_graph_link_trigger(struct spa_graph_link *link) spa_debug("link %p: state %p: pending %d required %d", link, state, state->pending, state->required); - if (state->pending != 0) { - if (__atomic_sub_fetch(&state->pending, 1, __ATOMIC_SEQ_CST) == 0) - spa_graph_link_signal(link); - } + if (__atomic_sub_fetch(&state->pending, 1, __ATOMIC_SEQ_CST) == 0) + spa_graph_link_signal(link); + return state->status; } diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 9b65a9f51..d51b84eff 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -36,8 +36,6 @@ #include "pipewire/main-loop.h" #include "pipewire/work-queue.h" -#define spa_debug pw_log_trace - #include /** \cond */ @@ -616,11 +614,13 @@ static void node_event(void *data, struct spa_event *event) spa_hook_list_call(&node->listener_list, struct pw_node_events, event, event); } -void pw_node_process(struct pw_node *node, int status) +static void node_process(void *data, int status) { + struct pw_node *node = data; struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); - pw_log_trace("node %p: process driver:%d exported:%d", node, node->driver, node->exported); + pw_log_trace("node %p: process driver:%d exported:%d", node, + node->driver, node->exported); spa_hook_list_call(&node->listener_list, struct pw_node_events, process); @@ -645,12 +645,6 @@ void pw_node_process(struct pw_node *node, int status) spa_graph_node_trigger(&node->rt.node); } -static void node_process(void *data, int status) -{ - struct pw_node *node = data; - pw_node_process(node, status); -} - static void node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id) { struct pw_node *node = data; diff --git a/src/pipewire/private.h b/src/pipewire/private.h index b88306186..563acba03 100644 --- a/src/pipewire/private.h +++ b/src/pipewire/private.h @@ -624,8 +624,6 @@ int pw_node_initialized(struct pw_node *node); int pw_node_set_driver(struct pw_node *node, struct pw_node *driver); -void pw_node_process(struct pw_node *node, int status); - /** Prepare a link \memberof pw_link * Starts the negotiation of formats and buffers on \a link */ int pw_link_prepare(struct pw_link *link); diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index aa4faa391..daad4f26e 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -189,8 +189,6 @@ static inline int push_queue(struct stream *stream, struct queue *queue, struct queue->ids[index & MASK_BUFFERS] = buffer->id; spa_ringbuffer_write_update(&queue->ring, index + 1); - pw_log_trace("stream %p: queued buffer %d", stream, buffer->id); - return 0; } @@ -605,8 +603,10 @@ static int impl_port_use_buffers(struct spa_node *node, enum spa_direction direc b->id = i; b->this.buffer = buffers[i]; - if (impl->direction == SPA_DIRECTION_OUTPUT) + if (impl->direction == SPA_DIRECTION_OUTPUT) { + pw_log_trace("stream %p: recycle buffer %d", stream, b->id); push_queue(impl, &impl->dequeued, b); + } spa_hook_list_call(&stream->listener_list, struct pw_stream_events, add_buffer, &b->this); @@ -653,7 +653,9 @@ static int impl_node_process_input(struct spa_node *node) done: /* pop buffer to recycle */ - b = pop_queue(impl, &impl->queued); + if ((b = pop_queue(impl, &impl->queued))) { + pw_log_trace("stream %p: recycle buffer %d", stream, b->id); + } io->buffer_id = b ? b->id : SPA_ID_INVALID; io->status = SPA_STATUS_NEED_BUFFER; @@ -676,8 +678,10 @@ static int impl_node_process_output(struct spa_node *node) res = 0; if (io->status != SPA_STATUS_HAVE_BUFFER) { /* recycle old buffer */ - if ((b = get_buffer(stream, io->buffer_id)) != NULL) + if ((b = get_buffer(stream, io->buffer_id)) != NULL) { + pw_log_trace("stream %p: recycle buffer %d", stream, b->id); push_queue(impl, &impl->dequeued, b); + } /* pop new buffer */ if ((b = pop_queue(impl, &impl->queued)) != NULL) {