mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
pulse: fix load_module
This commit is contained in:
parent
588a946311
commit
5dedf483bb
1 changed files with 18 additions and 13 deletions
|
|
@ -1478,9 +1478,9 @@ static void module_proxy_error(void *data, int seq, int res, const char *message
|
||||||
on_load_module(o, d);
|
on_load_module(o, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_null_sink_module(pa_operation *o, void *userdata)
|
static int load_null_sink_module(pa_operation *o)
|
||||||
{
|
{
|
||||||
struct load_module *d = userdata;
|
struct load_module *d = o->userdata;
|
||||||
pa_context *c = o->context;
|
pa_context *c = o->context;
|
||||||
static const struct pw_proxy_events proxy_events = {
|
static const struct pw_proxy_events proxy_events = {
|
||||||
.bound = module_proxy_bound,
|
.bound = module_proxy_bound,
|
||||||
|
|
@ -1488,15 +1488,18 @@ static void on_null_sink_module(pa_operation *o, void *userdata)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (d->proxy != NULL)
|
if (d->proxy != NULL)
|
||||||
return;
|
return -EBUSY;
|
||||||
|
|
||||||
d->proxy = pw_core_create_object(c->core,
|
d->proxy = pw_core_create_object(c->core,
|
||||||
"adapter",
|
"adapter",
|
||||||
PW_TYPE_INTERFACE_Node,
|
PW_TYPE_INTERFACE_Node,
|
||||||
PW_VERSION_NODE,
|
PW_VERSION_NODE,
|
||||||
d->props ? &d->props->dict : NULL, 0);
|
d->props ? &d->props->dict : NULL, 0);
|
||||||
|
if (d->proxy == NULL)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
pw_proxy_add_listener(d->proxy, &d->listener, &proxy_events, o);
|
pw_proxy_add_listener(d->proxy, &d->listener, &proxy_events, o);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void add_props(struct pw_properties *props, const char *str)
|
static void add_props(struct pw_properties *props, const char *str)
|
||||||
|
|
@ -1536,8 +1539,8 @@ pa_operation* pa_context_load_module(pa_context *c, const char*name, const char
|
||||||
struct load_module *d;
|
struct load_module *d;
|
||||||
int error = PA_ERR_NOTIMPLEMENTED;;
|
int error = PA_ERR_NOTIMPLEMENTED;;
|
||||||
struct pw_properties *props = NULL;
|
struct pw_properties *props = NULL;
|
||||||
pa_operation_cb_t op_cb = on_load_module;
|
|
||||||
const char *str;
|
const char *str;
|
||||||
|
bool sync = true;
|
||||||
|
|
||||||
pa_assert(c);
|
pa_assert(c);
|
||||||
pa_assert(c->refcount >= 1);
|
pa_assert(c->refcount >= 1);
|
||||||
|
|
@ -1545,6 +1548,12 @@ pa_operation* pa_context_load_module(pa_context *c, const char*name, const char
|
||||||
|
|
||||||
pw_log_debug("context %p: name:%s arg:%s", c, name, argument);
|
pw_log_debug("context %p: name:%s arg:%s", c, name, argument);
|
||||||
|
|
||||||
|
o = pa_operation_new(c, NULL, on_load_module, sizeof(struct load_module));
|
||||||
|
d = o->userdata;
|
||||||
|
d->cb = cb;
|
||||||
|
d->userdata = userdata;
|
||||||
|
d->idx = PA_INVALID_INDEX;
|
||||||
|
|
||||||
if (strcmp(name, "module-null-sink") == 0) {
|
if (strcmp(name, "module-null-sink") == 0) {
|
||||||
props = pw_properties_new_string(argument);
|
props = pw_properties_new_string(argument);
|
||||||
if (props == NULL) {
|
if (props == NULL) {
|
||||||
|
|
@ -1567,17 +1576,13 @@ pa_operation* pa_context_load_module(pa_context *c, const char*name, const char
|
||||||
}
|
}
|
||||||
pw_properties_set(props, "factory.name", "support.null-audio-sink");
|
pw_properties_set(props, "factory.name", "support.null-audio-sink");
|
||||||
|
|
||||||
error = 0;
|
d->props = props;
|
||||||
op_cb = on_null_sink_module;
|
error = load_null_sink_module(o);
|
||||||
|
sync = error < 0;
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
o = pa_operation_new(c, NULL, op_cb, sizeof(struct load_module));
|
|
||||||
d = o->userdata;
|
|
||||||
d->cb = cb;
|
|
||||||
d->error = error;
|
d->error = error;
|
||||||
d->userdata = userdata;
|
if (sync)
|
||||||
d->idx = PA_INVALID_INDEX;
|
|
||||||
d->props = props;
|
|
||||||
pa_operation_sync(o);
|
pa_operation_sync(o);
|
||||||
|
|
||||||
return o;
|
return o;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue