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.
This commit is contained in:
Wim Taymans 2019-05-24 15:47:48 +02:00
parent 7bb6515800
commit 3ad73f0532
52 changed files with 483 additions and 291 deletions

@ -1 +1 @@
Subproject commit ddd753cfc5161797f624b4795e8c7bb71ebfad6d
Subproject commit d81bbae7ea2cb07abe85636bd52ab19b06b20dee

@ -1 +1 @@
Subproject commit 998263819ab94ca1188782b66dc26b9f518b1bc5
Subproject commit 8646c4976070a7c8cfbf710a294be45e15206b6c

@ -1 +1 @@
Subproject commit 2057d7955ce73db0e9cd16d38bbaf8c05b06fb80
Subproject commit 7d5e860d0c40383bbfa57b4a2ef84505e4071942

View file

@ -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);

View file

@ -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);

View file

@ -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,

View file

@ -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);

View file

@ -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,

View file

@ -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);

View file

@ -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);

View file

@ -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,

View file

@ -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";

View file

@ -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);

View file

@ -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;
}

View file

@ -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 {

View file

@ -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");

View file

@ -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 {

View file

@ -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;

View file

@ -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,

View file

@ -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));

View file

@ -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_"));
}
}

View file

@ -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;

View file

@ -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)

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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 {

View file

@ -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);

View file

@ -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 */

View file

@ -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);

View file

@ -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 */

View file

@ -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;

View file

@ -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;

View file

@ -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

238
src/pipewire/keys.h Normal file
View file

@ -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 */

View file

@ -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;

View file

@ -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 */

View file

@ -9,6 +9,7 @@ pipewire_headers = [
'global.h',
'interfaces.h',
'introspect.h',
'keys.h',
'link.h',
'log.h',
'loop.h',

View file

@ -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);

View file

@ -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 */

View file

@ -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) {

View file

@ -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 */

View file

@ -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

View file

@ -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>

View file

@ -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,23 +682,24 @@ 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);
if ((str = pw_properties_get(port->properties, "port.name")) == NULL) {
if ((str = pw_properties_get(port->properties, "port.channel")) != NULL &&
strcmp(str, "UNK") != 0) {
pw_properties_setf(port->properties, "port.name", "%s_%s", dir, str);
}
else {
pw_properties_setf(port->properties, "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");
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, 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, PW_KEY_PORT_NAME, "%s_%s", dir, str);
}
else {
pw_properties_setf(port->properties, PW_KEY_PORT_NAME, "%s_%d", dir, port->port_id);
}
}
if (control) {

View file

@ -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;

View file

@ -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 *

View file

@ -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 ||

View file

@ -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);

View file

@ -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);

View file

@ -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)