summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wtaymans@redhat.com>2019-05-24 15:47:48 +0200
committerWim Taymans <wtaymans@redhat.com>2019-05-24 15:47:48 +0200
commit3ad73f05321fd385dbddd94a31b36071248d15c2 (patch)
treea688a2e6f8bf56b0275dda87f887e412a02f57a6
parent7bb6515800942658cd054a19367f16788d929d88 (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.
m---------pipewire-alsa10
m---------pipewire-jack10
m---------pipewire-pulseaudio10
-rw-r--r--src/daemon/main.c4
-rw-r--r--src/examples/audio-src.c22
-rw-r--r--src/examples/export-sink.c10
-rw-r--r--src/examples/export-source.c14
-rw-r--r--src/examples/export-spa.c4
-rw-r--r--src/examples/media-session.c62
-rw-r--r--src/examples/video-play.c6
-rw-r--r--src/examples/video-src.c2
-rw-r--r--src/gst/gstpipewiredeviceprovider.c2
-rw-r--r--src/gst/gstpipewiresrc.c6
-rw-r--r--src/modules/module-access.c14
-rw-r--r--src/modules/module-audio-dsp.c6
-rw-r--r--src/modules/module-audio-dsp/audio-dsp.c30
-rw-r--r--src/modules/module-client-node.c8
-rw-r--r--src/modules/module-client-node/client-node.c2
-rw-r--r--src/modules/module-client-node/client-stream.c11
-rw-r--r--src/modules/module-link-factory.c16
-rw-r--r--src/modules/module-protocol-dbus.c4
-rw-r--r--src/modules/module-protocol-native.c22
-rw-r--r--src/modules/module-protocol-native/local-socket.c2
-rw-r--r--src/modules/module-rtkit.c6
-rw-r--r--src/modules/spa/module-device.c7
-rw-r--r--src/modules/spa/module-monitor.c7
-rw-r--r--src/modules/spa/module-node-factory.c6
-rw-r--r--src/modules/spa/module-node.c7
-rw-r--r--src/modules/spa/spa-monitor.c7
-rw-r--r--src/pipewire/client.h8
-rw-r--r--src/pipewire/core.c14
-rw-r--r--src/pipewire/core.h11
-rw-r--r--src/pipewire/device.c7
-rw-r--r--src/pipewire/factory.c7
-rw-r--r--src/pipewire/interfaces.h5
-rw-r--r--src/pipewire/keys.h238
-rw-r--r--src/pipewire/link.c7
-rw-r--r--src/pipewire/link.h3
-rw-r--r--src/pipewire/meson.build1
-rw-r--r--src/pipewire/module.c5
-rw-r--r--src/pipewire/module.h6
-rw-r--r--src/pipewire/node.c23
-rw-r--r--src/pipewire/node.h14
-rw-r--r--src/pipewire/pipewire.c40
-rw-r--r--src/pipewire/pipewire.h1
-rw-r--r--src/pipewire/port.c29
-rw-r--r--src/pipewire/remote.c2
-rw-r--r--src/pipewire/remote.h5
-rw-r--r--src/pipewire/stream.c30
-rw-r--r--src/pipewire/stream.h7
-rw-r--r--src/tools/pipewire-cli.c12
-rw-r--r--src/tools/pipewire-monitor.c2
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)