Improve pod filter

Reset the builder when the filter failed.
Make the plugins create their params in a temporary buffer, we
don't want to do in-place filtering because that is not always
possible. Because the filter now resets on error, we can remove
the reset from the plugins.
This commit is contained in:
Wim Taymans 2017-11-14 10:17:45 +01:00
parent 7a7c011b00
commit 52e1dad93e
15 changed files with 193 additions and 226 deletions

View file

@ -157,7 +157,6 @@ static int spa_proxy_node_enum_params(struct spa_node *node,
struct spa_pod_builder *builder)
{
struct proxy *this;
struct spa_pod_builder_state state;
spa_return_val_if_fail(node != NULL, -EINVAL);
spa_return_val_if_fail(index != NULL, -EINVAL);
@ -165,8 +164,6 @@ static int spa_proxy_node_enum_params(struct spa_node *node,
this = SPA_CONTAINER_OF(node, struct proxy, node);
spa_pod_builder_get_state(builder, &state);
while (true) {
struct spa_pod *param;
@ -180,8 +177,6 @@ static int spa_proxy_node_enum_params(struct spa_node *node,
if (spa_pod_filter(builder, result, param, filter) == 0)
break;
spa_pod_builder_reset(builder, &state);
}
return 1;
}
@ -458,7 +453,6 @@ spa_proxy_node_port_enum_params(struct spa_node *node,
{
struct proxy *this;
struct proxy_port *port;
struct spa_pod_builder_state state;
spa_return_val_if_fail(node != NULL, -EINVAL);
spa_return_val_if_fail(index != NULL, -EINVAL);
@ -470,8 +464,6 @@ spa_proxy_node_port_enum_params(struct spa_node *node,
port = GET_PORT(this, direction, port_id);
spa_pod_builder_get_state(builder, &state);
while (true) {
struct spa_pod *param;
@ -485,8 +477,6 @@ spa_proxy_node_port_enum_params(struct spa_node *node,
if (spa_pod_filter(builder, result, param, filter) == 0)
break;
spa_pod_builder_reset(builder, &state);
}
return 1;
}