diff --git a/src/pipewire/device.c b/src/pipewire/device.c index 81a488f14..24fabadfe 100644 --- a/src/pipewire/device.c +++ b/src/pipewire/device.c @@ -150,8 +150,12 @@ static void device_enum_params(void *object, uint32_t id, uint32_t start, uint32 struct pw_resource *resource = object; struct resource_data *data = pw_resource_get_user_data(resource); struct pw_device *device = data->device; + int res; - pw_device_for_each_param(device, id, start, num, filter, reply_param, resource); + if ((res = pw_device_for_each_param(device, id, start, num, + filter, reply_param, resource)) < 0) + pw_core_resource_error(resource->client->core_resource, + resource->id, res, spa_strerror(res)); } static void device_set_param(void *object, uint32_t id, uint32_t flags, diff --git a/src/pipewire/interfaces.h b/src/pipewire/interfaces.h index 8fd78c3b8..c48fb101f 100644 --- a/src/pipewire/interfaces.h +++ b/src/pipewire/interfaces.h @@ -488,6 +488,22 @@ struct pw_device_proxy_methods { const struct spa_pod *param); }; +static inline void +pw_device_proxy_enum_params(struct pw_device_proxy *device, uint32_t id, uint32_t index, + uint32_t num, const struct spa_pod *filter) +{ + pw_proxy_do((struct pw_proxy*)device, struct pw_device_proxy_methods, enum_params, + id, index, num, filter); +} + +static inline void +pw_device_proxy_set_param(struct pw_device_proxy *device, uint32_t id, uint32_t flags, + const struct spa_pod *param) +{ + pw_proxy_do((struct pw_proxy*)device, struct pw_device_proxy_methods, set_param, + id, flags, param); +} + #define PW_DEVICE_PROXY_EVENT_INFO 0 #define PW_DEVICE_PROXY_EVENT_PARAM 1 #define PW_DEVICE_PROXY_EVENT_NUM 2 diff --git a/src/pipewire/node.c b/src/pipewire/node.c index d08debc24..1f9c3b370 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -349,8 +349,12 @@ static void node_enum_params(void *object, uint32_t id, uint32_t index, uint32_t struct pw_resource *resource = object; struct resource_data *data = pw_resource_get_user_data(resource); struct pw_node *node = data->node; + int res; - pw_node_for_each_param(node, id, index, num, filter, reply_param, resource); + if ((res = pw_node_for_each_param(node, id, index, num, + filter, reply_param, resource)) < 0) + pw_core_resource_error(resource->client->core_resource, + resource->id, res, spa_strerror(res)); } static void node_set_param(void *object, uint32_t id, uint32_t flags, diff --git a/src/pipewire/port.c b/src/pipewire/port.c index 7f7e3cc6f..1fa623cbc 100644 --- a/src/pipewire/port.c +++ b/src/pipewire/port.c @@ -400,9 +400,12 @@ static void port_enum_params(void *object, uint32_t id, uint32_t index, uint32_t struct pw_resource *resource = object; struct resource_data *data = pw_resource_get_user_data(resource); struct pw_port *port = data->port; + int res; - pw_port_for_each_param(port, id, index, num, filter, - reply_param, resource); + if ((res = pw_port_for_each_param(port, id, index, num, filter, + reply_param, resource)) < 0) + pw_core_resource_error(resource->client->core_resource, + resource->id, res, spa_strerror(res)); } static const struct pw_port_proxy_methods port_methods = { diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 6299acf7c..36f2e751f 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -529,7 +529,7 @@ static void clear_buffers(struct pw_stream *stream) struct stream *impl = SPA_CONTAINER_OF(stream, struct stream, this); int i, j; - pw_log_debug("stream %p: clear buffers", stream); + pw_log_debug("stream %p: clear buffers %d", stream, impl->n_buffers); for (i = 0; i < impl->n_buffers; i++) { struct buffer *b = &impl->buffers[i];