mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
Implement explicit buffer-reuse in stream API
This commit is contained in:
parent
0f4142f879
commit
a3b614fff6
3 changed files with 6 additions and 10 deletions
|
|
@ -313,7 +313,8 @@ static void on_state_changed(void *_data, enum pw_remote_state old, enum pw_remo
|
||||||
|
|
||||||
printf("remote state: \"%s\"\n", pw_remote_state_as_string(state));
|
printf("remote state: \"%s\"\n", pw_remote_state_as_string(state));
|
||||||
|
|
||||||
data->stream = pw_stream_new(remote, "video-play", NULL);
|
data->stream = pw_stream_new(remote, "video-play",
|
||||||
|
pw_properties_new("pipewire.client.reuse", "1", NULL));
|
||||||
|
|
||||||
SDL_GetRendererInfo(data->renderer, &info);
|
SDL_GetRendererInfo(data->renderer, &info);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -768,9 +768,6 @@ static int spa_proxy_node_process_input(struct spa_node *node)
|
||||||
|
|
||||||
if (impl->client_reuse)
|
if (impl->client_reuse)
|
||||||
io->buffer_id = SPA_ID_INVALID;
|
io->buffer_id = SPA_ID_INVALID;
|
||||||
else
|
|
||||||
io->buffer_id = impl->transport->inputs[i].buffer_id;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
pw_client_node_transport_add_message(impl->transport,
|
pw_client_node_transport_add_message(impl->transport,
|
||||||
&PW_CLIENT_NODE_MESSAGE_INIT(PW_CLIENT_NODE_MESSAGE_PROCESS_INPUT));
|
&PW_CLIENT_NODE_MESSAGE_INIT(PW_CLIENT_NODE_MESSAGE_PROCESS_INPUT));
|
||||||
|
|
@ -831,6 +828,8 @@ static int handle_node_message(struct proxy *this, struct pw_client_node_message
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
*io = impl->transport->inputs[i];
|
*io = impl->transport->inputs[i];
|
||||||
|
if (impl->client_reuse)
|
||||||
|
io->buffer_id = SPA_ID_INVALID;
|
||||||
pw_log_trace("%d %d", io->status, io->buffer_id);
|
pw_log_trace("%d %d", io->status, io->buffer_id);
|
||||||
}
|
}
|
||||||
this->callbacks->need_input(this->callbacks_data);
|
this->callbacks->need_input(this->callbacks_data);
|
||||||
|
|
|
||||||
|
|
@ -416,14 +416,12 @@ static void add_port_update(struct pw_stream *stream, uint32_t change_mask)
|
||||||
|
|
||||||
static inline void send_need_input(struct pw_stream *stream)
|
static inline void send_need_input(struct pw_stream *stream)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
|
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
|
||||||
uint64_t cmd = 1;
|
uint64_t cmd = 1;
|
||||||
|
|
||||||
pw_client_node_transport_add_message(impl->trans,
|
pw_client_node_transport_add_message(impl->trans,
|
||||||
&PW_CLIENT_NODE_MESSAGE_INIT(PW_CLIENT_NODE_MESSAGE_NEED_INPUT));
|
&PW_CLIENT_NODE_MESSAGE_INIT(PW_CLIENT_NODE_MESSAGE_NEED_INPUT));
|
||||||
write(impl->rtwritefd, &cmd, 8);
|
write(impl->rtwritefd, &cmd, 8);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void send_have_output(struct pw_stream *stream)
|
static inline void send_have_output(struct pw_stream *stream)
|
||||||
|
|
@ -531,7 +529,6 @@ static void handle_rtnode_message(struct pw_stream *stream, struct pw_client_nod
|
||||||
uint32_t buffer_id;
|
uint32_t buffer_id;
|
||||||
|
|
||||||
buffer_id = input->buffer_id;
|
buffer_id = input->buffer_id;
|
||||||
input->buffer_id = SPA_ID_INVALID;
|
|
||||||
input->status = SPA_RESULT_NEED_BUFFER;
|
input->status = SPA_RESULT_NEED_BUFFER;
|
||||||
|
|
||||||
pw_log_trace("stream %p: process input %d %d", stream, input->status,
|
pw_log_trace("stream %p: process input %d %d", stream, input->status,
|
||||||
|
|
@ -1081,8 +1078,6 @@ uint32_t pw_stream_get_empty_buffer(struct pw_stream *stream)
|
||||||
bool pw_stream_recycle_buffer(struct pw_stream *stream, uint32_t id)
|
bool pw_stream_recycle_buffer(struct pw_stream *stream, uint32_t id)
|
||||||
{
|
{
|
||||||
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
|
struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this);
|
||||||
struct pw_client_node_message_reuse_buffer rb = PW_CLIENT_NODE_MESSAGE_REUSE_BUFFER_INIT
|
|
||||||
(impl->port_id, id);
|
|
||||||
struct buffer_id *bid;
|
struct buffer_id *bid;
|
||||||
uint64_t cmd = 1;
|
uint64_t cmd = 1;
|
||||||
|
|
||||||
|
|
@ -1092,7 +1087,8 @@ bool pw_stream_recycle_buffer(struct pw_stream *stream, uint32_t id)
|
||||||
bid->used = false;
|
bid->used = false;
|
||||||
spa_list_insert(impl->free.prev, &bid->link);
|
spa_list_insert(impl->free.prev, &bid->link);
|
||||||
|
|
||||||
pw_client_node_transport_add_message(impl->trans, (struct pw_client_node_message *) &rb);
|
pw_client_node_transport_add_message(impl->trans, (struct pw_client_node_message*)
|
||||||
|
&PW_CLIENT_NODE_MESSAGE_REUSE_BUFFER_INIT(impl->port_id, id));
|
||||||
write(impl->rtwritefd, &cmd, 8);
|
write(impl->rtwritefd, &cmd, 8);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue