mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-06 13:30:01 -05:00
node: improve scheduling
This commit is contained in:
parent
6b10b0784f
commit
0122e15611
3 changed files with 21 additions and 27 deletions
|
|
@ -646,9 +646,8 @@ static void node_event(void *data, struct spa_event *event)
|
||||||
spa_hook_list_call(&node->listener_list, struct pw_node_events, event, event);
|
spa_hook_list_call(&node->listener_list, struct pw_node_events, event, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_process(void *data, int status)
|
void pw_node_process(struct pw_node *node, int status)
|
||||||
{
|
{
|
||||||
struct pw_node *node = data;
|
|
||||||
struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
|
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);
|
||||||
|
|
@ -656,28 +655,32 @@ static void node_process(void *data, int status)
|
||||||
spa_hook_list_call(&node->listener_list, struct pw_node_events, process);
|
spa_hook_list_call(&node->listener_list, struct pw_node_events, process);
|
||||||
|
|
||||||
if (node->driver) {
|
if (node->driver) {
|
||||||
if (!node->exported) {
|
if (node->rt.driver->state->pending == 0 || !node->remote) {
|
||||||
if (node->rt.driver->state->pending == 0 || !node->remote) {
|
struct timespec ts;
|
||||||
struct timespec ts;
|
struct pw_driver_quantum *q;
|
||||||
struct pw_driver_quantum *q;
|
q = node->rt.quantum;
|
||||||
q = node->rt.quantum;
|
|
||||||
|
|
||||||
q->position = impl->next_position;
|
q->position = impl->next_position;
|
||||||
impl->next_position += q->size;
|
impl->next_position += q->size;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ts);
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
q->nsec = ts.tv_sec * SPA_NSEC_PER_SEC + ts.tv_nsec;
|
q->nsec = ts.tv_sec * SPA_NSEC_PER_SEC + ts.tv_nsec;
|
||||||
|
|
||||||
spa_graph_run(node->rt.driver);
|
spa_graph_run(node->rt.driver);
|
||||||
}
|
|
||||||
else
|
|
||||||
spa_graph_node_trigger(&node->rt.node);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
spa_graph_node_trigger(&node->rt.node);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
spa_graph_node_trigger(&node->rt.node);
|
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)
|
static void node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id)
|
||||||
{
|
{
|
||||||
struct pw_node *node = data;
|
struct pw_node *node = data;
|
||||||
|
|
|
||||||
|
|
@ -620,9 +620,9 @@ int pw_node_initialized(struct pw_node *node);
|
||||||
|
|
||||||
int pw_node_set_driver(struct pw_node *node, struct pw_node *driver);
|
int pw_node_set_driver(struct pw_node *node, struct pw_node *driver);
|
||||||
|
|
||||||
/** Activate a link \memberof pw_link
|
void pw_node_process(struct pw_node *node, int status);
|
||||||
* Starts the negotiation of formats and buffers on \a link and then
|
|
||||||
* starts data streaming */
|
/** starts streaming on a link */
|
||||||
int pw_link_activate(struct pw_link *link);
|
int pw_link_activate(struct pw_link *link);
|
||||||
|
|
||||||
/** Deactivate a link \memberof pw_link */
|
/** Deactivate a link \memberof pw_link */
|
||||||
|
|
|
||||||
|
|
@ -504,14 +504,6 @@ static void unhandle_socket(struct node_data *data)
|
||||||
do_remove_source, 1, NULL, 0, true, data);
|
do_remove_source, 1, NULL, 0, true, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void node_process(void *data)
|
|
||||||
{
|
|
||||||
struct node_data *d = data;
|
|
||||||
uint64_t cmd = 1;
|
|
||||||
pw_log_trace("remote %p: send process", data);
|
|
||||||
write(d->rtwritefd, &cmd, 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void node_finish(void *data)
|
static void node_finish(void *data)
|
||||||
{
|
{
|
||||||
struct node_data *d = data;
|
struct node_data *d = data;
|
||||||
|
|
@ -1334,7 +1326,6 @@ static const struct pw_node_events node_events = {
|
||||||
.destroy = node_destroy,
|
.destroy = node_destroy,
|
||||||
.info_changed = node_info_changed,
|
.info_changed = node_info_changed,
|
||||||
.active_changed = node_active_changed,
|
.active_changed = node_active_changed,
|
||||||
.process = node_process,
|
|
||||||
.finish = node_finish,
|
.finish = node_finish,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue