modules: remove include of private.h

Remove some includes of private.h
Add some methods to get the mempool of client and context so that we can
remove direct access.
Move some things around.
Use methods to get pw_loop variables.

See #3243
This commit is contained in:
Wim Taymans 2023-07-11 19:31:27 +02:00
parent dc07c2321b
commit 5e2a7dbc4e
17 changed files with 104 additions and 66 deletions

View file

@ -21,9 +21,11 @@
#include <spa/support/cpu.h>
#include <spa/param/audio/format-utils.h>
#include <spa/param/video/format-utils.h>
#include <spa/param/latency-utils.h>
#include <spa/debug/types.h>
#include <spa/debug/pod.h>
#include <spa/utils/json.h>
#include <spa/utils/result.h>
#include <spa/utils/string.h>
#include <spa/utils/ringbuffer.h>
@ -298,6 +300,7 @@ struct client {
char *load_init; /* initialization string */
jack_uuid_t session_id; /* requested session_id */
struct pw_loop *l;
struct pw_data_loop *loop;
struct pw_properties *props;
@ -1232,7 +1235,7 @@ static struct link *find_activation(struct spa_list *links, uint32_t node_id)
static void client_remove_source(struct client *c)
{
if (c->socket_source) {
pw_loop_destroy_source(c->loop->loop, c->socket_source);
pw_loop_destroy_source(c->l, c->socket_source);
c->socket_source = NULL;
}
}
@ -1860,7 +1863,7 @@ static int client_node_transport(void *data,
c, readfd, writefd, c->node_id);
close(writefd);
c->socket_source = pw_loop_add_io(c->loop->loop,
c->socket_source = pw_loop_add_io(c->l,
readfd,
SPA_IO_ERR | SPA_IO_HUP,
true, on_rtsocket_condition, c);
@ -2020,7 +2023,7 @@ static int client_node_command(void *data, const struct spa_command *command)
case SPA_NODE_COMMAND_Suspend:
case SPA_NODE_COMMAND_Pause:
if (c->started) {
pw_loop_update_io(c->loop->loop,
pw_loop_update_io(c->l,
c->socket_source, SPA_IO_ERR | SPA_IO_HUP);
c->started = false;
@ -2029,7 +2032,7 @@ static int client_node_command(void *data, const struct spa_command *command)
case SPA_NODE_COMMAND_Start:
if (!c->started) {
pw_loop_update_io(c->loop->loop,
pw_loop_update_io(c->l,
c->socket_source,
SPA_IO_IN | SPA_IO_ERR | SPA_IO_HUP);
c->started = true;
@ -3638,6 +3641,7 @@ jack_client_t * jack_client_open (const char *client_name,
&thread_utils_impl, client);
client->loop = pw_context_get_data_loop(client->context.context);
client->l = pw_data_loop_get_loop(client->loop);
pw_data_loop_stop(client->loop);
pw_context_set_object(client->context.context,

View file

@ -86,6 +86,7 @@ struct impl {
struct pw_impl_client_node this;
struct pw_context *context;
struct pw_mempool *context_pool;
struct spa_node node;
@ -98,6 +99,7 @@ struct impl {
struct pw_resource *resource;
struct pw_impl_client *client;
struct pw_mempool *client_pool;
struct spa_source data_source;
@ -236,7 +238,7 @@ static void clear_data(struct impl *impl, struct spa_data *d)
struct pw_memblock *m;
id = SPA_PTR_TO_UINT32(d->data);
m = pw_mempool_find_id(impl->client->pool, id);
m = pw_mempool_find_id(impl->client_pool, id);
if (m) {
pw_log_debug("%p: mem %d", impl, m->id);
pw_memblock_unref(m);
@ -354,11 +356,11 @@ static int impl_node_set_io(void *object, uint32_t id, void *data, size_t size)
if (impl->this.flags & 1)
return 0;
old = pw_mempool_find_tag(impl->client->pool, tag, sizeof(tag));
old = pw_mempool_find_tag(impl->client_pool, tag, sizeof(tag));
if (data) {
mm = pw_mempool_import_map(impl->client->pool,
impl->context->pool, data, size, tag);
mm = pw_mempool_import_map(impl->client_pool,
impl->context_pool, data, size, tag);
if (mm == NULL)
return -errno;
@ -657,11 +659,11 @@ static int do_port_set_io(struct impl *impl,
if ((mix = find_mix(port, mix_id)) == NULL || !mix->valid)
return -EINVAL;
old = pw_mempool_find_tag(impl->client->pool, tag, sizeof(tag));
old = pw_mempool_find_tag(impl->client_pool, tag, sizeof(tag));
if (data) {
mm = pw_mempool_import_map(impl->client->pool,
impl->context->pool, data, size, tag);
mm = pw_mempool_import_map(impl->client_pool,
impl->context_pool, data, size, tag);
if (mm == NULL)
return -errno;
@ -761,7 +763,7 @@ do_port_use_buffers(struct impl *impl,
else
return -EINVAL;
if ((mem = pw_mempool_find_ptr(impl->context->pool, baseptr)) == NULL)
if ((mem = pw_mempool_find_ptr(impl->context_pool, baseptr)) == NULL)
return -EINVAL;
endptr = SPA_PTROFF(baseptr, buffers[i]->n_datas * sizeof(struct spa_chunk), void);
@ -771,7 +773,7 @@ do_port_use_buffers(struct impl *impl,
for (j = 0; j < buffers[i]->n_datas; j++) {
struct spa_data *d = &buffers[i]->datas[j];
if (d->type == SPA_DATA_MemPtr) {
if ((m = pw_mempool_find_ptr(impl->context->pool, d->data)) == NULL ||
if ((m = pw_mempool_find_ptr(impl->context_pool, d->data)) == NULL ||
m != mem)
return -EINVAL;
endptr = SPA_MAX(endptr, SPA_PTROFF(d->data, d->maxsize, void));
@ -780,7 +782,7 @@ do_port_use_buffers(struct impl *impl,
if (endptr > SPA_PTROFF(baseptr, mem->size, void))
return -EINVAL;
m = pw_mempool_import_block(impl->client->pool, mem);
m = pw_mempool_import_block(impl->client_pool, mem);
if (m == NULL)
return -errno;
@ -818,7 +820,7 @@ do_port_use_buffers(struct impl *impl,
flags |= PW_MEMBLOCK_FLAG_WRITABLE;
spa_log_debug(impl->log, "mem %d type:%d fd:%d", j, d->type, (int)d->fd);
m = pw_mempool_import(impl->client->pool,
m = pw_mempool_import(impl->client_pool,
flags, d->type, d->fd);
if (m == NULL)
return -errno;
@ -1201,7 +1203,7 @@ static void node_peer_added(void *data, struct pw_impl_node *peer)
struct impl *impl = data;
struct pw_memblock *m;
m = pw_mempool_import_block(impl->client->pool, peer->activation);
m = pw_mempool_import_block(impl->client_pool, peer->activation);
if (m == NULL) {
pw_log_warn("%p: can't ensure mem: %m", impl);
return;
@ -1226,7 +1228,7 @@ static void node_peer_removed(void *data, struct pw_impl_node *peer)
struct impl *impl = data;
struct pw_memblock *m;
m = pw_mempool_find_fd(impl->client->pool, peer->activation->fd);
m = pw_mempool_find_fd(impl->client_pool, peer->activation->fd);
if (m == NULL) {
pw_log_warn("%p: unknown peer %p fd:%d", impl, peer,
peer->source.fd);
@ -1256,7 +1258,7 @@ void pw_impl_client_node_registered(struct pw_impl_client_node *this, struct pw_
pw_log_debug("%p: %d", &impl->node, node_id);
impl->activation = pw_mempool_import_block(client->pool, node->activation);
impl->activation = pw_mempool_import_block(impl->client_pool, node->activation);
if (impl->activation == NULL) {
pw_log_debug("%p: can't import block: %m", &impl->node);
return;
@ -1290,7 +1292,7 @@ static int add_area(struct impl *impl)
size = sizeof(struct spa_io_buffers) * AREA_SIZE;
area = pw_mempool_alloc(impl->context->pool,
area = pw_mempool_alloc(impl->context_pool,
PW_MEMBLOCK_FLAG_READWRITE |
PW_MEMBLOCK_FLAG_MAP |
PW_MEMBLOCK_FLAG_SEAL,
@ -1343,7 +1345,7 @@ static void node_free(void *data)
spa_hook_remove(&impl->node_listener);
while ((mm = pw_mempool_find_tag(impl->client->pool, tag, sizeof(uint32_t))) != NULL)
while ((mm = pw_mempool_find_tag(impl->client_pool, tag, sizeof(uint32_t))) != NULL)
pw_memmap_free(mm);
if (impl->activation)
@ -1670,6 +1672,7 @@ struct pw_impl_client_node *pw_impl_client_node_new(struct pw_resource *resource
this = &impl->this;
impl->context = context;
impl->context_pool = pw_context_get_mempool(context);
impl->data_source.fd = -1;
pw_log_debug("%p: new", &impl->node);
@ -1677,6 +1680,7 @@ struct pw_impl_client_node *pw_impl_client_node_new(struct pw_resource *resource
impl_init(impl, NULL, support, n_support);
impl->resource = resource;
impl->client = client;
impl->client_pool = pw_impl_client_get_mempool(client);
this->flags = do_register ? 0 : 1;
pw_map_init(&impl->ports[0], 64, 64);

View file

@ -15,13 +15,14 @@
#include <spa/node/node.h>
#include <spa/node/utils.h>
#include <spa/node/io.h>
#include <spa/node/type-info.h>
#include <spa/pod/filter.h>
#include <spa/utils/keys.h>
#include <spa/utils/result.h>
#define PW_ENABLE_DEPRECATED
#include "pipewire/pipewire.h"
#include "pipewire/private.h"
#include "pipewire/context.h"
#include "modules/spa/spa-node.h"
@ -130,6 +131,7 @@ struct impl {
bool client_reuse;
struct pw_context *context;
struct pw_mempool *context_pool;
struct node node;
@ -335,7 +337,7 @@ static inline void do_flush(struct node *this)
static int send_clock_update(struct node *this)
{
struct pw_impl_client *client = this->resource->client;
struct pw_impl_client *client = pw_resource_get_client(this->resource);
uint32_t type = pw_protocol_native0_name_to_v2(client, SPA_TYPE_INFO_NODE_COMMAND_BASE "ClockUpdate");
struct timespec ts;
int64_t now;
@ -468,7 +470,7 @@ do_update_port(struct node *this,
}
for (i = 0; i < port->n_params; i++) {
port->params[i] = params[i] ?
pw_protocol_native0_pod_from_v2(this->resource->client, params[i]) : NULL;
pw_protocol_native0_pod_from_v2(pw_resource_get_client(this->resource), params[i]) : NULL;
if (port->params[i] && spa_pod_is_object_id(port->params[i], SPA_PARAM_Format))
port->have_format = true;
@ -661,7 +663,7 @@ impl_node_port_set_io(void *object,
if (data) {
if ((mem = pw_mempool_find_ptr(impl->context->pool, data)) == NULL)
if ((mem = pw_mempool_find_ptr(impl->context_pool, data)) == NULL)
return -EINVAL;
mem_offset = SPA_PTRDIFF(data, mem->map->ptr);
@ -744,7 +746,7 @@ impl_node_port_use_buffers(void *object,
else
return -EINVAL;
if ((mem = pw_mempool_find_ptr(impl->context->pool, baseptr)) == NULL)
if ((mem = pw_mempool_find_ptr(impl->context_pool, baseptr)) == NULL)
return -EINVAL;
data_size = 0;
@ -910,8 +912,7 @@ static int impl_node_process(void *object)
struct node *this = object;
struct impl *impl = this->impl;
struct pw_impl_node *n = impl->this.node;
return impl_node_process_input(n->node);
return impl_node_process_input(pw_impl_node_get_implementation(n));
}
static int handle_node_message(struct node *this, struct pw_client_node0_message *message)
@ -1363,9 +1364,10 @@ struct pw_impl_client_node0 *pw_impl_client_node0_new(struct pw_resource *resour
}
convert_properties(properties);
pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d", client->global->id);
pw_properties_setf(properties, PW_KEY_CLIENT_ID, "%d", pw_global_get_id(pw_impl_client_get_global(client)));
impl->context = context;
impl->context_pool = pw_context_get_mempool(context);
impl->fds[0] = impl->fds[1] = -1;
pw_log_debug("client-node %p: new", impl);

View file

@ -43,6 +43,16 @@ struct spa_command_node0_clock_update {
struct spa_command_node0_clock_update_body body;
};
enum spa_node0_event {
SPA_NODE0_EVENT_START = SPA_TYPE_VENDOR_PipeWire,
SPA_NODE0_EVENT_RequestClockUpdate,
};
enum spa_node0_command {
SPA_NODE0_COMMAND_START = SPA_TYPE_VENDOR_PipeWire,
SPA_NODE0_COMMAND_ClockUpdate,
};
#define SPA_COMMAND_NODE0_CLOCK_UPDATE_INIT(type,change_mask,rate,ticks,monotonic_time,offset,scale,state,flags,latency) \
SPA_COMMAND_INIT_FULL(struct spa_command_node0_clock_update, \
sizeof(struct spa_command_node0_clock_update_body), 0, type, \

View file

@ -10,7 +10,6 @@
#include <spa/node/io.h>
#include <pipewire/impl.h>
#include <pipewire/private.h>
#include "ext-client-node.h"
@ -190,7 +189,7 @@ pw_client_node0_transport_new(struct pw_context *context,
trans = &impl->trans;
impl->offset = 0;
impl->mem = pw_mempool_alloc(context->pool,
impl->mem = pw_mempool_alloc(pw_context_get_mempool(context),
PW_MEMBLOCK_FLAG_READWRITE |
PW_MEMBLOCK_FLAG_MAP |
PW_MEMBLOCK_FLAG_SEAL,

View file

@ -27,7 +27,6 @@
#include <pipewire/impl.h>
#include <pipewire/i18n.h>
#include <pipewire/private.h>
#include <pipewire/thread.h>
#include <libffado/ffado.h>

View file

@ -27,7 +27,6 @@
#include <pipewire/impl.h>
#include <pipewire/i18n.h>
#include <pipewire/private.h>
#include "module-jack-tunnel/weakjack.h"

View file

@ -31,7 +31,6 @@
#include <pipewire/impl.h>
#include <pipewire/i18n.h>
#include <pipewire/private.h>
#include "module-netjack2/packets.h"
#include "module-netjack2/peer.c"
@ -186,7 +185,7 @@ struct stream {
struct impl {
struct pw_context *context;
struct pw_loop *main_loop;
struct pw_data_loop *data_loop;
struct pw_loop *data_loop;
struct spa_system *system;
#define MODE_SINK (1<<0)
@ -617,7 +616,7 @@ on_data_io(void *data, int fd, uint32_t mask)
if (mask & (SPA_IO_ERR | SPA_IO_HUP)) {
pw_log_warn("error:%08x", mask);
pw_loop_update_io(impl->data_loop->loop, impl->socket, 0);
pw_loop_update_io(impl->data_loop, impl->socket, 0);
return;
}
if (mask & SPA_IO_IN) {
@ -889,7 +888,7 @@ static int handle_follower_setup(struct impl *impl, struct nj2_session_params *p
send(impl->socket->fd, params, sizeof(*params), 0);
impl->done = true;
pw_loop_update_io(impl->data_loop->loop, impl->socket, SPA_IO_IN);
pw_loop_update_io(impl->data_loop, impl->socket, SPA_IO_IN);
return 0;
connect_error:
@ -1013,7 +1012,7 @@ static int create_netjack2_socket(struct impl *impl)
goto out;
}
impl->socket = pw_loop_add_io(impl->data_loop->loop, fd,
impl->socket = pw_loop_add_io(impl->data_loop, fd,
0, false, on_data_io, impl);
if (impl->socket == NULL) {
res = -errno;
@ -1035,7 +1034,7 @@ static int send_stop_driver(struct impl *impl)
impl->started = false;
if (impl->socket)
pw_loop_update_io(impl->data_loop->loop, impl->socket, 0);
pw_loop_update_io(impl->data_loop, impl->socket, 0);
pw_log_info("sending STOP_DRIVER");
nj2_session_params_hton(&params, &impl->peer.params);
@ -1057,7 +1056,7 @@ static int destroy_netjack2_socket(struct impl *impl)
update_timer(impl, 0);
if (impl->socket) {
pw_loop_destroy_source(impl->data_loop->loop, impl->socket);
pw_loop_destroy_source(impl->data_loop, impl->socket);
impl->socket = NULL;
}
if (impl->setup_socket) {
@ -1214,6 +1213,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
{
struct pw_context *context = pw_impl_module_get_context(module);
struct pw_properties *props = NULL;
struct pw_data_loop *data_loop;
struct impl *impl;
const char *str;
int res;
@ -1236,7 +1236,8 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
goto error;
}
impl->props = props;
impl->data_loop = pw_context_get_data_loop(context);
data_loop = pw_context_get_data_loop(context);
impl->data_loop = pw_data_loop_get_loop(data_loop);
impl->sink.props = pw_properties_new(NULL, NULL);
impl->source.props = pw_properties_new(NULL, NULL);

View file

@ -32,7 +32,6 @@
#include <pipewire/impl.h>
#include <pipewire/i18n.h>
#include <pipewire/private.h>
#include "module-netjack2/packets.h"
@ -224,7 +223,7 @@ struct follower {
struct impl {
struct pw_context *context;
struct pw_loop *main_loop;
struct pw_data_loop *data_loop;
struct pw_loop *data_loop;
struct spa_system *system;
#define MODE_SINK (1<<0)
@ -340,7 +339,7 @@ static void sink_process(void *d, struct spa_io_position *position)
netjack2_send_data(&follower->peer, nframes, midi, n_midi, audio, n_audio);
if (follower->socket)
pw_loop_update_io(s->impl->data_loop->loop, follower->socket, SPA_IO_IN);
pw_loop_update_io(s->impl->data_loop, follower->socket, SPA_IO_IN);
}
static void source_process(void *d, struct spa_io_position *position)
@ -373,7 +372,7 @@ static void follower_free(struct follower *follower)
pw_properties_free(follower->sink.props);
if (follower->socket)
pw_loop_destroy_source(impl->data_loop->loop, follower->socket);
pw_loop_destroy_source(impl->data_loop, follower->socket);
if (follower->setup_socket)
pw_loop_destroy_source(impl->main_loop, follower->setup_socket);
@ -460,13 +459,13 @@ on_data_io(void *data, int fd, uint32_t mask)
if (mask & (SPA_IO_ERR | SPA_IO_HUP)) {
pw_log_warn("error:%08x", mask);
pw_loop_destroy_source(impl->data_loop->loop, follower->socket);
pw_loop_destroy_source(impl->data_loop, follower->socket);
follower->socket = NULL;
pw_loop_invoke(impl->main_loop, do_stop_follower, 1, NULL, 0, false, follower);
return;
}
if (mask & SPA_IO_IN) {
pw_loop_update_io(impl->data_loop->loop, follower->socket, 0);
pw_loop_update_io(impl->data_loop, follower->socket, 0);
pw_filter_trigger_process(follower->source.filter);
}
@ -1000,7 +999,7 @@ static int handle_follower_available(struct impl *impl, struct nj2_session_param
goto socket_failed;
}
follower->socket = pw_loop_add_io(impl->data_loop->loop, fd,
follower->socket = pw_loop_add_io(impl->data_loop, fd,
0, false, on_data_io, follower);
if (follower->socket == NULL) {
res = -errno;
@ -1254,6 +1253,7 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
{
struct pw_context *context = pw_impl_module_get_context(module);
struct pw_properties *props = NULL;
struct pw_data_loop *data_loop;
struct impl *impl;
const char *str;
int res;
@ -1277,7 +1277,8 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
goto error;
}
impl->props = props;
impl->data_loop = pw_context_get_data_loop(context);
data_loop = pw_context_get_data_loop(context);
impl->data_loop = pw_data_loop_get_loop(data_loop);
impl->sink_props = pw_properties_new(NULL, NULL);
impl->source_props = pw_properties_new(NULL, NULL);

View file

@ -12,6 +12,7 @@
#include "config.h"
#include <spa/pod/builder.h>
#include <spa/utils/result.h>
#include <spa/utils/ringbuffer.h>
#include <spa/param/profiler.h>
@ -74,6 +75,7 @@ struct impl {
struct pw_context *context;
struct pw_properties *properties;
struct pw_loop *main_loop;
struct pw_loop *data_loop;
struct spa_hook context_listener;
@ -111,7 +113,7 @@ static void start_flush(struct impl *impl)
value.tv_nsec = 1;
interval.tv_sec = DEFAULT_INTERVAL;
interval.tv_nsec = 0;
pw_loop_update_timer(impl->context->main_loop,
pw_loop_update_timer(impl->main_loop,
impl->flush_timeout, &value, &interval, false);
impl->flushing = true;
}
@ -127,7 +129,7 @@ static void stop_flush(struct impl *impl)
value.tv_nsec = 0;
interval.tv_sec = 0;
interval.tv_nsec = 0;
pw_loop_update_timer(impl->context->main_loop,
pw_loop_update_timer(impl->main_loop,
impl->flush_timeout, &value, &interval, false);
impl->flushing = false;
}
@ -348,7 +350,7 @@ static void module_destroy(void *data)
pw_properties_free(impl->properties);
pw_loop_destroy_source(pw_context_get_main_loop(impl->context), impl->flush_timeout);
pw_loop_destroy_source(impl->main_loop, impl->flush_timeout);
free(impl);
}
@ -380,7 +382,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
struct pw_context *context = pw_impl_module_get_context(module);
struct pw_properties *props;
struct impl *impl;
struct pw_loop *main_loop = pw_context_get_main_loop(context);
static const char * const keys[] = {
PW_KEY_OBJECT_SERIAL,
NULL
@ -403,7 +404,8 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
impl->context = context;
impl->properties = props;
impl->data_loop = pw_context_get_data_loop(impl->context)->loop;
impl->main_loop = pw_context_get_main_loop(impl->context);
impl->data_loop = pw_data_loop_get_loop(pw_context_get_data_loop(impl->context));
spa_ringbuffer_init(&impl->buffer);
@ -416,11 +418,11 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args)
free(impl);
return -errno;
}
pw_properties_setf(impl->properties, PW_KEY_OBJECT_ID, "%d", impl->global->id);
pw_properties_setf(impl->properties, PW_KEY_OBJECT_ID, "%d", pw_global_get_id(impl->global));
pw_properties_setf(impl->properties, PW_KEY_OBJECT_SERIAL, "%"PRIu64,
pw_global_get_serial(impl->global));
impl->flush_timeout = pw_loop_add_timer(main_loop, flush_timeout, impl);
impl->flush_timeout = pw_loop_add_timer(impl->main_loop, flush_timeout, impl);
pw_global_update_keys(impl->global, &impl->properties->dict, keys);

View file

@ -1,3 +1,13 @@
enum spa_node0_event {
SPA_NODE0_EVENT_START = SPA_TYPE_VENDOR_PipeWire,
SPA_NODE0_EVENT_RequestClockUpdate,
};
enum spa_node0_command {
SPA_NODE0_COMMAND_START = SPA_TYPE_VENDOR_PipeWire,
SPA_NODE0_COMMAND_ClockUpdate,
};
static const struct type_info {
const char *type;
const char *name;

View file

@ -30,7 +30,6 @@
#include <pipewire/impl.h>
#include <pipewire/i18n.h>
#include <pipewire/private.h>
#include <pulse/pulseaudio.h>
#include "module-protocol-pulse/defs.h"

View file

@ -559,6 +559,12 @@ struct pw_work_queue *pw_context_get_work_queue(struct pw_context *context)
return context->work_queue;
}
SPA_EXPORT
struct pw_mempool *pw_context_get_mempool(struct pw_context *context)
{
return context->pool;
}
SPA_EXPORT
const struct pw_properties *pw_context_get_properties(struct pw_context *context)
{

View file

@ -122,6 +122,9 @@ struct pw_data_loop *pw_context_get_data_loop(struct pw_context *context);
/** Get the work queue from the context: Since 0.3.26 */
struct pw_work_queue *pw_context_get_work_queue(struct pw_context *context);
/** Get the memmory pool from the context: Since 0.3.74 */
struct pw_mempool *pw_context_get_mempool(struct pw_context *context);
/** Iterate the globals of the context. The callback should return
* 0 to fetch the next item, any other value stops the iteration and returns
* the value. When all callbacks return 0, this function returns 0 when all

View file

@ -571,6 +571,12 @@ struct pw_global *pw_impl_client_get_global(struct pw_impl_client *client)
return client->global;
}
SPA_EXPORT
struct pw_mempool *pw_impl_client_get_mempool(struct pw_impl_client *client)
{
return client->pool;
}
SPA_EXPORT
const struct pw_properties *pw_impl_client_get_properties(struct pw_impl_client *client)
{

View file

@ -143,6 +143,9 @@ struct pw_resource *pw_impl_client_find_resource(struct pw_impl_client *client,
/** Get the global associated with this client */
struct pw_global *pw_impl_client_get_global(struct pw_impl_client *client);
/** Get the mempool associated with this client, Since 0.3.74 */
struct pw_mempool *pw_impl_client_get_mempool(struct pw_impl_client *client);
/** listen to events from this client */
void pw_impl_client_add_listener(struct pw_impl_client *client,
struct spa_hook *listener,

View file

@ -181,16 +181,6 @@ typedef uint32_t (*pw_permission_func_t) (struct pw_global *global,
#define pw_impl_client_emit_resource_removed(o,r) pw_impl_client_emit(o, resource_removed, 0, r)
#define pw_impl_client_emit_busy_changed(o,b) pw_impl_client_emit(o, busy_changed, 0, b)
enum spa_node0_event {
SPA_NODE0_EVENT_START = SPA_TYPE_VENDOR_PipeWire,
SPA_NODE0_EVENT_RequestClockUpdate,
};
enum spa_node0_command {
SPA_NODE0_COMMAND_START = SPA_TYPE_VENDOR_PipeWire,
SPA_NODE0_COMMAND_ClockUpdate,
};
#define pw_impl_core_emit(s,m,v,...) spa_hook_list_call(&s->listener_list, struct pw_impl_core_events, m, v, ##__VA_ARGS__)
#define pw_impl_core_emit_destroy(s) pw_impl_core_emit(s, destroy, 0)