mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
core_proxy: prepare to rename pw_remote -> pw_core_proxy
The pw_remote object is really a wrapper around the pw_core_proxy. The events it emits are also available in the core proxy and are generally awkward to use. With some clever new pw_core_proxy_* methods and a pw_core_connect to create the core_proxy, we can convert all code away from pw_remote. This is a first step in this conversion, using the pw_remote behind the scenes. It leaks into some places because it really needs to become its own struct in a next step.
This commit is contained in:
parent
f8aabe69fe
commit
8a959ea7a1
37 changed files with 919 additions and 1185 deletions
|
|
@ -26,6 +26,7 @@
|
|||
#include <stdio.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <spa/utils/result.h>
|
||||
#include <spa/param/video/format-utils.h>
|
||||
#include <spa/param/props.h>
|
||||
#include <spa/node/utils.h>
|
||||
|
|
@ -70,8 +71,8 @@ struct data {
|
|||
|
||||
struct pw_core *core;
|
||||
|
||||
struct pw_remote *remote;
|
||||
struct spa_hook remote_listener;
|
||||
struct pw_core_proxy *core_proxy;
|
||||
struct spa_hook core_listener;
|
||||
|
||||
struct spa_node impl_node;
|
||||
struct spa_hook_list hooks;
|
||||
|
|
@ -473,47 +474,41 @@ static void make_node(struct data *data)
|
|||
SPA_TYPE_INTERFACE_Node,
|
||||
SPA_VERSION_NODE,
|
||||
&impl_node, data);
|
||||
pw_remote_export(data->remote, SPA_TYPE_INTERFACE_Node, props, &data->impl_node, 0);
|
||||
pw_core_proxy_export(data->core_proxy, SPA_TYPE_INTERFACE_Node, props, &data->impl_node, 0);
|
||||
}
|
||||
|
||||
static void on_state_changed(void *_data, enum pw_remote_state old, enum pw_remote_state state, const char *error)
|
||||
static void set_permissions(struct data *data)
|
||||
{
|
||||
struct data *data = _data;
|
||||
struct pw_permission permissions[2];
|
||||
|
||||
switch (state) {
|
||||
case PW_REMOTE_STATE_ERROR:
|
||||
printf("remote error: %s\n", error);
|
||||
pw_main_loop_quit(data->loop);
|
||||
break;
|
||||
/* an example, set specific permissions on one object, this is the
|
||||
* core object. */
|
||||
permissions[0].id = 0;
|
||||
permissions[0].permissions = PW_PERM_R | PW_PERM_X;
|
||||
/* remove WX from all other objects */
|
||||
permissions[1].id = SPA_ID_INVALID;
|
||||
permissions[1].permissions = PW_PERM_R;
|
||||
|
||||
case PW_REMOTE_STATE_CONNECTED:
|
||||
{
|
||||
struct pw_permission permissions[2];
|
||||
pw_client_proxy_update_permissions(
|
||||
pw_core_proxy_get_client_proxy(data->core_proxy),
|
||||
2, permissions);
|
||||
}
|
||||
|
||||
/* an example, set specific permissions on one object, this is the
|
||||
* core object. */
|
||||
permissions[0].id = 0;
|
||||
permissions[0].permissions = PW_PERM_R | PW_PERM_X;
|
||||
/* remove WX from all other objects */
|
||||
permissions[1].id = SPA_ID_INVALID;
|
||||
permissions[1].permissions = PW_PERM_R;
|
||||
static void on_core_error(void *data, uint32_t id, int seq, int res, const char *message)
|
||||
{
|
||||
struct data *d = data;
|
||||
|
||||
pw_client_proxy_update_permissions(
|
||||
pw_remote_get_client_proxy(data->remote),
|
||||
2, permissions);
|
||||
pw_log_error("error id:%u seq:%d res:%d (%s): %s",
|
||||
id, seq, res, spa_strerror(res), message);
|
||||
|
||||
make_node(data);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
printf("remote state: \"%s\"\n", pw_remote_state_as_string(state));
|
||||
break;
|
||||
if (id == 0) {
|
||||
pw_main_loop_quit(d->loop);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct pw_remote_events remote_events = {
|
||||
PW_VERSION_REMOTE_EVENTS,
|
||||
.state_changed = on_state_changed,
|
||||
static const struct pw_core_proxy_events core_events = {
|
||||
PW_VERSION_CORE_PROXY_EVENTS,
|
||||
.error = on_core_error,
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
|
|
@ -524,7 +519,6 @@ int main(int argc, char *argv[])
|
|||
|
||||
data.loop = pw_main_loop_new(NULL);
|
||||
data.core = pw_core_new(pw_main_loop_get_loop(data.loop), NULL, 0);
|
||||
data.remote = pw_remote_new(data.core, NULL, 0);
|
||||
data.path = argc > 1 ? argv[1] : NULL;
|
||||
|
||||
spa_hook_list_init(&data.hooks);
|
||||
|
|
@ -554,10 +548,16 @@ int main(int argc, char *argv[])
|
|||
return -1;
|
||||
}
|
||||
|
||||
pw_remote_add_listener(data.remote, &data.remote_listener, &remote_events, &data);
|
||||
|
||||
if (pw_remote_connect(data.remote) < 0)
|
||||
data.core_proxy = pw_core_connect(data.core, NULL, 0);
|
||||
if (data.core_proxy == NULL) {
|
||||
printf("can't connect: %m\n");
|
||||
return -1;
|
||||
}
|
||||
pw_core_proxy_add_listener(data.core_proxy, &data.core_listener, &core_events, &data);
|
||||
|
||||
set_permissions(&data);
|
||||
|
||||
make_node(&data);
|
||||
|
||||
pw_main_loop_run(data.loop);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue