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

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,