mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pod: use dynamic pod builder in some places
This commit is contained in:
		
							parent
							
								
									d3a1b9fe31
								
							
						
					
					
						commit
						07a410e715
					
				
					 5 changed files with 53 additions and 39 deletions
				
			
		| 
						 | 
					@ -35,6 +35,7 @@
 | 
				
			||||||
#include <spa/utils/ringbuffer.h>
 | 
					#include <spa/utils/ringbuffer.h>
 | 
				
			||||||
#include <spa/utils/string.h>
 | 
					#include <spa/utils/string.h>
 | 
				
			||||||
#include <spa/pod/filter.h>
 | 
					#include <spa/pod/filter.h>
 | 
				
			||||||
 | 
					#include <spa/pod/dynamic.h>
 | 
				
			||||||
#include <spa/debug/format.h>
 | 
					#include <spa/debug/format.h>
 | 
				
			||||||
#include <spa/debug/types.h>
 | 
					#include <spa/debug/types.h>
 | 
				
			||||||
#include <spa/debug/pod.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;
 | 
						struct spa_result_node_params result;
 | 
				
			||||||
	uint8_t buffer[1024];
 | 
						uint8_t buffer[1024];
 | 
				
			||||||
	struct spa_pod_builder b = { 0 };
 | 
						struct spa_pod_dynamic_builder b;
 | 
				
			||||||
	uint32_t count = 0;
 | 
						uint32_t count = 0;
 | 
				
			||||||
	struct param *p;
 | 
						struct param *p;
 | 
				
			||||||
	bool found = false;
 | 
						bool found = false;
 | 
				
			||||||
| 
						 | 
					@ -425,13 +426,14 @@ static int enum_params(struct filter *d, struct spa_list *param_list, int seq,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		found = true;
 | 
							found = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		spa_pod_builder_init(&b, buffer, sizeof(buffer));
 | 
							spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
 | 
				
			||||||
		if (spa_pod_filter(&b, &result.param, param, filter) != 0)
 | 
							if (spa_pod_filter(&b.b, &result.param, param, filter) == 0) {
 | 
				
			||||||
			continue;
 | 
								spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
 | 
				
			||||||
 | 
								count++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							spa_pod_dynamic_builder_clean(&b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
 | 
							if (count == num)
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (++count == num)
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return found ? 0 : -ENOENT;
 | 
						return found ? 0 : -ENOENT;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +27,7 @@
 | 
				
			||||||
#include <spa/debug/types.h>
 | 
					#include <spa/debug/types.h>
 | 
				
			||||||
#include <spa/monitor/utils.h>
 | 
					#include <spa/monitor/utils.h>
 | 
				
			||||||
#include <spa/pod/filter.h>
 | 
					#include <spa/pod/filter.h>
 | 
				
			||||||
 | 
					#include <spa/pod/dynamic.h>
 | 
				
			||||||
#include <spa/utils/string.h>
 | 
					#include <spa/utils/string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "pipewire/impl.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) {
 | 
						if (pi->user == 1) {
 | 
				
			||||||
		struct pw_param *p;
 | 
							struct pw_param *p;
 | 
				
			||||||
		uint8_t buffer[4096];
 | 
							uint8_t buffer[4096];
 | 
				
			||||||
		struct spa_pod_builder b = { 0 };
 | 
							struct spa_pod_dynamic_builder b;
 | 
				
			||||||
	        struct spa_result_device_params result;
 | 
						        struct spa_result_device_params result;
 | 
				
			||||||
		uint32_t count = 0;
 | 
							uint32_t count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -339,14 +340,15 @@ int pw_impl_device_for_each_param(struct pw_impl_device *device,
 | 
				
			||||||
			if (result.index < index)
 | 
								if (result.index < index)
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			spa_pod_builder_init(&b, buffer, sizeof(buffer));
 | 
								spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
 | 
				
			||||||
			if (spa_pod_filter(&b, &result.param, p->param, filter) != 0)
 | 
								if (spa_pod_filter(&b.b, &result.param, p->param, filter) == 0) {
 | 
				
			||||||
				continue;
 | 
									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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			pw_log_debug("%p: %d param %u", device, seq, result.index);
 | 
								if (count == max)
 | 
				
			||||||
			result_device_params(&user_data, seq, 0, SPA_RESULT_TYPE_DEVICE_PARAMS, &result);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (++count == max)
 | 
					 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		res = 0;
 | 
							res = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@
 | 
				
			||||||
#include <spa/support/system.h>
 | 
					#include <spa/support/system.h>
 | 
				
			||||||
#include <spa/pod/parser.h>
 | 
					#include <spa/pod/parser.h>
 | 
				
			||||||
#include <spa/pod/filter.h>
 | 
					#include <spa/pod/filter.h>
 | 
				
			||||||
 | 
					#include <spa/pod/dynamic.h>
 | 
				
			||||||
#include <spa/node/utils.h>
 | 
					#include <spa/node/utils.h>
 | 
				
			||||||
#include <spa/debug/types.h>
 | 
					#include <spa/debug/types.h>
 | 
				
			||||||
#include <spa/utils/string.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) {
 | 
						if (pi->user == 1) {
 | 
				
			||||||
		struct pw_param *p;
 | 
							struct pw_param *p;
 | 
				
			||||||
		uint8_t buffer[4096];
 | 
							uint8_t buffer[4096];
 | 
				
			||||||
		struct spa_pod_builder b = { 0 };
 | 
							struct spa_pod_dynamic_builder b;
 | 
				
			||||||
	        struct spa_result_node_params result;
 | 
						        struct spa_result_node_params result;
 | 
				
			||||||
		uint32_t count = 0;
 | 
							uint32_t count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1982,14 +1983,16 @@ int pw_impl_node_for_each_param(struct pw_impl_node *node,
 | 
				
			||||||
			if (result.index < index)
 | 
								if (result.index < index)
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			spa_pod_builder_init(&b, buffer, sizeof(buffer));
 | 
								spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
 | 
				
			||||||
			if (spa_pod_filter(&b, &result.param, p->param, filter) != 0)
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			pw_log_debug("%p: %d param %u", node, seq, result.index);
 | 
								if (spa_pod_filter(&b.b, &result.param, p->param, filter) == 0)  {
 | 
				
			||||||
			result_node_params(&user_data, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
 | 
									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;
 | 
									break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		res = 0;
 | 
							res = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@
 | 
				
			||||||
#include <spa/utils/string.h>
 | 
					#include <spa/utils/string.h>
 | 
				
			||||||
#include <spa/debug/types.h>
 | 
					#include <spa/debug/types.h>
 | 
				
			||||||
#include <spa/pod/filter.h>
 | 
					#include <spa/pod/filter.h>
 | 
				
			||||||
 | 
					#include <spa/pod/dynamic.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "pipewire/impl.h"
 | 
					#include "pipewire/impl.h"
 | 
				
			||||||
#include "pipewire/private.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;
 | 
							uint32_t idx = 0;
 | 
				
			||||||
		uint8_t buffer[1024];
 | 
							uint8_t buffer[1024];
 | 
				
			||||||
		struct spa_pod_builder b;
 | 
							struct spa_pod_dynamic_builder b;
 | 
				
			||||||
		struct spa_pod *param;
 | 
							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,
 | 
							if (spa_node_port_enum_params_sync(port->mix,
 | 
				
			||||||
				pw_direction_reverse(port->direction), 0,
 | 
									pw_direction_reverse(port->direction), 0,
 | 
				
			||||||
				SPA_PARAM_Format, &idx, NULL, ¶m, &b) == 1) {
 | 
									SPA_PARAM_Format, &idx, NULL, ¶m, &b.b) == 1) {
 | 
				
			||||||
			spa_node_port_set_param(port->mix,
 | 
								spa_node_port_set_param(port->mix,
 | 
				
			||||||
				port->direction, port_id,
 | 
									port->direction, port_id,
 | 
				
			||||||
				SPA_PARAM_Format, 0, param);
 | 
									SPA_PARAM_Format, 0, param);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							spa_pod_dynamic_builder_clean(&b);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spa_list_append(&port->mix_list, &mix->link);
 | 
						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) {
 | 
						if (pi->user == 1) {
 | 
				
			||||||
		struct pw_param *p;
 | 
							struct pw_param *p;
 | 
				
			||||||
		uint8_t buffer[1024];
 | 
							uint8_t buffer[1024];
 | 
				
			||||||
		struct spa_pod_builder b = { 0 };
 | 
							struct spa_pod_dynamic_builder b;
 | 
				
			||||||
	        struct spa_result_node_params result;
 | 
						        struct spa_result_node_params result;
 | 
				
			||||||
		uint32_t count = 0;
 | 
							uint32_t count = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1231,14 +1234,16 @@ int pw_impl_port_for_each_param(struct pw_impl_port *port,
 | 
				
			||||||
			if (result.index < index)
 | 
								if (result.index < index)
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			spa_pod_builder_init(&b, buffer, sizeof(buffer));
 | 
								spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
 | 
				
			||||||
			if (spa_pod_filter(&b, &result.param, p->param, filter) != 0)
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			pw_log_debug("%p: %d param %u", port, seq, result.index);
 | 
								if (spa_pod_filter(&b.b, &result.param, p->param, filter) >= 0) {
 | 
				
			||||||
			result_port_params(&user_data, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
 | 
									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;
 | 
									break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		res = 0;
 | 
							res = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@
 | 
				
			||||||
#include <spa/node/utils.h>
 | 
					#include <spa/node/utils.h>
 | 
				
			||||||
#include <spa/utils/ringbuffer.h>
 | 
					#include <spa/utils/ringbuffer.h>
 | 
				
			||||||
#include <spa/pod/filter.h>
 | 
					#include <spa/pod/filter.h>
 | 
				
			||||||
 | 
					#include <spa/pod/dynamic.h>
 | 
				
			||||||
#include <spa/debug/format.h>
 | 
					#include <spa/debug/format.h>
 | 
				
			||||||
#include <spa/debug/types.h>
 | 
					#include <spa/debug/types.h>
 | 
				
			||||||
#include <spa/debug/pod.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 stream *d = object;
 | 
				
			||||||
	struct spa_result_node_params result;
 | 
						struct spa_result_node_params result;
 | 
				
			||||||
	uint8_t buffer[1024];
 | 
						uint8_t buffer[1024];
 | 
				
			||||||
	struct spa_pod_builder b = { 0 };
 | 
						struct spa_pod_dynamic_builder b;
 | 
				
			||||||
	uint32_t count = 0;
 | 
						uint32_t count = 0;
 | 
				
			||||||
	struct param *p;
 | 
						struct param *p;
 | 
				
			||||||
	bool found = false;
 | 
						bool found = false;
 | 
				
			||||||
| 
						 | 
					@ -510,13 +511,14 @@ static int enum_params(void *object, bool is_port, int seq, uint32_t id, uint32_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		found = true;
 | 
							found = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		spa_pod_builder_init(&b, buffer, sizeof(buffer));
 | 
							spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
 | 
				
			||||||
		if (spa_pod_filter(&b, &result.param, param, filter) != 0)
 | 
							if (spa_pod_filter(&b.b, &result.param, param, filter) == 0) {
 | 
				
			||||||
			continue;
 | 
								spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
 | 
				
			||||||
 | 
								count++;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							spa_pod_dynamic_builder_clean(&b);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		spa_node_emit_result(&d->hooks, seq, 0, SPA_RESULT_TYPE_NODE_PARAMS, &result);
 | 
							if (count == num)
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (++count == num)
 | 
					 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return found ? 0 : -ENOENT;
 | 
						return found ? 0 : -ENOENT;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue