#include <unistd.h>
#include <jack/jack.h>
+#include <jack/metadata.h>
+#include <jack/uuid.h>
#include <pulse/util.h>
#include <pulse/xmalloc.h>
"connect=<connect ports?>");
#define DEFAULT_SINK_NAME "jack_out"
+#define METADATA_TYPE_INT "http://www.w3.org/2001/XMLSchema#int"
+#define METADATA_KEY_ORDER "http://jackaudio.org/metadata/order"
struct userdata {
pa_core *core;
const char **ports = NULL, **p;
pa_sink_new_data data;
jack_latency_range_t r;
+ jack_uuid_t port_uuid;
+ char port_order[4];
size_t n;
pa_assert(m);
pa_log("jack_port_register() failed.");
goto fail;
}
+
+ /* Set order of ports as JACK metadata, if possible. */
+ /* See: https://jackaudio.org/api/group__Metadata.html */
+ port_uuid = jack_port_uuid(u->port[i]);
+
+ if (!jack_uuid_empty(port_uuid)) {
+ if (snprintf(port_order, 4, "%d", i+1) >= 4)
+ pa_log("Port order metadata value > 999 truncated.");
+ if (jack_set_property(u->client, port_uuid, METADATA_KEY_ORDER, port_order, METADATA_TYPE_INT) != 0)
+ pa_log("jack_set_property() failed.");
+ }
}
pa_sink_new_data_init(&data);
#include <unistd.h>
#include <jack/jack.h>
+#include <jack/metadata.h>
+#include <jack/uuid.h>
#include <pulse/util.h>
#include <pulse/xmalloc.h>
"connect=<connect ports?>");
#define DEFAULT_SOURCE_NAME "jack_in"
+#define METADATA_TYPE_INT "http://www.w3.org/2001/XMLSchema#int"
+#define METADATA_KEY_ORDER "http://jackaudio.org/metadata/order"
struct userdata {
pa_core *core;
const char **ports = NULL, **p;
pa_source_new_data data;
jack_latency_range_t r;
+ jack_uuid_t port_uuid;
+ char port_order[4];
size_t n;
pa_assert(m);
pa_log("jack_port_register() failed.");
goto fail;
}
+
+ /* Set order of ports as JACK metadata, if possible. */
+ /* See: https://jackaudio.org/api/group__Metadata.html */
+ port_uuid = jack_port_uuid(u->port[i]);
+
+ if (!jack_uuid_empty(port_uuid)) {
+ if (snprintf(port_order, 4, "%d", i+1) >= 4)
+ pa_log("Port order metadata value > 999 truncated.");
+ if (jack_set_property(u->client, port_uuid, METADATA_KEY_ORDER, port_order, METADATA_TYPE_INT) != 0)
+ pa_log("jack_set_property() failed.");
+ }
}
pa_source_new_data_init(&data);