mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
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:
parent
7bb6515800
commit
3ad73f0532
52 changed files with 483 additions and 291 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue