jack: move monitor ports after playback ports

Enumerate monitor ports after their playback ports, like how
jack does this.

See #527
This commit is contained in:
Wim Taymans 2021-01-05 15:38:13 +01:00
parent 0d6ba3a032
commit c430b1de58
2 changed files with 11 additions and 3 deletions

View file

@ -129,6 +129,7 @@ struct object {
jack_latency_range_t playback_latency;
int32_t priority;
struct port *port;
bool is_monitor;
} port;
};
};
@ -2128,6 +2129,7 @@ static void registry_event_global(void *data, uint32_t id,
jack_port_type_id_t type_id;
uint32_t node_id;
char full_name[1024];
bool is_monitor = false;
object_type = INTERFACE_Port;
if ((str = spa_dict_lookup(props, PW_KEY_FORMAT_DSP)) == NULL)
@ -2162,6 +2164,9 @@ static void registry_event_global(void *data, uint32_t id,
if (pw_properties_parse_bool(item->value))
type_id = TYPE_ID_MIDI;
}
else if (!strcmp(item->key, PW_KEY_PORT_MONITOR)) {
is_monitor = pw_properties_parse_bool(item->value);
}
}
o = NULL;
@ -2202,6 +2207,7 @@ static void registry_event_global(void *data, uint32_t id,
o->port.flags = flags;
o->port.type_id = type_id;
o->port.node_id = node_id;
o->port.is_monitor = is_monitor;
op = find_port(c, o->port.name);
if (op != NULL && op != o)
@ -4165,9 +4171,10 @@ static int port_compare_func(const void *v1, const void *v2)
int res;
bool is_cap1, is_cap2, is_def1 = false, is_def2 = false;
is_cap1 = ((*o1)->port.flags & JackPortIsOutput) == JackPortIsOutput;
is_cap2 = ((*o2)->port.flags & JackPortIsOutput) == JackPortIsOutput;
is_cap1 = ((*o1)->port.flags & JackPortIsOutput) == JackPortIsOutput &&
!(*o1)->port.is_monitor;
is_cap2 = ((*o2)->port.flags & JackPortIsOutput) == JackPortIsOutput &&
!(*o2)->port.is_monitor;
if (c->metadata) {
if (is_cap1)

View file

@ -834,6 +834,7 @@ int pw_impl_port_register(struct pw_impl_port *port,
PW_KEY_AUDIO_CHANNEL,
PW_KEY_PORT_NAME,
PW_KEY_PORT_DIRECTION,
PW_KEY_PORT_MONITOR,
PW_KEY_PORT_PHYSICAL,
PW_KEY_PORT_TERMINAL,
PW_KEY_PORT_CONTROL,