pod: use dynamic pod builder in some places

This commit is contained in:
Wim Taymans 2022-03-01 21:00:54 +01:00
parent d3a1b9fe31
commit 07a410e715
5 changed files with 53 additions and 39 deletions

View file

@ -35,6 +35,7 @@
#include <spa/utils/ringbuffer.h>
#include <spa/utils/string.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include <spa/debug/format.h>
#include <spa/debug/types.h>
#include <spa/debug/pod.h>
@ -398,7 +399,7 @@ static int enum_params(struct filter *d, struct spa_list *param_list, int seq,
{
struct spa_result_node_params result;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
struct spa_pod_dynamic_builder b;
uint32_t count = 0;
struct param *p;
bool found = false;
@ -425,13 +426,14 @@ static int enum_params(struct filter *d, struct spa_list *param_list, int seq,
found = true;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result.param, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result.param, param, filter) == 0) {
spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
if (++count == num)
if (count == num)
break;
}
return found ? 0 : -ENOENT;

View file

@ -27,6 +27,7 @@
#include <spa/debug/types.h>
#include <spa/monitor/utils.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include <spa/utils/string.h>
#include "pipewire/impl.h"
@ -324,7 +325,7 @@ int pw_impl_device_for_each_param(struct pw_impl_device *device,
if (pi->user == 1) {
struct pw_param *p;
uint8_t buffer[4096];
struct spa_pod_builder b = { 0 };
struct spa_pod_dynamic_builder b;
struct spa_result_device_params result;
uint32_t count = 0;
@ -339,14 +340,15 @@ int pw_impl_device_for_each_param(struct pw_impl_device *device,
if (result.index < index)
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result.param, p->param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result.param, p->param, filter) == 0) {
pw_log_debug("%p: %d param %u", device, seq, result.index);
result_device_params(&user_data, seq, 0, SPA_RESULT_TYPE_DEVICE_PARAMS, &result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
if (++count == max)
if (count == max)
break;
}
res = 0;

View file

@ -32,6 +32,7 @@
#include <spa/support/system.h>
#include <spa/pod/parser.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include <spa/node/utils.h>
#include <spa/debug/types.h>
#include <spa/utils/string.h>
@ -1967,7 +1968,7 @@ int pw_impl_node_for_each_param(struct pw_impl_node *node,
if (pi->user == 1) {
struct pw_param *p;
uint8_t buffer[4096];
struct spa_pod_builder b = { 0 };
struct spa_pod_dynamic_builder b;
struct spa_result_node_params result;
uint32_t count = 0;
@ -1982,14 +1983,16 @@ int pw_impl_node_for_each_param(struct pw_impl_node *node,
if (result.index < index)
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result.param, p->param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result.param, p->param, filter) == 0) {
pw_log_debug("%p: %d param %u", node, seq, result.index);
result_node_params(&user_data, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
if (++count == max)
if (count == max)
break;
}
res = 0;

View file

@ -34,6 +34,7 @@
#include <spa/utils/string.h>
#include <spa/debug/types.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include "pipewire/impl.h"
#include "pipewire/private.h"
@ -229,17 +230,19 @@ int pw_impl_port_init_mix(struct pw_impl_port *port, struct pw_impl_port_mix *mi
{
uint32_t idx = 0;
uint8_t buffer[1024];
struct spa_pod_builder b;
struct spa_pod_dynamic_builder b;
struct spa_pod *param;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_node_port_enum_params_sync(port->mix,
pw_direction_reverse(port->direction), 0,
SPA_PARAM_Format, &idx, NULL, &param, &b) == 1) {
SPA_PARAM_Format, &idx, NULL, &param, &b.b) == 1) {
spa_node_port_set_param(port->mix,
port->direction, port_id,
SPA_PARAM_Format, 0, param);
}
spa_pod_dynamic_builder_clean(&b);
}
spa_list_append(&port->mix_list, &mix->link);
@ -1216,7 +1219,7 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port,
if (pi->user == 1) {
struct pw_param *p;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
struct spa_pod_dynamic_builder b;
struct spa_result_node_params result;
uint32_t count = 0;
@ -1231,14 +1234,16 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port,
if (result.index < index)
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result.param, p->param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result.param, p->param, filter) >= 0) {
pw_log_debug("%p: %d param %u", port, seq, result.index);
result_port_params(&user_data, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
if (++count == max)
if (count == max)
break;
}
res = 0;

View file

@ -34,6 +34,7 @@
#include <spa/node/utils.h>
#include <spa/utils/ringbuffer.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include <spa/debug/format.h>
#include <spa/debug/types.h>
#include <spa/debug/pod.h>
@ -483,7 +484,7 @@ static int enum_params(void *object, bool is_port, int seq, uint32_t id, uint32_
struct stream *d = object;
struct spa_result_node_params result;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
struct spa_pod_dynamic_builder b;
uint32_t count = 0;
struct param *p;
bool found = false;
@ -510,13 +511,14 @@ static int enum_params(void *object, bool is_port, int seq, uint32_t id, uint32_
found = true;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result.param, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result.param, param, filter) == 0) {
spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
if (++count == num)
if (count == num)
break;
}
return found ? 0 : -ENOENT;