improve debug and error handling

This commit is contained in:
Wim Taymans 2018-10-17 10:02:44 +02:00
parent 6c7d2d0e1e
commit d27674722a
6 changed files with 25 additions and 19 deletions

View file

@ -545,13 +545,15 @@ static int port_set_format(struct spa_node *node,
if (spa_format_audio_raw_parse(format, &info.info.raw) < 0)
return -EINVAL;
if (info.info.raw.format != SPA_AUDIO_FORMAT_F32P)
return -EINVAL;
if (info.info.raw.channels != 1)
return -EINVAL;
if (this->have_format) {
if (memcmp(&info, &this->format, sizeof(struct spa_audio_info)))
if (info.info.raw.rate != this->format.info.raw.rate)
return -EINVAL;
} else {
if (info.info.raw.format != SPA_AUDIO_FORMAT_F32P)
return -EINVAL;
this->stride = sizeof(float);
this->have_format = true;
this->format = info;

View file

@ -173,7 +173,8 @@ static int impl_node_set_param(struct spa_node *node, uint32_t id, uint32_t flag
if (impl->started)
return -EIO;
if (impl->adapter != impl->cnode) {
spa_node_set_param(impl->adapter, id, flags, param);
if ((res = spa_node_set_param(impl->adapter, id, flags, param)) < 0)
return res;
if (this->callbacks && this->callbacks->event)
this->callbacks->event(this->callbacks_data,

View file

@ -242,8 +242,8 @@ static void *create_object(void *_data,
pw_resource_error(resource, new_id, -EINVAL, "unknown input port");
goto done;
no_mem:
pw_log_error("can't create link");
pw_resource_error(resource, new_id, -ENOMEM, "no memory");
pw_log_error("can't create link: %s", error);
pw_resource_error(resource, new_id, -ENOMEM, error);
goto done;
no_bind:
pw_resource_error(resource, new_id, res, "can't bind link");

View file

@ -265,7 +265,7 @@ static int do_negotiate(struct pw_link *this, uint32_t in_state, uint32_t out_st
this->rt.out_mix.port.port_id,
SPA_PARAM_Format, SPA_NODE_PARAM_FLAG_NEAREST,
format)) < 0) {
asprintf(&error, "error set output format: %d", res);
asprintf(&error, "error set output format: %d (%s)", res, spa_strerror(res));
goto error;
}
if (SPA_RESULT_IS_ASYNC(res))
@ -278,7 +278,7 @@ static int do_negotiate(struct pw_link *this, uint32_t in_state, uint32_t out_st
this->rt.in_mix.port.port_id,
SPA_PARAM_Format, SPA_NODE_PARAM_FLAG_NEAREST,
format)) < 0) {
asprintf(&error, "error set input format: %d", res2);
asprintf(&error, "error set input format: %d (%s)", res2, spa_strerror(res2));
goto error;
}
if (SPA_RESULT_IS_ASYNC(res2)) {

View file

@ -63,16 +63,15 @@ static int tee_process(struct spa_node *data)
struct spa_graph_port *p;
struct spa_io_buffers *io = &this->rt.io;
if (!spa_list_is_empty(&node->ports[SPA_DIRECTION_OUTPUT])) {
pw_log_trace("port %p: tee input %d %d", this, io->status, io->buffer_id);
spa_list_for_each(p, &node->ports[SPA_DIRECTION_OUTPUT], link) {
struct pw_port_mix *mix = SPA_CONTAINER_OF(p, struct pw_port_mix, port);
pw_log_trace("port %p: port %d %d %p->%p", this,
p->port_id, p->flags, io, mix->io);
*mix->io = *io;
}
pw_log_trace("port %p: tee input %d %d", this, io->status, io->buffer_id);
spa_list_for_each(p, &node->ports[SPA_DIRECTION_OUTPUT], link) {
struct pw_port_mix *mix = SPA_CONTAINER_OF(p, struct pw_port_mix, port);
pw_log_trace("port %p: port %d %p->%p %d", this,
p->port_id, io, mix->io, mix->io->buffer_id);
*mix->io = *io;
}
io->status = SPA_STATUS_NEED_BUFFER;
return SPA_STATUS_HAVE_BUFFER | SPA_STATUS_NEED_BUFFER;
}
@ -833,6 +832,8 @@ int pw_port_set_param(struct pw_port *port, uint32_t mix_id, uint32_t id, uint32
pw_log_debug("port %p: %d set param on mix %d:%d.%d %s: %d (%s)", port, port->state,
port->direction, port->port_id, p->port_id,
spa_debug_type_find_name(spa_type_param, id), res, spa_strerror(res));
if (res < 0)
goto done;
if (port->state == PW_PORT_STATE_CONFIGURE) {
spa_node_port_set_param(port->mix,
@ -847,6 +848,7 @@ int pw_port_set_param(struct pw_port *port, uint32_t mix_id, uint32_t id, uint32
spa_debug_type_find_name(spa_type_param, id), res, spa_strerror(res));
}
done:
if (id == SPA_PARAM_Format) {
if (param == NULL || res < 0) {
free_allocation(&port->allocation);