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