mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
impl-node: start sync after reposition
After we get a reposition request, bring the state to the SYNC state again so that clients can align with the new position. Fixes a problem with reposition when using the jack transport. Fixes #1907
This commit is contained in:
parent
62660c1e87
commit
f5908dbddf
2 changed files with 8 additions and 1 deletions
|
|
@ -5690,6 +5690,7 @@ int jack_transport_reposition (jack_client_t *client,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
pw_log_debug("frame:%u", pos->frame);
|
pw_log_debug("frame:%u", pos->frame);
|
||||||
|
spa_zero(na->reposition);
|
||||||
na->reposition.flags = 0;
|
na->reposition.flags = 0;
|
||||||
na->reposition.start = 0;
|
na->reposition.start = 0;
|
||||||
na->reposition.duration = 0;
|
na->reposition.duration = 0;
|
||||||
|
|
|
||||||
|
|
@ -1602,6 +1602,7 @@ static int node_ready(void *data, int status)
|
||||||
sync_type = check_updates(node, &reposition_owner);
|
sync_type = check_updates(node, &reposition_owner);
|
||||||
owner[0] = ATOMIC_LOAD(a->segment_owner[0]);
|
owner[0] = ATOMIC_LOAD(a->segment_owner[0]);
|
||||||
owner[1] = ATOMIC_LOAD(a->segment_owner[1]);
|
owner[1] = ATOMIC_LOAD(a->segment_owner[1]);
|
||||||
|
again:
|
||||||
all_ready = sync_type == SYNC_CHECK;
|
all_ready = sync_type == SYNC_CHECK;
|
||||||
update_sync = !all_ready;
|
update_sync = !all_ready;
|
||||||
target_sync = sync_type == SYNC_START ? true : false;
|
target_sync = sync_type == SYNC_START ? true : false;
|
||||||
|
|
@ -1638,8 +1639,13 @@ static int node_ready(void *data, int status)
|
||||||
a->prev_signal_time = a->signal_time;
|
a->prev_signal_time = a->signal_time;
|
||||||
a->sync_timeout = SPA_MIN(min_timeout, DEFAULT_SYNC_TIMEOUT);
|
a->sync_timeout = SPA_MIN(min_timeout, DEFAULT_SYNC_TIMEOUT);
|
||||||
|
|
||||||
if (SPA_UNLIKELY(reposition_node))
|
if (SPA_UNLIKELY(reposition_node)) {
|
||||||
do_reposition(node, reposition_node);
|
do_reposition(node, reposition_node);
|
||||||
|
sync_type = SYNC_START;
|
||||||
|
reposition_owner = 0;
|
||||||
|
reposition_node = NULL;
|
||||||
|
goto again;
|
||||||
|
}
|
||||||
|
|
||||||
update_position(node, all_ready);
|
update_position(node, all_ready);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue