spa: add result type

We need this to know the type of result, especially when serializing.
This commit is contained in:
Wim Taymans 2019-05-28 13:59:48 +02:00
parent c767ce62c9
commit 857b2a0cfb
33 changed files with 110 additions and 73 deletions

View file

@ -280,7 +280,7 @@ static int impl_port_enum_params(void *object, int seq,
if (spa_pod_filter(&b, &result.param, param, filter) < 0)
goto next;
spa_node_emit_result(&d->hooks, seq, 0, &result);
spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count != num)
goto next;

View file

@ -252,7 +252,7 @@ static int impl_port_enum_params(void *object, int seq,
if (spa_pod_filter(&b, &result.param, param, filter) < 0)
goto next;
spa_node_emit_result(&d->hooks, seq, 0, &result);
spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count != num)
goto next;

View file

@ -192,7 +192,7 @@ static int impl_port_enum_params(void *object, int seq,
if (spa_pod_filter(&b, &result.param, param, filter) < 0)
goto next;
spa_node_emit_result(&d->hooks, seq, 0, &result);
spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count != num)
goto next;

View file

@ -416,7 +416,7 @@ impl_node_port_enum_params(void *object, int seq,
if (spa_pod_filter(&b, &result.param, param, filter) < 0)
goto next;
spa_node_emit_result(&this->hooks, seq, 0, &result);
spa_node_emit_result(&this->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count != num)
goto next;

View file

@ -416,7 +416,7 @@ static int impl_node_enum_params(void *object, int seq,
continue;
pw_log_debug("client-node %p: %d param %u", this, seq, result.index);
spa_node_emit_result(&this->hooks, seq, 0, &result);
spa_node_emit_result(&this->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count == num)
break;
@ -706,7 +706,7 @@ impl_node_port_enum_params(void *object, int seq,
continue;
pw_log_debug("client-node %p: %d param %u", this, seq, result.index);
spa_node_emit_result(&this->hooks, seq, 0, &result);
spa_node_emit_result(&this->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count == num)
break;
@ -1245,7 +1245,7 @@ static void client_node_resource_error(void *data, int seq, int res, const char
pw_log_error("client-node %p: error seq:%d %d (%s)", this, seq, res, message);
result.message = message;
spa_node_emit_result(&this->hooks, seq, res, &result);
spa_node_emit_result(&this->hooks, seq, res, SPA_RESULT_TYPE_NODE_ERROR, &result);
}
static void client_node_resource_pong(void *data, int seq)
@ -1254,7 +1254,7 @@ static void client_node_resource_pong(void *data, int seq)
struct node *this = &impl->node;
pw_log_debug("client-node %p: got pong, emit result %d", this, seq);
spa_node_emit_result(&this->hooks, seq, 0, NULL);
spa_node_emit_result(&this->hooks, seq, 0, 0, NULL);
}
void pw_client_node_registered(struct pw_client_node *this, struct pw_global *global)

View file

@ -167,7 +167,7 @@ static int impl_node_enum_params(void *object, int seq,
if (spa_pod_filter(&b, &result.param, param, filter) < 0)
goto next;
spa_node_emit_result(&this->hooks, seq, 0, &result);
spa_node_emit_result(&this->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count != num)
goto next;
@ -325,12 +325,12 @@ static void adapter_port_info(void *data,
}
}
static void adapter_result(void *data, int seq, int res, const void *result)
static void adapter_result(void *data, int seq, int res, uint32_t type, const void *result)
{
struct impl *impl = data;
struct node *this = &impl->node;
pw_log_debug("%p: result %d %d", this, seq, res);
spa_node_emit_result(&this->hooks, seq, res, result);
spa_node_emit_result(&this->hooks, seq, res, type, result);
}
static const struct spa_node_events adapter_node_events = {
@ -1144,12 +1144,12 @@ static void client_node_free(void *data)
cleanup(impl);
}
static void client_node_result(void *data, int seq, int res, const void *result)
static void client_node_result(void *data, int seq, int res, uint32_t type, const void *result)
{
struct impl *impl = data;
struct node *node = &impl->node;
pw_log_debug("client-stream %p: result %d %d", &impl->this, seq, res);
spa_node_emit_result(&node->hooks, seq, res, result);
spa_node_emit_result(&node->hooks, seq, res, type, result);
}
static void client_node_active_changed(void *data, bool active)

View file

@ -97,7 +97,7 @@ static void complete_init(struct impl *impl)
pw_node_initialized(this);
}
static void spa_node_result(void *data, int seq, int res, const void *result)
static void spa_node_result(void *data, int seq, int res, uint32_t type, const void *result)
{
struct impl *impl = data;
struct pw_node *node = impl->this;

View file

@ -140,12 +140,19 @@ struct result_device_params_data {
struct spa_pod *param);
};
static void result_device_params(void *data, int seq, int res, const void *result)
static void result_device_params(void *data, int seq, int res, uint32_t type, const void *result)
{
struct result_device_params_data *d = data;
const struct spa_result_device_params *r =
(const struct spa_result_device_params *)result;
d->callback(d->data, seq, r->id, r->index, r->next, r->param);
switch (type) {
case SPA_RESULT_TYPE_DEVICE_PARAMS:
{
const struct spa_result_device_params *r = result;
d->callback(d->data, seq, r->id, r->index, r->next, r->param);
break;
}
default:
break;
}
}
SPA_EXPORT

View file

@ -1081,7 +1081,7 @@ static const struct pw_port_events output_port_events = {
.destroy = output_port_destroy,
};
static void input_node_result(void *data, int seq, int res, const void *result)
static void input_node_result(void *data, int seq, int res, uint32_t type, const void *result)
{
struct impl *impl = data;
struct pw_node *node = impl->this.input->node;
@ -1091,7 +1091,7 @@ static void input_node_result(void *data, int seq, int res, const void *result)
}
}
static void output_node_result(void *data, int seq, int res, const void *result)
static void output_node_result(void *data, int seq, int res, uint32_t type, const void *result)
{
struct impl *impl = data;
struct pw_node *node = impl->this.output->node;

View file

@ -983,7 +983,7 @@ static void node_port_info(void *data, enum spa_direction direction, uint32_t po
}
}
static void node_result(void *data, int seq, int res, const void *result)
static void node_result(void *data, int seq, int res, uint32_t type, const void *result)
{
struct pw_node *node = data;
struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
@ -994,7 +994,7 @@ static void node_result(void *data, int seq, int res, const void *result)
if (SPA_RESULT_IS_ASYNC(seq))
pw_work_queue_complete(impl->work, &impl->this, SPA_RESULT_ASYNC_SEQ(seq), res);
pw_node_emit_result(node, seq, res, result);
pw_node_emit_result(node, seq, res, type, result);
}
static void node_event(void *data, const struct spa_event *event)
@ -1222,12 +1222,20 @@ struct result_node_params_data {
int seq;
};
static void result_node_params(void *data, int seq, int res, const void *result)
static void result_node_params(void *data, int seq, int res, uint32_t type, const void *result)
{
struct result_node_params_data *d = data;
const struct spa_result_node_params *r = result;
if (d->seq == seq)
d->callback(d->data, seq, r->id, r->index, r->next, r->param);
switch (type) {
case SPA_RESULT_TYPE_NODE_PARAMS:
{
const struct spa_result_node_params *r = result;
if (d->seq == seq)
d->callback(d->data, seq, r->id, r->index, r->next, r->param);
break;
}
default:
break;
}
}
SPA_EXPORT

View file

@ -85,7 +85,7 @@ struct pw_node_events {
enum pw_node_state state, const char *error);
/** a result was received */
void (*result) (void *data, int seq, int res, const void *result);
void (*result) (void *data, int seq, int res, uint32_t type, const void *result);
/** an event is emited */
void (*event) (void *data, const struct spa_event *event);

View file

@ -836,12 +836,20 @@ struct result_port_params_data {
int seq;
};
static void result_port_params(void *data, int seq, int res, const void *result)
static void result_port_params(void *data, int seq, int res, uint32_t type, const void *result)
{
struct result_port_params_data *d = data;
const struct spa_result_node_params *r = result;
if (d->seq == seq)
d->callback(d->data, seq, r->id, r->index, r->next, r->param);
switch (type) {
case SPA_RESULT_TYPE_NODE_PARAMS:
{
const struct spa_result_node_params *r = result;
if (d->seq == seq)
d->callback(d->data, seq, r->id, r->index, r->next, r->param);
break;
}
default:
break;
}
}
int pw_port_for_each_param(struct pw_port *port,

View file

@ -385,7 +385,7 @@ struct pw_node_activation {
#define pw_node_emit_state_request(n,s) pw_node_emit(n, state_request, 0, s)
#define pw_node_emit_state_changed(n,o,s,e) pw_node_emit(n, state_changed, 0, o, s, e)
#define pw_node_emit_async_complete(n,s,r) pw_node_emit(n, async_complete, 0, s, r)
#define pw_node_emit_result(n,s,r,result) pw_node_emit(n, result, 0, s, r, result)
#define pw_node_emit_result(n,s,r,t,result) pw_node_emit(n, result, 0, s, r, t, result)
#define pw_node_emit_event(n,e) pw_node_emit(n, event, 0, e)
#define pw_node_emit_driver_changed(n,o,d) pw_node_emit(n, driver_changed, 0, o, d)
#define pw_node_emit_peer_added(n,p) pw_node_emit(n, peer_added, 0, p)

View file

@ -466,7 +466,7 @@ static int impl_port_enum_params(void *object, int seq,
if (spa_pod_filter(&b, &result.param, param, filter) != 0)
continue;
spa_node_emit_result(&d->hooks, seq, 0, &result);
spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
if (++count == num)
break;