diff options
author | Wim Taymans <wtaymans@redhat.com> | 2019-05-24 15:47:48 +0200 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2019-05-24 15:47:48 +0200 |
commit | 3ad73f05321fd385dbddd94a31b36071248d15c2 (patch) | |
tree | a688a2e6f8bf56b0275dda87f887e412a02f57a6 | |
parent | 7bb6515800942658cd054a19367f16788d929d88 (diff) |
keys: add keys.h with defines and docs
Add a keys.h file that lists and documents all keys available to
be used in properties.
52 files changed, 493 insertions, 301 deletions
diff --git a/pipewire-alsa b/pipewire-alsa -Subproject ddd753cfc5161797f624b4795e8c7bb71ebfad6 +Subproject d81bbae7ea2cb07abe85636bd52ab19b06b20de diff --git a/pipewire-jack b/pipewire-jack -Subproject 998263819ab94ca1188782b66dc26b9f518b1bc +Subproject 8646c4976070a7c8cfbf710a294be45e15206b6 diff --git a/pipewire-pulseaudio b/pipewire-pulseaudio -Subproject 2057d7955ce73db0e9cd16d38bbaf8c05b06fb8 +Subproject 7d5e860d0c40383bbfa57b4a2ef84505e407194 diff --git a/src/daemon/main.c b/src/daemon/main.c index d4b0ae34..d134c5e9 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -97,8 +97,8 @@ int main(int argc, char *argv[]) return -1; } - props = pw_properties_new(PW_CORE_PROP_NAME, daemon_name, - PW_CORE_PROP_DAEMON, "1", NULL); + props = pw_properties_new(PW_KEY_CORE_NAME, daemon_name, + PW_KEY_CORE_DAEMON, "1", NULL); loop = pw_main_loop_new(props); pw_loop_add_signal(pw_main_loop_get_loop(loop), SIGINT, do_quit, loop); diff --git a/src/examples/audio-src.c b/src/examples/audio-src.c index 86f4f295..416fe1b5 100644 --- a/src/examples/audio-src.c +++ b/src/examples/audio-src.c @@ -116,13 +116,13 @@ int main(int argc, char *argv[]) * the fd of this pipewire mainloop to it. */ data.loop = pw_main_loop_new(NULL); - /* create a simple stream, the simple stream manages to core and remote - * objects for you if you don't need to deal with them + /* Create a simple stream, the simple stream manages the core and remote + * objects for you if you don't need to deal with them. * * If you plan to autoconnect your stream, you need to provide at least - * media, category and role properties + * media, category and role properties. * - * Pass your events and a use_data pointer as the last arguments. This + * Pass your events and a user_data pointer as the last arguments. This * will inform you about the stream state. The most important event * you need to listen to is the process event where you need to produce * the data. @@ -131,22 +131,22 @@ int main(int argc, char *argv[]) pw_main_loop_get_loop(data.loop), "audio-src", pw_properties_new( - PW_NODE_PROP_MEDIA, "Audio", - PW_NODE_PROP_CATEGORY, "Playback", - PW_NODE_PROP_ROLE, "Music", + PW_KEY_MEDIA_TYPE, "Audio", + PW_KEY_MEDIA_CATEGORY, "Playback", + PW_KEY_MEDIA_ROLE, "Music", NULL), &stream_events, &data); - /* make one parameter with the supported formats. The SPA_PARAM_EnumFormat - * id means that this is a format enumeration. */ + /* Make one parameter with the supported formats. The SPA_PARAM_EnumFormat + * id means that this is a format enumeration (of 1 value). */ params[0] = spa_format_audio_raw_build(&b, SPA_PARAM_EnumFormat, &SPA_AUDIO_INFO_RAW_INIT( .format = SPA_AUDIO_FORMAT_F32, .channels = DEFAULT_CHANNELS, .rate = DEFAULT_RATE )); - /* now connect this stream. We ask that our process function is + /* Now connect this stream. We ask that our process function is * called in a realtime thread. */ pw_stream_connect(data.stream, PW_DIRECTION_OUTPUT, @@ -156,7 +156,7 @@ int main(int argc, char *argv[]) PW_STREAM_FLAG_RT_PROCESS, params, 1); - /* and wait */ + /* and wait while we let things run */ pw_main_loop_run(data.loop); pw_stream_destroy(data.stream); diff --git a/src/examples/export-sink.c b/src/examples/export-sink.c index 59c33710..ab7505f7 100644 --- a/src/examples/export-sink.c +++ b/src/examples/export-sink.c @@ -458,12 +458,12 @@ static void make_node(struct data *data) { struct pw_properties *props; - props = pw_properties_new(PW_NODE_PROP_AUTOCONNECT, "1", NULL); + props = pw_properties_new(PW_KEY_NODE_AUTOCONNECT, "1", NULL); if (data->path) - pw_properties_set(props, PW_NODE_PROP_TARGET_NODE, data->path); - pw_properties_set(props, PW_NODE_PROP_MEDIA, "Video"); - pw_properties_set(props, PW_NODE_PROP_CATEGORY, "Capture"); - pw_properties_set(props, PW_NODE_PROP_ROLE, "Camera"); + pw_properties_set(props, PW_KEY_NODE_TARGET, data->path); + pw_properties_set(props, PW_KEY_MEDIA_TYPE, "Video"); + pw_properties_set(props, PW_KEY_MEDIA_CATEGORY, "Capture"); + pw_properties_set(props, PW_KEY_MEDIA_ROLE, "Camera"); data->impl_node.iface = SPA_INTERFACE_INIT( SPA_TYPE_INTERFACE_Node, diff --git a/src/examples/export-source.c b/src/examples/export-source.c index 98f8450b..edbf5202 100644 --- a/src/examples/export-source.c +++ b/src/examples/export-source.c @@ -464,14 +464,14 @@ static void make_node(struct data *data) { struct pw_properties *props; - props = pw_properties_new(PW_NODE_PROP_AUTOCONNECT, "1", - PW_NODE_PROP_EXCLUSIVE, "1", - PW_NODE_PROP_MEDIA, "Audio", - PW_NODE_PROP_CATEGORY, "Playback", - PW_NODE_PROP_ROLE, "Music", + props = pw_properties_new(PW_KEY_NODE_AUTOCONNECT, "1", + PW_KEY_NODE_EXCLUSIVE, "1", + PW_KEY_MEDIA_TYPE, "Audio", + PW_KEY_MEDIA_CATEGORY, "Playback", + PW_KEY_MEDIA_ROLE, "Music", NULL); if (data->path) - pw_properties_set(props, PW_NODE_PROP_TARGET_NODE, data->path); + pw_properties_set(props, PW_KEY_NODE_TARGET, data->path); data->impl_node.iface = SPA_INTERFACE_INIT( SPA_TYPE_INTERFACE_Node, @@ -522,7 +522,7 @@ int main(int argc, char *argv[]) SPA_PORT_CHANGE_MASK_PARAMS; data.info = SPA_PORT_INFO_INIT(); data.info.flags = SPA_PORT_FLAG_CAN_USE_BUFFERS; - data.items[0] = SPA_DICT_ITEM_INIT("port.dsp", "32 bit float mono audio"); + data.items[0] = SPA_DICT_ITEM_INIT(PW_KEY_FORMAT_DSP, "32 bit float mono audio"); data.dict = SPA_DICT_INIT_ARRAY(data.items); data.info.props = &data.dict; data.params[0] = SPA_PARAM_INFO(SPA_PARAM_EnumFormat, SPA_PARAM_INFO_READ); diff --git a/src/examples/export-spa.c b/src/examples/export-spa.c index b86d956d..8bd2c00b 100644 --- a/src/examples/export-spa.c +++ b/src/examples/export-spa.c @@ -58,8 +58,8 @@ static int make_node(struct data *data) "spa.factory.name", data->factory, NULL); if (data->path) { - pw_properties_set(props, PW_NODE_PROP_AUTOCONNECT, "1"); - pw_properties_set(props, PW_NODE_PROP_TARGET_NODE, data->path); + pw_properties_set(props, PW_KEY_NODE_AUTOCONNECT, "1"); + pw_properties_set(props, PW_KEY_NODE_TARGET, data->path); } data->node = pw_factory_create_object(factory, diff --git a/src/examples/media-session.c b/src/examples/media-session.c index f9e56d41..8dc25c8e 100644 --- a/src/examples/media-session.c +++ b/src/examples/media-session.c @@ -291,18 +291,18 @@ static int link_session_dsp(struct impl *impl, struct session *session) pw_log_debug(NAME " %p: link session dsp '%d'", impl, session->id); props = pw_properties_new(NULL, NULL); - pw_properties_set(props, PW_LINK_PROP_PASSIVE, "true"); + pw_properties_set(props, PW_KEY_LINK_PASSIVE, "true"); if (session->direction == PW_DIRECTION_OUTPUT) { - pw_properties_setf(props, PW_LINK_OUTPUT_NODE_ID, "%d", session->dsp->info->id); - pw_properties_setf(props, PW_LINK_OUTPUT_PORT_ID, "%d", -1); - pw_properties_setf(props, PW_LINK_INPUT_NODE_ID, "%d", session->node->info->id); - pw_properties_setf(props, PW_LINK_INPUT_PORT_ID, "%d", -1); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_NODE, "%d", session->dsp->info->id); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_PORT, "%d", -1); + pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", session->node->info->id); + pw_properties_setf(props, PW_KEY_LINK_INPUT_PORT, "%d", -1); } else { - pw_properties_setf(props, PW_LINK_OUTPUT_NODE_ID, "%d", session->node->info->id); - pw_properties_setf(props, PW_LINK_OUTPUT_PORT_ID, "%d", -1); - pw_properties_setf(props, PW_LINK_INPUT_NODE_ID, "%d", session->dsp->info->id); - pw_properties_setf(props, PW_LINK_INPUT_PORT_ID, "%d", -1); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_NODE, "%d", session->node->info->id); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_PORT, "%d", -1); + pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", session->dsp->info->id); + pw_properties_setf(props, PW_KEY_LINK_INPUT_PORT, "%d", -1); } session->link_proxy = pw_core_proxy_create_object(impl->core_proxy, @@ -478,7 +478,7 @@ handle_node(struct impl *impl, uint32_t id, uint32_t parent_id, struct pw_proxy *p; struct node *node; - media_class = props ? spa_dict_lookup(props, "media.class") : NULL; + media_class = props ? spa_dict_lookup(props, PW_KEY_MEDIA_CLASS) : NULL; p = pw_registry_proxy_bind(impl->registry_proxy, id, type, PW_VERSION_NODE_PROXY, @@ -556,7 +556,7 @@ handle_node(struct impl *impl, uint32_t id, uint32_t parent_id, sess->enabled = false; sess->starting = true; sess->node = node; - if ((str = spa_dict_lookup(props, "node.plugged")) != NULL) + if ((str = spa_dict_lookup(props, PW_KEY_NODE_PLUGGED)) != NULL) sess->plugged = pw_properties_parse_uint64(str); else sess->plugged = SPA_TIMESPEC_TO_NSEC(&impl->now); @@ -653,7 +653,7 @@ handle_port(struct impl *impl, uint32_t id, uint32_t parent_id, uint32_t type, if ((node = find_object(impl, parent_id)) == NULL) return -ESRCH; - if (props == NULL || (str = spa_dict_lookup(props, "port.direction")) == NULL) + if (props == NULL || (str = spa_dict_lookup(props, PW_KEY_PORT_DIRECTION)) == NULL) return -EINVAL; p = pw_registry_proxy_bind(impl->registry_proxy, @@ -669,7 +669,7 @@ handle_port(struct impl *impl, uint32_t id, uint32_t parent_id, uint32_t type, port->node = node; port->direction = strcmp(str, "out") ? PW_DIRECTION_OUTPUT : PW_DIRECTION_INPUT; - if (props != NULL && (str = spa_dict_lookup(props, "port.dsp")) != NULL) + if (props != NULL && (str = spa_dict_lookup(props, PW_KEY_FORMAT_DSP)) != NULL) port->flags |= PORT_FLAG_DSP; if (node->type == NODE_TYPE_DSP && !(port->flags & PORT_FLAG_DSP)) port->flags |= PORT_FLAG_SKIP; @@ -755,7 +755,7 @@ handle_client(struct impl *impl, uint32_t id, uint32_t parent_id, if (props == NULL) return 0; - str = spa_dict_lookup(props, "pipewire.access"); + str = spa_dict_lookup(props, PW_KEY_ACCESS); if (str == NULL) return 0; @@ -865,7 +865,7 @@ static int find_session(void *data, struct session *sess) if ((props = sess->node->info->props) == NULL) return 0; - if ((str = spa_dict_lookup(props, "media.class")) == NULL) + if ((str = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS)) == NULL) return 0; if (strcmp(str, find->media_class) != 0) @@ -912,19 +912,19 @@ static int link_nodes(struct node *peer, enum pw_direction direction, struct nod props = pw_properties_new(NULL, NULL); if (p->direction == PW_DIRECTION_OUTPUT) { - pw_properties_setf(props, PW_LINK_OUTPUT_NODE_ID, "%d", node->obj.id); - pw_properties_setf(props, PW_LINK_OUTPUT_PORT_ID, "%d", -1); - pw_properties_setf(props, PW_LINK_INPUT_NODE_ID, "%d", peer->obj.id); - pw_properties_setf(props, PW_LINK_INPUT_PORT_ID, "%d", p->obj.id); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_NODE, "%d", node->obj.id); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_PORT, "%d", -1); + pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", peer->obj.id); + pw_properties_setf(props, PW_KEY_LINK_INPUT_PORT, "%d", p->obj.id); pw_log_debug(NAME " %p: node %d -> port %d:%d", impl, node->obj.id, peer->obj.id, p->obj.id); } else { - pw_properties_setf(props, PW_LINK_OUTPUT_NODE_ID, "%d", peer->obj.id); - pw_properties_setf(props, PW_LINK_OUTPUT_PORT_ID, "%d", p->obj.id); - pw_properties_setf(props, PW_LINK_INPUT_NODE_ID, "%d", node->obj.id); - pw_properties_setf(props, PW_LINK_INPUT_PORT_ID, "%d", -1); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_NODE, "%d", peer->obj.id); + pw_properties_setf(props, PW_KEY_LINK_OUTPUT_PORT, "%d", p->obj.id); + pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", node->obj.id); + pw_properties_setf(props, PW_KEY_LINK_INPUT_PORT, "%d", -1); pw_log_debug(NAME " %p: port %d:%d -> node %d", impl, peer->obj.id, p->obj.id, node->obj.id); } @@ -986,20 +986,20 @@ static int rescan_node(struct impl *impl, struct node *node) info = node->info; props = info->props; - str = spa_dict_lookup(props, PW_NODE_PROP_AUTOCONNECT); + str = spa_dict_lookup(props, PW_KEY_NODE_AUTOCONNECT); if (str == NULL || !pw_properties_parse_bool(str)) { pw_log_debug(NAME" %p: node %d does not need autoconnect", impl, node->obj.id); return 0; } - if ((media = spa_dict_lookup(props, PW_NODE_PROP_MEDIA)) == NULL) + if ((media = spa_dict_lookup(props, PW_KEY_MEDIA_TYPE)) == NULL) media = node->media; if (media == NULL) { pw_log_debug(NAME" %p: node %d has unknown media", impl, node->obj.id); return 0; } - if ((category = spa_dict_lookup(props, PW_NODE_PROP_CATEGORY)) == NULL) { + if ((category = spa_dict_lookup(props, PW_KEY_MEDIA_CATEGORY)) == NULL) { pw_log_debug(NAME" %p: node %d find category from ports: %d %d", impl, node->obj.id, info->n_input_ports, info->n_output_ports); if (node->direction == PW_DIRECTION_INPUT || @@ -1017,7 +1017,7 @@ static int rescan_node(struct impl *impl, struct node *node) } } - if ((role = spa_dict_lookup(props, PW_NODE_PROP_ROLE)) == NULL) { + if ((role = spa_dict_lookup(props, PW_KEY_MEDIA_ROLE)) == NULL) { if (strcmp(media, "Audio") == 0) { if (strcmp(category, "Duplex") == 0) role = "Communication"; @@ -1036,7 +1036,7 @@ static int rescan_node(struct impl *impl, struct node *node) } } - if ((str = spa_dict_lookup(props, PW_NODE_PROP_EXCLUSIVE)) != NULL) + if ((str = spa_dict_lookup(props, PW_KEY_NODE_EXCLUSIVE)) != NULL) exclusive = pw_properties_parse_bool(str); else exclusive = false; @@ -1077,7 +1077,7 @@ static int rescan_node(struct impl *impl, struct node *node) return -EINVAL; } - str = spa_dict_lookup(props, PW_NODE_PROP_TARGET_NODE); + str = spa_dict_lookup(props, PW_KEY_NODE_TARGET); if (str != NULL) find.path_id = atoi(str); else @@ -1106,7 +1106,7 @@ static int rescan_node(struct impl *impl, struct node *node) } } else { - str = spa_dict_lookup(props, "pipewire.dont-reconnect"); + str = spa_dict_lookup(props, PW_KEY_NODE_DONT_RECONNECT); if (str != NULL && pw_properties_parse_bool(str)) { pw_registry_proxy_destroy(impl->registry_proxy, node->obj.id); return -ENOENT; @@ -1248,7 +1248,7 @@ static void rescan_session(struct impl *impl, struct session *sess) info = node->format; props = pw_properties_new_dict(node->info->props); - if ((str = pw_properties_get(props, "device.nick")) == NULL) + if ((str = pw_properties_get(props, PW_KEY_DEVICE_NICK)) == NULL) str = node->info->name; pw_properties_set(props, "audio-dsp.name", str); pw_properties_setf(props, "audio-dsp.direction", "%d", sess->direction); diff --git a/src/examples/video-play.c b/src/examples/video-play.c index d918f6f5..44f2d6dd 100644 --- a/src/examples/video-play.c +++ b/src/examples/video-play.c @@ -344,9 +344,9 @@ int main(int argc, char *argv[]) pw_main_loop_get_loop(data.loop), "video-play", pw_properties_new( - PW_NODE_PROP_MEDIA, "Video", - PW_NODE_PROP_CATEGORY, "Capture", - PW_NODE_PROP_ROLE, "Camera", + PW_KEY_MEDIA_TYPE, "Video", + PW_KEY_MEDIA_CATEGORY, "Capture", + PW_KEY_MEDIA_ROLE, "Camera", NULL), &stream_events, &data); diff --git a/src/examples/video-src.c b/src/examples/video-src.c index fc9712fe..e78c31fe 100644 --- a/src/examples/video-src.c +++ b/src/examples/video-src.c @@ -289,7 +289,7 @@ static void on_state_changed(void *_data, enum pw_remote_state old, enum pw_remo data->stream = pw_stream_new(remote, "video-src", pw_properties_new( - "media.class", "Video/Source", + PW_KEY_MEDIA_CLASS, "Video/Source", NULL)); params[0] = spa_pod_builder_add_object(&b, diff --git a/src/gst/gstpipewiredeviceprovider.c b/src/gst/gstpipewiredeviceprovider.c index 513eeea5..3025c847 100644 --- a/src/gst/gstpipewiredeviceprovider.c +++ b/src/gst/gstpipewiredeviceprovider.c @@ -237,7 +237,7 @@ new_node (GstPipeWireDeviceProvider *self, struct node_data *data) spa_dict_for_each (item, info->props) gst_structure_set (props, item->key, G_TYPE_STRING, item->value, NULL); - klass = spa_dict_lookup (info->props, "media.class"); + klass = spa_dict_lookup (info->props, PW_KEY_MEDIA_CLASS); } if (klass == NULL) klass = "unknown/unknown"; diff --git a/src/gst/gstpipewiresrc.c b/src/gst/gstpipewiresrc.c index baa9411c..44227488 100644 --- a/src/gst/gstpipewiresrc.c +++ b/src/gst/gstpipewiresrc.c @@ -472,14 +472,14 @@ parse_stream_properties (GstPipeWireSrc *pwsrc, const struct pw_properties *prop gboolean is_live; GST_OBJECT_LOCK (pwsrc); - var = pw_properties_get (props, PW_STREAM_PROP_IS_LIVE); + var = pw_properties_get (props, PW_KEY_STREAM_IS_LIVE); var = "true"; is_live = pwsrc->is_live = var ? pw_properties_parse_bool(var) : FALSE; - var = pw_properties_get (props, PW_STREAM_PROP_LATENCY_MIN); + var = pw_properties_get (props, PW_KEY_STREAM_LATENCY_MIN); pwsrc->min_latency = var ? (GstClockTime) atoi (var) : 0; - var = pw_properties_get (props, PW_STREAM_PROP_LATENCY_MAX); + var = pw_properties_get (props, PW_KEY_STREAM_LATENCY_MAX); pwsrc->max_latency = var ? (GstClockTime) atoi (var) : GST_CLOCK_TIME_NONE; GST_OBJECT_UNLOCK (pwsrc); diff --git a/src/modules/module-access.c b/src/modules/module-access.c index 133f64fb..613ab26d 100644 --- a/src/modules/module-access.c +++ b/src/modules/module-access.c @@ -35,9 +35,9 @@ #include <pipewire/pipewire.h> static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Perform access check" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Perform access check" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct impl { @@ -121,7 +121,7 @@ core_check_access(void *data, struct pw_client *client) pid = -EINVAL; if ((props = pw_client_get_properties(client)) != NULL) { - if ((str = pw_properties_get(props, PW_CLIENT_PROP_UCRED_PID)) != NULL) + if ((str = pw_properties_get(props, PW_KEY_SEC_PID)) != NULL) pid = atoi(str); } @@ -138,7 +138,7 @@ core_check_access(void *data, struct pw_client *client) goto granted; if (res > 0) res = -EACCES; - items[0] = SPA_DICT_ITEM_INIT("pipewire.access", "blacklisted"); + items[0] = SPA_DICT_ITEM_INIT(PW_KEY_ACCESS, "blacklisted"); goto blacklisted; } @@ -153,7 +153,7 @@ core_check_access(void *data, struct pw_client *client) else if (res > 0) { pw_log_debug("module %p: restricted client %p added", impl, client); } - items[0] = SPA_DICT_ITEM_INIT("pipewire.access", "restricted"); + items[0] = SPA_DICT_ITEM_INIT(PW_KEY_ACCESS, "restricted"); goto wait_permissions; } @@ -166,7 +166,7 @@ core_check_access(void *data, struct pw_client *client) else if (res > 0) { pw_log_debug("module %p: sandboxed client %p added", impl, client); } - items[0] = SPA_DICT_ITEM_INIT("pipewire.access", "flatpak"); + items[0] = SPA_DICT_ITEM_INIT(PW_KEY_ACCESS, "flatpak"); goto wait_permissions; } diff --git a/src/modules/module-audio-dsp.c b/src/modules/module-audio-dsp.c index 2fea4084..278c4cca 100644 --- a/src/modules/module-audio-dsp.c +++ b/src/modules/module-audio-dsp.c @@ -40,9 +40,9 @@ #include "module-audio-dsp/audio-dsp.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Manage audio DSP nodes" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Manage audio DSP nodes" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct factory_data { diff --git a/src/modules/module-audio-dsp/audio-dsp.c b/src/modules/module-audio-dsp/audio-dsp.c index be8a7592..46494e11 100644 --- a/src/modules/module-audio-dsp/audio-dsp.c +++ b/src/modules/module-audio-dsp/audio-dsp.c @@ -187,13 +187,13 @@ static void node_port_init(void *data, struct pw_port *port) old = pw_port_get_properties(port); - monitor = (str = pw_properties_get(old, "port.monitor")) != NULL && - atoi(str) != 0; + monitor = (str = pw_properties_get(old, PW_KEY_PORT_MONITOR)) != NULL && + pw_properties_parse_bool(str); if (!monitor && direction == n->direction) return; - new = pw_properties_new("port.dsp", "32 bit float mono audio", NULL); + new = pw_properties_new(PW_KEY_FORMAT_DSP, "32 bit float mono audio", NULL); if (monitor) prefix = "monitor"; @@ -202,23 +202,23 @@ static void node_port_init(void *data, struct pw_port *port) else prefix = "capture"; - if ((str = pw_properties_get(old, "port.channel")) == NULL || + if ((str = pw_properties_get(old, PW_KEY_PORT_CHANNEL)) == NULL || strcmp(str, "UNK") == 0) { snprintf(position, 7, "%d", port->port_id); str = position; } - pw_properties_setf(new, "port.name", "%s_%s", prefix, str); + pw_properties_setf(new, PW_KEY_PORT_NAME, "%s_%s", prefix, str); if (direction != n->direction) { - pw_properties_setf(new, "port.alias1", "%s_pcm:%s:%s%s", - pw_properties_get(n->props, "device.api"), + pw_properties_setf(new, PW_KEY_PORT_ALIAS1, "%s_pcm:%s:%s%s", + pw_properties_get(n->props, PW_KEY_DEVICE_API), pw_properties_get(n->props, "audio-dsp.name"), direction == PW_DIRECTION_INPUT ? "in" : "out", str); - pw_properties_set(new, "port.physical", "1"); - pw_properties_set(new, "port.terminal", "1"); + pw_properties_set(new, PW_KEY_PORT_PHYSICAL, "1"); + pw_properties_set(new, PW_KEY_PORT_TERMINAL, "1"); } pw_port_update_properties(port, &new->dict); @@ -271,8 +271,8 @@ struct pw_node *pw_audio_dsp_new(struct pw_core *core, pr = pw_properties_copy(props); - if ((api = pw_properties_get(pr, "device.api")) == NULL) { - pw_log_error("missing device.api property"); + if ((api = pw_properties_get(pr, PW_KEY_DEVICE_API)) == NULL) { + pw_log_error("missing "PW_KEY_DEVICE_API" property"); goto error; } if ((alias = pw_properties_get(pr, "audio-dsp.name")) == NULL) { @@ -287,14 +287,14 @@ struct pw_node *pw_audio_dsp_new(struct pw_core *core, } pw_properties_set(pr, - "media.class", + PW_KEY_MEDIA_CLASS, direction == PW_DIRECTION_OUTPUT ? "Audio/DSP/Playback" : "Audio/DSP/Capture"); - pw_properties_set(pr, "node.driver", NULL); + pw_properties_set(pr, PW_KEY_NODE_DRIVER, NULL); - if ((str = pw_properties_get(pr, "node.id")) != NULL) - pw_properties_set(pr, "node.session", str); + if ((str = pw_properties_get(pr, PW_KEY_NODE_ID)) != NULL) + pw_properties_set(pr, PW_KEY_NODE_SESSION, str); if (direction == PW_DIRECTION_OUTPUT) { pw_properties_set(pr, "merger.monitor", "1"); diff --git a/src/modules/module-client-node.c b/src/modules/module-client-node.c index b97926f4..43289dda 100644 --- a/src/modules/module-client-node.c +++ b/src/modules/module-client-node.c @@ -35,9 +35,9 @@ #include "module-client-node/client-stream.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Allow clients to create and control remote nodes" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Allow clients to create and control remote nodes" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct pw_proxy *pw_remote_node_export(struct pw_remote *remote, @@ -76,7 +76,7 @@ static void *create_object(void *_data, parent = pw_client_get_global(client); - if (properties && pw_properties_get(properties, "node.stream") != NULL) { + if (properties && pw_properties_get(properties, PW_KEY_NODE_STREAM) != NULL) { result = pw_client_stream_new(node_resource, parent, properties); } else { diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index e538d911..c8db04b5 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -1671,7 +1671,7 @@ struct pw_client_node *pw_client_node_new(struct pw_resource *resource, pw_map_init(&impl->io_map, 64, 64); pw_array_init(&impl->mems, 64); - if ((name = pw_properties_get(properties, "node.name")) == NULL) + if ((name = pw_properties_get(properties, PW_KEY_NODE_NAME)) == NULL) name = "client-node"; this->resource = resource; diff --git a/src/modules/module-client-node/client-stream.c b/src/modules/module-client-node/client-stream.c index 8516517b..21d281b7 100644 --- a/src/modules/module-client-node/client-stream.c +++ b/src/modules/module-client-node/client-stream.c @@ -988,11 +988,12 @@ static void client_node_initialized(void *data) dir); props = pw_node_get_properties(impl->client_node->node); - if (props != NULL && (str = pw_properties_get(props, PW_NODE_PROP_EXCLUSIVE)) != NULL) + if (props != NULL && (str = pw_properties_get(props, PW_KEY_NODE_EXCLUSIVE)) != NULL) exclusive = pw_properties_parse_bool(str); else exclusive = false; - if (props != NULL && (str = pw_properties_get(props, "pipewire.monitor")) != NULL) + + if (props != NULL && (str = pw_properties_get(props, PW_KEY_STREAM_MONITOR)) != NULL) monitor = pw_properties_parse_bool(str); else monitor = false; @@ -1105,7 +1106,7 @@ static void client_node_initialized(void *data) snprintf(media_class, sizeof(media_class), "Stream/%s/%s", dir, type); - items[0] = SPA_DICT_ITEM_INIT("media.class", media_class); + items[0] = SPA_DICT_ITEM_INIT(PW_KEY_MEDIA_CLASS, media_class); pw_node_update_properties(impl->this.node, &SPA_DICT_INIT(items, 1)); } @@ -1262,7 +1263,7 @@ struct pw_client_stream *pw_client_stream_new(struct pw_resource *resource, pw_log_debug("client-stream %p: new", impl); props = pw_properties_copy(properties); - pw_properties_set(props, "node.driver", NULL); + pw_properties_set(props, PW_KEY_NODE_DRIVER, NULL); impl->client_node = pw_client_node_new( resource, @@ -1280,7 +1281,7 @@ struct pw_client_stream *pw_client_stream_new(struct pw_resource *resource, node_init(&impl->node, NULL, support, n_support); impl->node.impl = impl; - if ((name = pw_properties_get(properties, "node.name")) == NULL) + if ((name = pw_properties_get(properties, PW_KEY_NODE_NAME)) == NULL) name = "client-stream"; this->node = pw_spa_node_new(core, diff --git a/src/modules/module-link-factory.c b/src/modules/module-link-factory.c index 4992e232..ad9a465f 100644 --- a/src/modules/module-link-factory.c +++ b/src/modules/module-link-factory.c @@ -33,9 +33,9 @@ #include "pipewire/private.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Allow clients to create links" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Allow clients to create links" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct factory_data { @@ -153,20 +153,20 @@ static void *create_object(void *_data, if (properties == NULL) goto no_properties; - if ((str = pw_properties_get(properties, PW_LINK_OUTPUT_NODE_ID)) == NULL) + if ((str = pw_properties_get(properties, PW_KEY_LINK_OUTPUT_NODE)) == NULL) goto no_properties; output_node_id = pw_properties_parse_int(str); - if ((str = pw_properties_get(properties, PW_LINK_INPUT_NODE_ID)) == NULL) + if ((str = pw_properties_get(properties, PW_KEY_LINK_INPUT_NODE)) == NULL) goto no_properties; input_node_id = pw_properties_parse_int(str); - str = pw_properties_get(properties, PW_LINK_OUTPUT_PORT_ID); + str = pw_properties_get(properties, PW_KEY_LINK_OUTPUT_PORT); output_port_id = str ? pw_properties_parse_int(str) : -1; - str = pw_properties_get(properties, PW_LINK_INPUT_PORT_ID); + str = pw_properties_get(properties, PW_KEY_LINK_INPUT_PORT); input_port_id = str ? pw_properties_parse_int(str) : -1; global = pw_core_find_global(core, output_node_id); @@ -206,7 +206,7 @@ static void *create_object(void *_data, if (inport == NULL) goto no_input_port; - str = pw_properties_get(properties, "object.linger"); + str = pw_properties_get(properties, PW_KEY_OBJECT_LINGER); linger = str ? pw_properties_parse_bool(str) : false; link = pw_link_new(core, outport, inport, NULL, properties, sizeof(struct link_data)); diff --git a/src/modules/module-protocol-dbus.c b/src/modules/module-protocol-dbus.c index fb9f22e5..5c07f996 100644 --- a/src/modules/module-protocol-dbus.c +++ b/src/modules/module-protocol-dbus.c @@ -371,10 +371,10 @@ handle_create_client_node(PipeWireDaemon1 * interface, pw_log_debug("protocol-dbus %p: create client-node: %s", impl, sender); props = pw_properties_from_variant(arg_properties); - target_node = pw_properties_get(props, PW_NODE_PROP_TARGET_NODE); + target_node = pw_properties_get(props, PW_KEY_NODE_TARGET); if (target_node) { if (strncmp(target_node, "/org/pipewire/node_", strlen("/org/pipewire/node_")) == 0) { - pw_properties_setf(props, PW_NODE_PROP_TARGET_NODE, "%s", + pw_properties_setf(props, PW_KEY_NODE_TARGET, "%s", target_node + strlen("/org/pipewire/node_")); } } diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c index e23665b8..b76b57e9 100644 --- a/src/modules/module-protocol-native.c +++ b/src/modules/module-protocol-native.c @@ -54,9 +54,9 @@ #endif static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Native protocol using unix sockets" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Native protocol using unix sockets" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; static bool debug_messages = 0; @@ -256,7 +256,7 @@ static struct pw_client *client_new(struct server *s, int fd) struct pw_properties *props; char buffer[1024]; - props = pw_properties_new(PW_CLIENT_PROP_PROTOCOL, "protocol-native", NULL); + props = pw_properties_new(PW_KEY_PROTOCOL, "protocol-native", NULL); if (props == NULL) goto exit; @@ -264,16 +264,16 @@ static struct pw_client *client_new(struct server *s, int fd) if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &ucred, &len) < 0) { pw_log_error("no peercred: %m"); } else { - pw_properties_setf(props, PW_CLIENT_PROP_UCRED_PID, "%d", ucred.pid); - pw_properties_setf(props, PW_CLIENT_PROP_UCRED_UID, "%d", ucred.uid); - pw_properties_setf(props, PW_CLIENT_PROP_UCRED_GID, "%d", ucred.gid); + pw_properties_setf(props, PW_KEY_SEC_PID, "%d", ucred.pid); + pw_properties_setf(props, PW_KEY_SEC_UID, "%d", ucred.uid); + pw_properties_setf(props, PW_KEY_SEC_GID, "%d", ucred.gid); } len = sizeof(buffer); if (getsockopt(fd, SOL_SOCKET, SO_PEERSEC, buffer, &len) < 0) { pw_log_error("no peersec: %m"); } else { - pw_properties_setf(props, PW_CLIENT_PROP_SEC_LABEL, "%s", buffer); + pw_properties_setf(props, PW_KEY_SEC_LABEL, "%s", buffer); } client = pw_client_new(protocol->core, @@ -651,7 +651,7 @@ impl_new_client(struct pw_protocol *protocol, impl->properties = properties ? pw_properties_copy(properties) : NULL; if (properties) - str = pw_properties_get(properties, "remote.intention"); + str = pw_properties_get(properties, PW_KEY_REMOTE_INTENTION); if (str == NULL) str = "generic"; @@ -719,7 +719,7 @@ get_name(const struct pw_properties *properties) const char *name = NULL; if (properties) - name = pw_properties_get(properties, PW_CORE_PROP_NAME); + name = pw_properties_get(properties, PW_KEY_CORE_NAME); if (name == NULL) name = getenv("PIPEWIRE_CORE"); if (name == NULL) @@ -888,7 +888,7 @@ static int module_init(struct pw_module *module, struct pw_properties *propertie val = getenv("PIPEWIRE_DAEMON"); if (val == NULL) - val = pw_properties_get(pw_core_get_properties(core), PW_CORE_PROP_DAEMON); + val = pw_properties_get(pw_core_get_properties(core), PW_KEY_CORE_DAEMON); if (val && pw_properties_parse_bool(val)) { if (impl_add_server(this, core, properties) == NULL) return -errno; diff --git a/src/modules/module-protocol-native/local-socket.c b/src/modules/module-protocol-native/local-socket.c index 7669fa03..b701e2da 100644 --- a/src/modules/module-protocol-native/local-socket.c +++ b/src/modules/module-protocol-native/local-socket.c @@ -42,7 +42,7 @@ get_remote(const struct pw_properties *properties) const char *name = NULL; if (properties) - name = pw_properties_get(properties, PW_REMOTE_PROP_REMOTE_NAME); + name = pw_properties_get(properties, PW_KEY_REMOTE_NAME); if (name == NULL) name = getenv("PIPEWIRE_REMOTE"); if (name == NULL) diff --git a/src/modules/module-rtkit.c b/src/modules/module-rtkit.c index 28033a0d..9f635954 100644 --- a/src/modules/module-rtkit.c +++ b/src/modules/module-rtkit.c @@ -42,9 +42,9 @@ #include <pipewire/pipewire.h> static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Use RTKit to raise thread priorities" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Use RTKit to raise thread priorities" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct impl { diff --git a/src/modules/spa/module-device.c b/src/modules/spa/module-device.c index 15d76412..c03dcc40 100644 --- a/src/modules/spa/module-device.c +++ b/src/modules/spa/module-device.c @@ -33,14 +33,15 @@ #include <pipewire/log.h> #include <pipewire/module.h> #include <pipewire/utils.h> +#include <pipewire/keys.h> #include "spa-monitor.h" #include "spa-device.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Load and manage an SPA device" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Load and manage an SPA device" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct device_data { diff --git a/src/modules/spa/module-monitor.c b/src/modules/spa/module-monitor.c index d1e5cd6b..fdbcf92a 100644 --- a/src/modules/spa/module-monitor.c +++ b/src/modules/spa/module-monitor.c @@ -35,13 +35,14 @@ #include <pipewire/log.h> #include <pipewire/core.h> #include <pipewire/module.h> +#include <pipewire/keys.h> #include "spa-monitor.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Manage SPA monitors" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Manage SPA monitors" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct data { diff --git a/src/modules/spa/module-node-factory.c b/src/modules/spa/module-node-factory.c index d4b98d14..9a7b817d 100644 --- a/src/modules/spa/module-node-factory.c +++ b/src/modules/spa/module-node-factory.c @@ -34,9 +34,9 @@ #include "spa-node.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Provide a factory to make SPA nodes" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Provide a factory to make SPA nodes" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct factory_data { diff --git a/src/modules/spa/module-node.c b/src/modules/spa/module-node.c index c3b6957b..bdff2605 100644 --- a/src/modules/spa/module-node.c +++ b/src/modules/spa/module-node.c @@ -32,6 +32,7 @@ #include <limits.h> #include <pipewire/core.h> +#include <pipewire/keys.h> #include <pipewire/log.h> #include <pipewire/module.h> #include <pipewire/utils.h> @@ -40,9 +41,9 @@ #include "spa-node.h" static const struct spa_dict_item module_props[] = { - { PW_MODULE_PROP_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, - { PW_MODULE_PROP_DESCRIPTION, "Load and manage an SPA node" }, - { PW_MODULE_PROP_VERSION, PACKAGE_VERSION }, + { PW_KEY_MODULE_AUTHOR, "Wim Taymans <wim.taymans@gmail.com>" }, + { PW_KEY_MODULE_DESCRIPTION, "Load and manage an SPA node" }, + { PW_KEY_MODULE_VERSION, PACKAGE_VERSION }, }; struct node_data { diff --git a/src/modules/spa/spa-monitor.c b/src/modules/spa/spa-monitor.c index d14059f8..840a3596 100644 --- a/src/modules/spa/spa-monitor.c +++ b/src/modules/spa/spa-monitor.c @@ -42,6 +42,7 @@ #include <pipewire/type.h> #include <pipewire/node.h> #include <pipewire/device.h> +#include <pipewire/keys.h> #include "spa-monitor.h" #include "spa-device.h" @@ -117,11 +118,11 @@ static struct monitor_item *add_item(struct pw_spa_monitor *this, } } - if ((str = pw_properties_get(props, "device.form_factor")) != NULL) + if ((str = pw_properties_get(props, PW_KEY_DEVICE_FORM_FACTOR)) != NULL) if (strcmp(str, "internal") == 0) now = 0; - if (now != 0 && pw_properties_get(props, "device.plugged") == NULL) - pw_properties_setf(props, "device.plugged", "%"PRIu64, now); + if (now != 0 && pw_properties_get(props, PW_KEY_DEVICE_PLUGGED) == NULL) + pw_properties_setf(props, PW_KEY_DEVICE_PLUGGED, "%"PRIu64, now); support = pw_core_get_support(impl->core, &n_support); diff --git a/src/pipewire/client.h b/src/pipewire/client.h index f2e301cd..0f165893 100644 --- a/src/pipewire/client.h +++ b/src/pipewire/client.h @@ -110,14 +110,6 @@ struct pw_client_events { void (*busy_changed) (void *data, bool busy); }; -/** The name of the protocol used by the client, set by the protocol */ -#define PW_CLIENT_PROP_PROTOCOL "pipewire.protocol" - -#define PW_CLIENT_PROP_UCRED_PID "pipewire.ucred.pid" /**< Client pid, set by protocol */ -#define PW_CLIENT_PROP_UCRED_UID "pipewire.ucred.uid" /**< Client uid, set by protocol*/ -#define PW_CLIENT_PROP_UCRED_GID "pipewire.ucred.gid" /**< client gid, set by protocol*/ -#define PW_CLIENT_PROP_SEC_LABEL "pipewire.sec.label" /**< client security label, set by protocol*/ - /** Create a new client. This is mainly used by protocols. */ struct pw_client * pw_client_new(struct pw_core *core, /**< the core object */ diff --git a/src/pipewire/core.c b/src/pipewire/core.c index cdf99c18..93ea05d8 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -497,11 +497,11 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, spa_list_init(&this->driver_list); spa_hook_list_init(&this->listener_list); - if ((name = pw_properties_get(properties, PW_CORE_PROP_NAME)) == NULL) { + if ((name = pw_properties_get(properties, PW_KEY_CORE_NAME)) == NULL) { pw_properties_setf(properties, - PW_CORE_PROP_NAME, "pipewire-%s-%d", + PW_KEY_CORE_NAME, "pipewire-%s-%d", pw_get_user_name(), getpid()); - name = pw_properties_get(properties, PW_CORE_PROP_NAME); + name = pw_properties_get(properties, PW_KEY_CORE_NAME); } this->info.change_mask = 0; @@ -519,10 +519,10 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, PW_TYPE_INTERFACE_Core, PW_VERSION_CORE_PROXY, pw_properties_new( - PW_CORE_PROP_USER_NAME, this->info.user_name, - PW_CORE_PROP_HOST_NAME, this->info.host_name, - PW_CORE_PROP_NAME, this->info.name, - PW_CORE_PROP_VERSION, this->info.version, + PW_KEY_USER_NAME, this->info.user_name, + PW_KEY_HOST_NAME, this->info.host_name, + PW_KEY_CORE_NAME, this->info.name, + PW_KEY_CORE_VERSION, this->info.version, NULL), global_bind, this); diff --git a/src/pipewire/core.h b/src/pipewire/core.h index c660b46b..f811a761 100644 --- a/src/pipewire/core.h +++ b/src/pipewire/core.h @@ -95,17 +95,6 @@ struct pw_core_events { void (*global_removed) (void *data, struct pw_global *global); }; -/** The user name that started the core */ -#define PW_CORE_PROP_USER_NAME "pipewire.core.user-name" -/** The host name of the machine */ -#define PW_CORE_PROP_HOST_NAME "pipewire.core.host-name" -/** The name of the core. Default is pipewire-<user-name>-<pid> */ -#define PW_CORE_PROP_NAME "pipewire.core.name" -/** The version of the core. */ -#define PW_CORE_PROP_VERSION "pipewire.core.version" -/** If the core should listen for connections, boolean default false */ -#define PW_CORE_PROP_DAEMON "pipewire.daemon" - /** Make a new core object for a given main_loop. Ownership of the properties is taken */ struct pw_core * pw_core_new(struct pw_loop *main_loop, /**< a main loop to run in */ struct pw_properties *props, /**< extra properties */ diff --git a/src/pipewire/device.c b/src/pipewire/device.c index cc0f186c..a0f6d2f3 100644 --- a/src/pipewire/device.c +++ b/src/pipewire/device.c @@ -31,6 +31,7 @@ #include "pipewire/private.h" #include "pipewire/interfaces.h" #include "pipewire/type.h" +#include "pipewire/keys.h" struct impl { struct pw_device this; @@ -287,9 +288,9 @@ int pw_device_register(struct pw_device *device, if (properties == NULL) return -ENOMEM; - pw_properties_set(properties, "device.name", device->info.name); - if ((str = pw_properties_get(device->properties, "media.class")) != NULL) - pw_properties_set(properties, "media.class", str); + pw_properties_set(properties, PW_KEY_DEVICE_NAME, device->info.name); + if ((str = pw_properties_get(device->properties, PW_KEY_MEDIA_CLASS)) != NULL) + pw_properties_set(properties, PW_KEY_MEDIA_CLASS, str); spa_list_append(&core->device_list, &device->link); device->registered = true; diff --git a/src/pipewire/factory.c b/src/pipewire/factory.c index e5f1dc9c..d18a164e 100644 --- a/src/pipewire/factory.c +++ b/src/pipewire/factory.c @@ -30,6 +30,7 @@ #include "pipewire/private.h" #include "pipewire/type.h" #include "pipewire/interfaces.h" +#include "pipewire/keys.h" #define pw_factory_resource_info(r,...) pw_resource_notify(r,struct pw_factory_proxy_events,info,0,__VA_ARGS__) @@ -156,10 +157,10 @@ int pw_factory_register(struct pw_factory *factory, if (properties == NULL) return -ENOMEM; - pw_properties_set(properties, "factory.name", factory->info.name); - pw_properties_setf(properties, "factory.type.name", "%s", + pw_properties_set(properties, PW_KEY_FACTORY_NAME, factory->info.name); + pw_properties_setf(properties, PW_KEY_FACTORY_TYPE_NAME, "%s", spa_debug_type_find_name(pw_type_info(), factory->info.type)); - pw_properties_setf(properties, "factory.type.version", "%d", factory->info.version); + pw_properties_setf(properties, PW_KEY_FACTORY_TYPE_VERSION, "%d", factory->info.version); spa_list_append(&core->factory_list, &factory->link); factory->registered = true; diff --git a/src/pipewire/interfaces.h b/src/pipewire/interfaces.h index 1a1a2934..1b22bcf2 100644 --- a/src/pipewire/interfaces.h +++ b/src/pipewire/interfaces.h @@ -163,11 +163,6 @@ struct pw_core_proxy_events { #define PW_CORE_PROXY_METHOD_DESTROY 7 #define PW_CORE_PROXY_METHOD_NUM 8 -#define PW_LINK_OUTPUT_NODE_ID "link.output_node.id" -#define PW_LINK_OUTPUT_PORT_ID "link.output_port.id" -#define PW_LINK_INPUT_NODE_ID "link.input_node.id" -#define PW_LINK_INPUT_PORT_ID "link.input_port.id" - /** * \struct pw_core_proxy_methods * \brief Core methods diff --git a/src/pipewire/keys.h b/src/pipewire/keys.h new file mode 100644 index 00000000..d0986a7f --- /dev/null +++ b/src/pipewire/keys.h @@ -0,0 +1,238 @@ +/* PipeWire + * + * Copyright © 2019 Wim Taymans + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef PIPEWIRE_KEYS_H +#define PIPEWIRE_KEYS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * A collection of keys that are used to add extra information on objects. + * + * Keys that start with "pipewire." are in general set-once and then + * read-only. They are usually used for security sensitive information that + * needs to be fixed. + */ + +/* Peroperties usually set on the core object */ +#define PW_KEY_USER_NAME "pipewire.user-name" /**< The user name that runs pipewire */ +#define PW_KEY_HOST_NAME "pipewire.host-name" /**< The host name of the machine */ +#define PW_KEY_CORE_NAME "pipewire.core.name" /**< The name of the core. Default is + * pipewire-<user-name>-<pid> */ +#define PW_KEY_CORE_VERSION "pipewire.core.version" /**< The version of the core. */ +#define PW_KEY_CORE_DAEMON "pipewire.core.daemon" /**< If the core is listening for connections. */ + +/** The protocol key is usually set on a pw_client and contains a + * string describing the protocol used by the client to access + * PipeWire */ +#define PW_KEY_PROTOCOL "pipewire.protocol" +#define PW_KEY_ACCESS "pipewire.access" /**< how the client access is controlled */ + +/** Various keys related to the identity of a client process and its security. + * Must be obtained from trusted sources by the protocol and placed as + * read-only properties. */ +#define PW_KEY_SEC_PID "pipewire.sec.pid" /**< Client pid, set by protocol */ +#define PW_KEY_SEC_UID "pipewire.sec.uid" /**< Client uid, set by protocol*/ +#define PW_KEY_SEC_GID "pipewire.sec.gid" /**< client gid, set by protocol*/ +#define PW_KEY_SEC_LABEL "pipewire.sec.label" /**< client security label, set by protocol*/ + +/* remote keys */ +#define PW_KEY_REMOTE_NAME "remote.name" /**< The name of the remote to connect to, + * default env(PIPEWIRE_REMOTE) or pipewire-0 */ +#define PW_KEY_REMOTE_INTENTION "remote.intention" /**< The intention of the remote connection, + * "generic", "screencast" */ + +/** application keys */ +#define PW_KEY_APP_NAME "application.name" /**< application name. Ex: "Totem Music Player" */ +#define PW_KEY_APP_ID "application.id" /**< a textual id for identifying an + * application logically. Ex: "org.gnome.Totem" */ +#define PW_KEY_APP_VERSION "application.version" +#define PW_KEY_APP_ICON "application.icon" /**< aa base64 blob with PNG image data */ +#define PW_KEY_APP_ICON_NAME "application.icon-name" /**< an XDG icon name for the application. + * Ex: "totem" */ +#define PW_KEY_APP_LANGUAGE "application.language" /**< application language if applicable, in + * standard POSIX format. Ex: "en_GB" */ + +#define PW_KEY_APP_PROCESS_ID "application.process.id" /**< process id (pid)*/ +#define PW_KEY_APP_PROCESS_BINARY "application.process.binary" /**< binary name */ +#define PW_KEY_APP_PROCESS_USER "application.process.user" /**< user name */ +#define PW_KEY_APP_PROCESS_HOST "application.process.host" /**< host name */ +#define PW_KEY_APP_PROCESS_MACHINE_ID "application.process.machine-id" /**< the D-Bus host id the + * application runs on */ +#define PW_KEY_APP_PROCESS_SESSION_ID "application.process.session-id" /**< login session of the + * application, on Unix the + * value of $XDG_SESSION_ID. */ +/** window system */ +#define PW_KEY_WINDOW_X11_DISPLAY "window.x11.display" /**< the X11 display string. Ex. ":0.0" */ + +/** Client properties */ +#define PW_KEY_CLIENT_NAME "client.name" /**< the client name */ +#define PW_KEY_CLIENT_API "client.api" /**< the client api used to access + * PipeWire */ + +/** Node keys */ +#define PW_KEY_NODE_ID "node.id" /**< node id */ +#define PW_KEY_NODE_NAME "node.name" /**< node name */ +#define PW_KEY_NODE_PLUGGED "node.plugged" /**< when the node was created. As a uint64 in + * nanoseconds. */ +#define PW_KEY_NODE_SESSION "node.session" /**< the session id this node is part of */ +#define PW_KEY_NODE_EXCLUSIVE "node.exclusive" /**< node wants exclusive access to resources */ +#define PW_KEY_NODE_AUTOCONNECT "node.autoconnect" /**< node wants to be automatically connected + * to a compatible node */ +#define PW_KEY_NODE_TARGET "node.target" /**< node want to be connected to the target + * node/session */ +#define PW_KEY_NODE_LATENCY "node.latency" /**< the requested latency of the node as + * a fraction. Ex: 128/48000 */ +#define PW_KEY_NODE_DONT_RECONNECT "node.dont-reconnect" /**< don't reconnect this node */ +#define PW_KEY_NODE_PAUSE_ON_IDLE "node.pause-on-idle" /**< pause the node when idle */ +#define PW_KEY_NODE_DRIVER "node.driver" /**< node can drive the graph */ +#define PW_KEY_NODE_STREAM "node.stream" /**< node is a stream, the server side should + * add a converter */ +/** Port keys */ +#define PW_KEY_PORT_ID "port.id" /**< port id */ +#define PW_KEY_PORT_NAME "port.name" /**< port name */ +#define PW_KEY_PORT_DIRECTION "port.direction" /**< the port direction, one of "in" or "out" + * or "control" and "notify" for control ports */ +#define PW_KEY_PORT_CHANNEL "port.channel" /**< port channel */ +#define PW_KEY_PORT_ALIAS1 "port.alias1" /**< port alias1 */ +#define PW_KEY_PORT_ALIAS2 "port.alias2" /**< port alias2 */ +#define PW_KEY_PORT_PHYSICAL "port.physical" /**< if this is a physical port */ +#define PW_KEY_PORT_TERMINAL "port.terminal" /**< if this port consumes the data */ +#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 */ + +/** link properties */ +#define PW_KEY_LINK_INPUT_NODE "link.input.node" /**< input node id of a link */ +#define PW_KEY_LINK_INPUT_PORT "link.input.port" /**< input port id of a link */ +#define PW_KEY_LINK_OUTPUT_NODE "link.output.node" /**< output node id of a link */ +#define PW_KEY_LINK_OUTPUT_PORT "link.output.port" /**< output port id of a link */ +#define PW_KEY_LINK_PASSIVE "link.passive" /**< indicate that a link is passive and + * does not cause the graph to be + * runnable. */ +/** device properties */ +#define PW_KEY_DEVICE_NAME "device.name" /**< device name */ +#define PW_KEY_DEVICE_PLUGGED "device.plugged" /**< when the device was created. As a uint64 in + * nanoseconds. */ +#define PW_KEY_DEVICE_NICK "device.nick" /**< a short device nickname */ +#define PW_KEY_DEVICE_STRING "device.string" /**< device string in the underlying layer's + * format. Ex. "surround51:0" */ +#define PW_KEY_DEVICE_API "device.api" /**< API this device is accessed with. + * Ex. "alsa", "v4l2" */ +#define PW_KEY_DEVICE_DESCRIPTION "device.description" /**< localized human readable device one-line + * description. Ex. "Foobar USB Headset" */ +#define PW_KEY_DEVICE_BUS_PATH "device.bus-path" /**< bus path to the device in the OS' + * format. Ex. "pci-0000:00:14.0-usb-0:3.2:1.0" */ +#define PW_KEY_DEVICE_SERIAL "device.serial" /**< Serial number if applicable */ +#define PW_KEY_DEVICE_VENDOR_ID "device.vendor.id" /**< vendor ID if applicable */ +#define PW_KEY_DEVICE_VENDOR_NAME "device.vendor.name" /**< vendor name if applicable */ +#define PW_KEY_DEVICE_PRODUCT_ID "device.product.id" /**< product ID if applicable */ +#define PW_KEY_DEVICE_PRODUCT_NAME "device.product.name" /**< product name if applicable */ +#define PW_KEY_DEVICE_CLASS "device.class" /**< device class */ +#define PW_KEY_DEVICE_FORM_FACTOR "device.form-factor" /**< form factor if applicable. One of + * "internal", "speaker", "handset", "tv", + * "webcam", "microphone", "headset", + * "headphone", "hands-free", "car", "hifi", + * "computer", "portable" */ +#define PW_KEY_DEVICE_BUS "device.bus" /**< bus of the device if applicable. One of + * "isa", "pci", "usb", "firewire", + * "bluetooth" */ +#define PW_KEY_DEVICE_ICON "device.icon" /**< icon for the device. A base64 blob + * containing PNG image data */ +#define PW_KEY_DEVICE_ICON_NAME "device.icon-name" /**< an XDG icon name for the device. + * Ex. "sound-card-speakers-usb" */ +#define PW_KEY_DEVICE_INTENDED_ROLES "device.intended-roles" /**< intended use. A space separated list of + * roles (see PW_KEY_MEDIA_ROLE) this device + * is particularly well suited for, due to + * latency, quality or form factor. */ + +/** module properties */ +#define PW_KEY_MODULE_NAME "module.name" /**< the name of the module */ +#define PW_KEY_MODULE_AUTHOR "module.author" /**< the author's name */ +#define PW_KEY_MODULE_DESCRIPTION "module.description" /**< a human readable one-line description + * of the module's purpose.*/ +#define PW_KEY_MODULE_USAGE "module.usage" /**< a human readable usage description of + * the module's arguments. */ +#define PW_KEY_MODULE_VERSION "module.version" /**< a version string for the module. */ + +/** Factory properties */ +#define PW_KEY_FACTORY_NAME "factory.name" /**< the name of the factory */ +#define PW_KEY_FACTORY_TYPE_NAME "factory.type.name" /**< the name of the type created by a factory */ +#define PW_KEY_FACTORY_TYPE_VERSION "factory.type.version" /**< the version of the type created by a factory */ + +/** Stream properties */ +#define PW_KEY_STREAM_IS_LIVE "stream.is-live" /**< Indicates that the stream is live. */ +#define PW_KEY_STREAM_LATENCY_MIN "stream.latency.min" /**< The minimum latency of the stream. */ +#define PW_KEY_STREAM_LATENCY_MAX "stream.latency.max" /**< The maximum latency of the stream */ +#define PW_KEY_STREAM_MONITOR "stream.monitor" /**< Indicates that the stream is monitoring + * and might select a less accurate but faster + * conversion algorithm. */ + +/** object properties */ +#define PW_KEY_OBJECT_LINGER "object.linger" /**< the object lives on even after the client + * that created it has been destroyed */ + +/** Media */ +#define PW_KEY_MEDIA_TYPE "media.type" /**< Media type, one of + * Audio, Video, Midi */ +#define PW_KEY_MEDIA_CATEGORY "media.category" /**< Media Category: + * Playback, Capture, Duplex, Monitor */ +#define PW_KEY_MEDIA_ROLE "media.role" /**< Role: Movie, Music, Camera, + * Screen, Communication, Game, + * Notification, DSP, Production, + * Accessibility, Test */ +#define PW_KEY_MEDIA_CLASS "media.class" /**< class Ex: "Video/Source" */ +#define PW_KEY_MEDIA_NAME "media.name" /**< media name. Ex: "Pink Floyd: Time" */ +#define PW_KEY_MEDIA_TITLE "media.title" /**< title. Ex: "Time" */ +#define PW_KEY_MEDIA_ARTIST "media.artist" /**< artist. Ex: "Pink Floyd" */ +#define PW_KEY_MEDIA_COPYRIGHT "media.copyright" /**< copyright string */ +#define PW_KEY_MEDIA_SOFTWARE "media.software" /**< generator software */ +#define PW_KEY_MEDIA_LANGUAGE "media.language" /**< language in POSIX format. Ex: en_GB */ +#define PW_KEY_MEDIA_FILENAME "media.filename" /**< filename */ +#define PW_KEY_MEDIA_ICON "media.icon" /**< icon for the media, a base64 blob with + * PNG image data */ +#define PW_KEY_MEDIA_ICON_NAME "media.icon-name" /**< an XDG icon name for the media. + * Ex: "audio-x-mp3" */ + +/** format related properties */ +#define PW_KEY_FORMAT_DSP "format.dsp" /**< a dsp format. + * Ex: "32 bit float mono audio" */ +/** audio related properties */ +#define PW_KEY_AUDIO_CHANNEL "audio.channel" /**< an audio channel. Ex: "FL" */ +#define PW_KEY_AUDIO_RATE "audio.samplerate" /**< an audio samplerate */ +#define PW_KEY_AUDIO_CHANNELS "audio.channels" /**< number of audio channels */ +#define PW_KEY_AUDIO_FORMAT "audio.format" /**< an audio format. Ex: "S16LE" */ + +/** video related properties */ +#define PW_KEY_VIDEO_RATE "video.framerate" /**< a video framerate */ +#define PW_KEY_VIDEO_FORMAT "video.format" /**< a video format */ +#define PW_KEY_VIDEO_SIZE "video.size" /**< a video size as "<width>x<height" */ + + +#ifdef __cplusplus +} +#endif + +#endif /* PIPEWIRE_KEYS_H */ diff --git a/src/pipewire/link.c b/src/pipewire/link.c index aa27608c..928c6edf 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -33,6 +33,7 @@ #include <spa/param/param.h> #include <spa/buffer/alloc.h> +#include "pipewire/keys.h" #include "pipewire/private.h" #include "pipewire/interfaces.h" #include "pipewire/control.h" @@ -1289,7 +1290,7 @@ struct pw_link *pw_link_new(struct pw_core *core, this->output = output; if (properties) { - const char *str = pw_properties_get(properties, PW_LINK_PROP_PASSIVE); + const char *str = pw_properties_get(properties, PW_KEY_LINK_PASSIVE); if (str && pw_properties_parse_bool(str)) impl->passive = true; } @@ -1414,8 +1415,8 @@ int pw_link_register(struct pw_link *link, link->info.input_node_id = input_node->global->id; link->info.input_port_id = link->input->global->id; - pw_properties_setf(properties, "link.output", "%d", link->info.output_port_id); - pw_properties_setf(properties, "link.input", "%d", link->info.input_port_id); + pw_properties_setf(properties, PW_KEY_LINK_INPUT_PORT, "%d", link->info.input_port_id); + pw_properties_setf(properties, PW_KEY_LINK_OUTPUT_PORT, "%d", link->info.output_port_id); spa_list_append(&core->link_list, &link->link); link->registered = true; diff --git a/src/pipewire/link.h b/src/pipewire/link.h index 764d2ebd..a1c9c57d 100644 --- a/src/pipewire/link.h +++ b/src/pipewire/link.h @@ -73,9 +73,6 @@ struct pw_link_events { void (*port_unlinked) (void *data, struct pw_port *port); }; -/** Indicate that a link is passive, it does not cause the nodes to activate, - * set to "1" or "0" */ -#define PW_LINK_PROP_PASSIVE "pipewire.link.passive" /** Make a new link between two ports \memberof pw_link * \return a newly allocated link */ diff --git a/src/pipewire/meson.build b/src/pipewire/meson.build index 9d68de6b..e1ae48f8 100644 --- a/src/pipewire/meson.build +++ b/src/pipewire/meson.build @@ -9,6 +9,7 @@ pipewire_headers = [ 'global.h', 'interfaces.h', 'introspect.h', + 'keys.h', 'link.h', 'log.h', 'loop.h', diff --git a/src/pipewire/module.c b/src/pipewire/module.c index 933dd1eb..2650034c 100644 --- a/src/pipewire/module.c +++ b/src/pipewire/module.c @@ -33,6 +33,7 @@ #include <sys/stat.h> #include <errno.h> +#include "pipewire/keys.h" #include "pipewire/private.h" #include "pipewire/interfaces.h" #include "pipewire/utils.h" @@ -232,7 +233,7 @@ pw_module_load(struct pw_core *core, spa_hook_list_init(&this->listener_list); - pw_properties_set(properties, PW_MODULE_PROP_NAME, name); + pw_properties_set(properties, PW_KEY_MODULE_NAME, name); this->info.name = name ? strdup(name) : NULL; this->info.filename = filename; @@ -245,7 +246,7 @@ pw_module_load(struct pw_core *core, PW_TYPE_INTERFACE_Module, PW_VERSION_MODULE_PROXY, pw_properties_new( - PW_MODULE_PROP_NAME, name, + PW_KEY_MODULE_NAME, name, NULL), global_bind, this); diff --git a/src/pipewire/module.h b/src/pipewire/module.h index 434c3bbb..af18cef1 100644 --- a/src/pipewire/module.h +++ b/src/pipewire/module.h @@ -65,12 +65,6 @@ struct pw_module_events { void (*destroy) (void *data); }; -/** The name of the module */ -#define PW_MODULE_PROP_NAME "pipewire.module.name" -#define PW_MODULE_PROP_AUTHOR "pipewire.module.author" -#define PW_MODULE_PROP_DESCRIPTION "pipewire.module.description" -#define PW_MODULE_PROP_VERSION "pipewire.module.version" - struct pw_module * pw_module_load(struct pw_core *core, const char *name, /**< name of the module */ diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 97a0ebe7..4abeead3 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -37,6 +37,7 @@ #include "pipewire/interfaces.h" #include "pipewire/private.h" +#include "pipewire/keys.h" #include "pipewire/node.h" #include "pipewire/data-loop.h" #include "pipewire/main-loop.h" @@ -489,13 +490,13 @@ int pw_node_register(struct pw_node *this, if (properties == NULL) return -ENOMEM; - if ((str = pw_properties_get(this->properties, "media.class")) != NULL) - pw_properties_set(properties, "media.class", str); - if ((str = pw_properties_get(this->properties, "media.role")) != NULL) - pw_properties_set(properties, "media.role", str); - pw_properties_set(properties, "node.name", this->info.name); - if ((str = pw_properties_get(this->properties, "node.session")) != NULL) - pw_properties_set(properties, "node.session", str); + if ((str = pw_properties_get(this->properties, PW_KEY_MEDIA_CLASS)) != NULL) + pw_properties_set(properties, PW_KEY_MEDIA_CLASS, str); + if ((str = pw_properties_get(this->properties, PW_KEY_MEDIA_ROLE)) != NULL) + pw_properties_set(properties, PW_KEY_MEDIA_ROLE, str); + pw_properties_set(properties, PW_KEY_NODE_NAME, this->info.name); + if ((str = pw_properties_get(this->properties, PW_KEY_NODE_SESSION)) != NULL) + pw_properties_set(properties, PW_KEY_NODE_SESSION, str); spa_list_append(&core->node_list, &this->link); this->registered = true; @@ -511,7 +512,7 @@ int pw_node_register(struct pw_node *this, this->info.id = this->global->id; this->rt.activation->position.clock.id = this->info.id; - pw_properties_setf(this->properties, "node.id", "%d", this->info.id); + pw_properties_setf(this->properties, PW_KEY_NODE_ID, "%d", this->info.id); pw_node_initialized(this); @@ -604,12 +605,12 @@ static void check_properties(struct pw_node *node) const char *str; bool driver; - if ((str = pw_properties_get(node->properties, "node.pause-on-idle"))) + if ((str = pw_properties_get(node->properties, PW_KEY_NODE_PAUSE_ON_IDLE))) impl->pause_on_idle = pw_properties_parse_bool(str); else impl->pause_on_idle = true; - if ((str = pw_properties_get(node->properties, "node.driver"))) + if ((str = pw_properties_get(node->properties, PW_KEY_NODE_DRIVER))) driver = pw_properties_parse_bool(str); else driver = false; @@ -623,7 +624,7 @@ static void check_properties(struct pw_node *node) spa_list_remove(&node->driver_link); } - if ((str = pw_properties_get(node->properties, "node.latency"))) { + if ((str = pw_properties_get(node->properties, PW_KEY_NODE_LATENCY))) { uint32_t num, denom; pw_log_info("node %p: latency '%s'", node, str); if (sscanf(str, "%u/%u", &num, &denom) == 2 && denom != 0) { diff --git a/src/pipewire/node.h b/src/pipewire/node.h index 5c0c71bf..03561438 100644 --- a/src/pipewire/node.h +++ b/src/pipewire/node.h @@ -99,20 +99,6 @@ struct pw_node_events { void (*peer_removed) (void *data, struct pw_node *peer); }; -/** Media type of the node, Audio, Video, Midi */ -#define PW_NODE_PROP_MEDIA "pipewire.media" -/** Category: Playback, Capture, Duplex */ -#define PW_NODE_PROP_CATEGORY "pipewire.category" -/** Role: Movie,Music, Camera, Screen, Communication, Game, Notification, DSP, - * Production, Accessibility, Test */ -#define PW_NODE_PROP_ROLE "pipewire.role" -/** exclusive access to device */ -#define PW_NODE_PROP_EXCLUSIVE "pipewire.exclusive" -/** Automatically connect this node to a compatible node */ -#define PW_NODE_PROP_AUTOCONNECT "pipewire.autoconnect" -/** Try to connect the node to this node id */ -#define PW_NODE_PROP_TARGET_NODE "pipewire.target.node" - /** Create a new node \memberof pw_node */ struct pw_node * pw_node_new(struct pw_core *core, /**< the core */ diff --git a/src/pipewire/pipewire.c b/src/pipewire/pipewire.c index f5e72242..6ab8c952 100644 --- a/src/pipewire/pipewire.c +++ b/src/pipewire/pipewire.c @@ -502,37 +502,37 @@ void pw_fill_remote_properties(struct pw_core *core, struct pw_properties *prope { const char *val; - if (!pw_properties_get(properties, "application.name")) - pw_properties_set(properties, "application.name", pw_get_client_name()); + if (!pw_properties_get(properties, PW_KEY_APP_NAME)) + pw_properties_set(properties, PW_KEY_APP_NAME, pw_get_client_name()); - if (!pw_properties_get(properties, "application.prgname")) - pw_properties_set(properties, "application.prgname", pw_get_prgname()); + if (!pw_properties_get(properties, PW_KEY_APP_PROCESS_BINARY)) + pw_properties_set(properties, PW_KEY_APP_PROCESS_BINARY, pw_get_prgname()); - if (!pw_properties_get(properties, "application.language")) { - pw_properties_set(properties, "application.language", getenv("LANG")); + if (!pw_properties_get(properties, PW_KEY_APP_LANGUAGE)) { + pw_properties_set(properties, PW_KEY_APP_LANGUAGE, getenv("LANG")); } - if (!pw_properties_get(properties, "application.process.id")) { - pw_properties_setf(properties, "application.process.id", "%zd", (size_t) getpid()); + if (!pw_properties_get(properties, PW_KEY_APP_PROCESS_ID)) { + pw_properties_setf(properties, PW_KEY_APP_PROCESS_ID, "%zd", (size_t) getpid()); } - if (!pw_properties_get(properties, "application.process.user")) - pw_properties_set(properties, "application.process.user", pw_get_user_name()); + if (!pw_properties_get(properties, PW_KEY_APP_PROCESS_USER)) + pw_properties_set(properties, PW_KEY_APP_PROCESS_USER, pw_get_user_name()); - if (!pw_properties_get(properties, "application.process.host")) - pw_properties_set(properties, "application.process.host", pw_get_host_name()); + if (!pw_properties_get(properties, PW_KEY_APP_PROCESS_HOST)) + pw_properties_set(properties, PW_KEY_APP_PROCESS_HOST, pw_get_host_name()); - if (!pw_properties_get(properties, "application.process.session_id")) { - pw_properties_set(properties, "application.process.session_id", + if (!pw_properties_get(properties, PW_KEY_APP_PROCESS_SESSION_ID)) { + pw_properties_set(properties, PW_KEY_APP_PROCESS_SESSION_ID, getenv("XDG_SESSION_ID")); } - if (!pw_properties_get(properties, "window.x11.display")) { - pw_properties_set(properties, "window.x11.display", + if (!pw_properties_get(properties, PW_KEY_WINDOW_X11_DISPLAY)) { + pw_properties_set(properties, PW_KEY_WINDOW_X11_DISPLAY, getenv("DISPLAY")); } - pw_properties_set(properties, PW_CORE_PROP_VERSION, core->info.version); - pw_properties_set(properties, PW_CORE_PROP_NAME, core->info.name); + pw_properties_set(properties, PW_KEY_CORE_VERSION, core->info.version); + pw_properties_set(properties, PW_KEY_CORE_NAME, core->info.name); - if ((val = pw_properties_get(core->properties, PW_CORE_PROP_DAEMON))) - pw_properties_set(properties, PW_CORE_PROP_DAEMON, val); + if ((val = pw_properties_get(core->properties, PW_KEY_CORE_DAEMON))) + pw_properties_set(properties, PW_KEY_CORE_DAEMON, val); } /** Fill stream properties diff --git a/src/pipewire/pipewire.h b/src/pipewire/pipewire.h index 6bf24431..40cce6f3 100644 --- a/src/pipewire/pipewire.h +++ b/src/pipewire/pipewire.h @@ -36,6 +36,7 @@ extern "C" { #include <pipewire/device.h> #include <pipewire/interfaces.h> #include <pipewire/introspect.h> +#include <pipewire/keys.h> #include <pipewire/link.h> #include <pipewire/log.h> #include <pipewire/loop.h> diff --git a/src/pipewire/port.c b/src/pipewire/port.c index 782b6be4..7945b2be 100644 --- a/src/pipewire/port.c +++ b/src/pipewire/port.c @@ -352,9 +352,9 @@ struct pw_port *pw_port_new(enum pw_direction direction, goto no_mem; if (SPA_FLAG_CHECK(info->flags, SPA_PORT_FLAG_PHYSICAL)) - pw_properties_set(properties, "port.physical", "1"); + pw_properties_set(properties, PW_KEY_PORT_PHYSICAL, "1"); if (SPA_FLAG_CHECK(info->flags, SPA_PORT_FLAG_TERMINAL)) - pw_properties_set(properties, "port.terminal", "1"); + pw_properties_set(properties, PW_KEY_PORT_TERMINAL, "1"); this->direction = direction; this->port_id = port_id; @@ -682,25 +682,26 @@ int pw_port_add(struct pw_port *port, struct pw_node *node) pw_port_for_each_param(port, 0, SPA_PARAM_IO, 0, 0, NULL, check_param_io, port); - dir = port->direction == PW_DIRECTION_INPUT ? "in" : "out"; - pw_properties_set(port->properties, "port.direction", dir); + control = PW_PORT_IS_CONTROL(port); + if (control) { + dir = port->direction == PW_DIRECTION_INPUT ? "control" : "notify"; + pw_properties_set(port->properties, PW_KEY_PORT_CONTROL, "1"); + } + else { + dir = port->direction == PW_DIRECTION_INPUT ? "in" : "out"; + } + pw_properties_set(port->properties, PW_KEY_PORT_DIRECTION, dir); - if ((str = pw_properties_get(port->properties, "port.name")) == NULL) { - if ((str = pw_properties_get(port->properties, "port.channel")) != NULL && + if ((str = pw_properties_get(port->properties, PW_KEY_PORT_NAME)) == NULL) { + if ((str = pw_properties_get(port->properties, PW_KEY_PORT_CHANNEL)) != NULL && strcmp(str, "UNK") != 0) { - pw_properties_setf(port->properties, "port.name", "%s_%s", dir, str); + pw_properties_setf(port->properties, PW_KEY_PORT_NAME, "%s_%s", dir, str); } else { - pw_properties_setf(port->properties, "port.name", "%s_%d", dir, port->port_id); + pw_properties_setf(port->properties, PW_KEY_PORT_NAME, "%s_%d", dir, port->port_id); } } - control = PW_PORT_IS_CONTROL(port); - if (control) { - dir = port->direction == PW_DIRECTION_INPUT ? "control" : "notify"; - pw_properties_set(port->properties, "port.control", "1"); - } - if (control) { pw_log_debug("port %p: setting node control", port); } else { diff --git a/src/pipewire/remote.c b/src/pipewire/remote.c index da53a7fb..56d3e5ca 100644 --- a/src/pipewire/remote.c +++ b/src/pipewire/remote.c @@ -190,7 +190,7 @@ struct pw_remote *pw_remote_new(struct pw_core *core, spa_hook_list_init(&this->listener_list); - if ((protocol_name = pw_properties_get(properties, PW_REMOTE_PROP_PROTOCOL)) == NULL) { + if ((protocol_name = pw_properties_get(properties, PW_KEY_PROTOCOL)) == NULL) { if (!pw_module_load(core, "libpipewire-module-protocol-native", NULL, NULL, NULL, NULL)) goto no_protocol; diff --git a/src/pipewire/remote.h b/src/pipewire/remote.h index b5456d83..5bed39c2 100644 --- a/src/pipewire/remote.h +++ b/src/pipewire/remote.h @@ -141,11 +141,6 @@ struct pw_remote_events { void (*exported) (void *data, uint32_t proxy_id, uint32_t global_id); }; -/** Specify the name of the protocol to use, default is using the native protocol */ -#define PW_REMOTE_PROP_PROTOCOL "pipewire.protocol" -/** The name of the remote to connect to, default env(PIPEWIRE_REMOTE) or pipewire-0 */ -#define PW_REMOTE_PROP_REMOTE_NAME "pipewire.remote.name" - /** Create a new unconnected remote \memberof pw_remote * \return a new unconnected remote */ struct pw_remote * diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 84eb86d0..dd1c979c 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -1057,22 +1057,22 @@ struct pw_stream * pw_stream_new(struct pw_remote *remote, const char *name, pw_log_debug("stream %p: new \"%s\"", impl, name); if (props == NULL) { - props = pw_properties_new("media.name", name, NULL); - } else if (!pw_properties_get(props, "media.name")) { - pw_properties_set(props, "media.name", name); + props = pw_properties_new(PW_KEY_MEDIA_NAME, name, NULL); + } else if (pw_properties_get(props, PW_KEY_MEDIA_NAME) == NULL) { + pw_properties_set(props, PW_KEY_MEDIA_NAME, name); } if (props == NULL) goto no_mem; - if (!pw_properties_get(props, "node.name")) { + if (pw_properties_get(props, PW_KEY_NODE_NAME) == NULL) { const struct pw_properties *p = pw_remote_get_properties(remote); - if ((str = pw_properties_get(p, "application.name")) != NULL) - pw_properties_set(props, "node.name", str); - else if ((str = pw_properties_get(p, "application.prgname")) != NULL) - pw_properties_set(props, "node.name", str); + if ((str = pw_properties_get(p, PW_KEY_APP_NAME)) != NULL) + pw_properties_set(props, PW_KEY_NODE_NAME, str); + else if ((str = pw_properties_get(p, PW_KEY_APP_PROCESS_BINARY)) != NULL) + pw_properties_set(props, PW_KEY_NODE_NAME, str); else - pw_properties_set(props, "node.name", name); + pw_properties_set(props, PW_KEY_NODE_NAME, name); } spa_hook_list_init(&impl->hooks); @@ -1298,16 +1298,16 @@ pw_stream_connect(struct pw_stream *stream, stream_set_state(stream, PW_STREAM_STATE_CONNECTING, NULL); if (target_id != SPA_ID_INVALID) - pw_properties_setf(stream->properties, PW_NODE_PROP_TARGET_NODE, "%d", target_id); + pw_properties_setf(stream->properties, PW_KEY_NODE_TARGET, "%d", target_id); if (flags & PW_STREAM_FLAG_AUTOCONNECT) - pw_properties_set(stream->properties, PW_NODE_PROP_AUTOCONNECT, "1"); - pw_properties_set(stream->properties, "node.stream", "1"); + pw_properties_set(stream->properties, PW_KEY_NODE_AUTOCONNECT, "1"); + pw_properties_set(stream->properties, PW_KEY_NODE_STREAM, "1"); if (flags & PW_STREAM_FLAG_DRIVER) - pw_properties_set(stream->properties, "node.driver", "1"); + pw_properties_set(stream->properties, PW_KEY_NODE_DRIVER, "1"); if (flags & PW_STREAM_FLAG_EXCLUSIVE) - pw_properties_set(stream->properties, PW_NODE_PROP_EXCLUSIVE, "1"); + pw_properties_set(stream->properties, PW_KEY_NODE_EXCLUSIVE, "1"); if (flags & PW_STREAM_FLAG_DONT_RECONNECT) - pw_properties_set(stream->properties, "pipewire.dont-reconnect", "1"); + pw_properties_set(stream->properties, PW_KEY_NODE_DONT_RECONNECT, "1"); state = pw_remote_get_state(stream->remote, NULL); impl->async_connect = (state == PW_REMOTE_STATE_UNCONNECTED || diff --git a/src/pipewire/stream.h b/src/pipewire/stream.h index b53bf508..c36d5f1e 100644 --- a/src/pipewire/stream.h +++ b/src/pipewire/stream.h @@ -272,13 +272,6 @@ const char *pw_stream_get_name(struct pw_stream *stream); struct pw_remote *pw_stream_get_remote(struct pw_stream *stream); -/** Indicates that the stream is live, boolean default false */ -#define PW_STREAM_PROP_IS_LIVE "pipewire.latency.is-live" -/** The minimum latency of the stream, int, default 0 */ -#define PW_STREAM_PROP_LATENCY_MIN "pipewire.latency.min" -/** The maximum latency of the stream, int default MAXINT */ -#define PW_STREAM_PROP_LATENCY_MAX "pipewire.latency.max" - const struct pw_properties *pw_stream_get_properties(struct pw_stream *stream); int pw_stream_update_properties(struct pw_stream *stream, const struct spa_dict *dict); diff --git a/src/tools/pipewire-cli.c b/src/tools/pipewire-cli.c index 46487b77..940c5dd9 100644 --- a/src/tools/pipewire-cli.c +++ b/src/tools/pipewire-cli.c @@ -430,7 +430,7 @@ static bool do_connect(struct data *data, const char *cmd, char *args, char **er n = pw_split_ip(args, WHITESPACE, 1, a); if (n == 1) { - props = pw_properties_new(PW_REMOTE_PROP_REMOTE_NAME, a[0], NULL); + props = pw_properties_new(PW_KEY_REMOTE_NAME, a[0], NULL); } remote = pw_remote_new(data->core, props, sizeof(struct remote_data)); @@ -1092,10 +1092,10 @@ static bool do_create_link(struct data *data, const char *cmd, char *args, char else props = pw_properties_new(NULL, NULL); - pw_properties_set(props, PW_LINK_OUTPUT_NODE_ID, a[0]); - pw_properties_set(props, PW_LINK_OUTPUT_PORT_ID, a[1]); - pw_properties_set(props, PW_LINK_INPUT_NODE_ID, a[2]); - pw_properties_set(props, PW_LINK_INPUT_PORT_ID, a[3]); + pw_properties_set(props, PW_KEY_LINK_OUTPUT_NODE, a[0]); + pw_properties_set(props, PW_KEY_LINK_OUTPUT_PORT, a[1]); + pw_properties_set(props, PW_KEY_LINK_INPUT_NODE, a[2]); + pw_properties_set(props, PW_KEY_LINK_INPUT_PORT, a[3]); proxy = (struct pw_proxy*)pw_core_proxy_create_object(rd->core_proxy, "link-factory", @@ -1374,7 +1374,7 @@ int main(int argc, char *argv[]) spa_list_init(&data.remotes); pw_map_init(&data.vars, 64, 16); - data.core = pw_core_new(l, pw_properties_new(PW_CORE_PROP_DAEMON, "1", NULL), 0); + data.core = pw_core_new(l, pw_properties_new(PW_KEY_CORE_DAEMON, "1", NULL), 0); info = pw_core_get_info(data.core); pw_module_load(data.core, "libpipewire-module-link-factory", NULL, NULL, NULL, NULL); diff --git a/src/tools/pipewire-monitor.c b/src/tools/pipewire-monitor.c index 679e06d2..c00adb41 100644 --- a/src/tools/pipewire-monitor.c +++ b/src/tools/pipewire-monitor.c @@ -746,7 +746,7 @@ int main(int argc, char *argv[]) return -1; if (argc > 1) - props = pw_properties_new(PW_REMOTE_PROP_REMOTE_NAME, argv[1], NULL); + props = pw_properties_new(PW_KEY_REMOTE_NAME, argv[1], NULL); data.remote = pw_remote_new(data.core, props, 0); if (data.remote == NULL) |