mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04: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
|
|
@ -1 +1 @@
|
|||
Subproject commit ddd753cfc5161797f624b4795e8c7bb71ebfad6d
|
||||
Subproject commit d81bbae7ea2cb07abe85636bd52ab19b06b20dee
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 998263819ab94ca1188782b66dc26b9f518b1bc5
|
||||
Subproject commit 8646c4976070a7c8cfbf710a294be45e15206b6c
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2057d7955ce73db0e9cd16d38bbaf8c05b06fb80
|
||||
Subproject commit 7d5e860d0c40383bbfa57b4a2ef84505e4071942
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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_"));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
238
src/pipewire/keys.h
Normal 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 */
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ pipewire_headers = [
|
|||
'global.h',
|
||||
'interfaces.h',
|
||||
'introspect.h',
|
||||
'keys.h',
|
||||
'link.h',
|
||||
'log.h',
|
||||
'loop.h',
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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 *
|
||||
|
|
|
|||
|
|
@ -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 ||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue