mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
jack: Pass custom flags as port.extra info
Make a port.extra property that contains API specific extra port information that is passed in the global object properties. Use this to pass the custom jack flags for a port. Carla uses this to mark CV ports.
This commit is contained in:
parent
e6ea01046e
commit
51cfb98ea6
3 changed files with 16 additions and 0 deletions
|
|
@ -2144,6 +2144,10 @@ static void registry_event_global(void *data, uint32_t id,
|
||||||
|
|
||||||
node_id = atoi(str);
|
node_id = atoi(str);
|
||||||
|
|
||||||
|
if ((str = spa_dict_lookup(props, PW_KEY_PORT_EXTRA)) != NULL &&
|
||||||
|
strstr(str, "jack:flags:") == str)
|
||||||
|
flags = atoi(str+11);
|
||||||
|
|
||||||
if ((str = spa_dict_lookup(props, PW_KEY_PORT_NAME)) == NULL)
|
if ((str = spa_dict_lookup(props, PW_KEY_PORT_NAME)) == NULL)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
|
|
@ -3204,6 +3208,7 @@ jack_port_t * jack_port_register (jack_client_t *client,
|
||||||
struct object *o;
|
struct object *o;
|
||||||
jack_port_type_id_t type_id;
|
jack_port_type_id_t type_id;
|
||||||
uint8_t buffer[1024];
|
uint8_t buffer[1024];
|
||||||
|
char port_flags[64];
|
||||||
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
||||||
struct spa_pod *params[4];
|
struct spa_pod *params[4];
|
||||||
uint32_t n_params = 0;
|
uint32_t n_params = 0;
|
||||||
|
|
@ -3276,6 +3281,14 @@ jack_port_t * jack_port_register (jack_client_t *client,
|
||||||
dict = SPA_DICT_INIT(items, 0);
|
dict = SPA_DICT_INIT(items, 0);
|
||||||
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_FORMAT_DSP, port_type);
|
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_FORMAT_DSP, port_type);
|
||||||
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_PORT_NAME, port_name);
|
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_PORT_NAME, port_name);
|
||||||
|
if (flags > 0x1f) {
|
||||||
|
snprintf(port_flags, sizeof(port_flags), "jack:flags:%lu", flags & ~0x1f);
|
||||||
|
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_PORT_EXTRA, port_flags);
|
||||||
|
}
|
||||||
|
if (flags & JackPortIsPhysical)
|
||||||
|
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_PORT_PHYSICAL, "true");
|
||||||
|
if (flags & JackPortIsTerminal)
|
||||||
|
items[dict.n_items++] = SPA_DICT_ITEM_INIT(PW_KEY_PORT_TERMINAL, "true");
|
||||||
port_info.props = &dict;
|
port_info.props = &dict;
|
||||||
port_info.change_mask |= SPA_PORT_CHANGE_MASK_PARAMS;
|
port_info.change_mask |= SPA_PORT_CHANGE_MASK_PARAMS;
|
||||||
port_params[0] = SPA_PARAM_INFO(SPA_PARAM_EnumFormat, SPA_PARAM_INFO_READ);
|
port_params[0] = SPA_PARAM_INFO(SPA_PARAM_EnumFormat, SPA_PARAM_INFO_READ);
|
||||||
|
|
|
||||||
|
|
@ -837,6 +837,7 @@ int pw_impl_port_register(struct pw_impl_port *port,
|
||||||
PW_KEY_PORT_TERMINAL,
|
PW_KEY_PORT_TERMINAL,
|
||||||
PW_KEY_PORT_CONTROL,
|
PW_KEY_PORT_CONTROL,
|
||||||
PW_KEY_PORT_ALIAS,
|
PW_KEY_PORT_ALIAS,
|
||||||
|
PW_KEY_PORT_EXTRA,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,8 @@ extern "C" {
|
||||||
#define PW_KEY_PORT_CONTROL "port.control" /**< if this port is a control port */
|
#define PW_KEY_PORT_CONTROL "port.control" /**< if this port is a control port */
|
||||||
#define PW_KEY_PORT_MONITOR "port.monitor" /**< if this port is a monitor port */
|
#define PW_KEY_PORT_MONITOR "port.monitor" /**< if this port is a monitor port */
|
||||||
#define PW_KEY_PORT_CACHE_PARAMS "port.cache-params" /**< cache the node port params */
|
#define PW_KEY_PORT_CACHE_PARAMS "port.cache-params" /**< cache the node port params */
|
||||||
|
#define PW_KEY_PORT_EXTRA "port.extra" /**< api specific extra port info, API name
|
||||||
|
* should be prefixed. "jack:flags:56" */
|
||||||
|
|
||||||
/** link properties */
|
/** link properties */
|
||||||
#define PW_KEY_LINK_ID "link.id" /**< a link id */
|
#define PW_KEY_LINK_ID "link.id" /**< a link id */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue