module-session-manager: use dynamic builder

The buffer is very small and we should use a dynamic builder if we don't
know what pod we will expect.
This commit is contained in:
Wim Taymans 2023-06-15 11:05:17 +02:00
parent bbf8f1a0c8
commit 0b2d9ee007
8 changed files with 88 additions and 80 deletions

View file

@ -10,6 +10,7 @@
#include <pipewire/extensions/session-manager.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include "endpoint-stream.h"
#include "client-endpoint.h"
@ -39,8 +40,8 @@ static int endpoint_stream_enum_params (void *object, int seq,
struct endpoint_stream *this = data->stream;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -55,15 +56,15 @@ static int endpoint_stream_enum_params (void *object, int seq,
if (param == NULL || !spa_pod_is_object_id(param, id))
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_endpoint_stream_resource_param(resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_endpoint_stream_resource_param(resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
break;
}
return 0;

View file

@ -10,6 +10,7 @@
#include <pipewire/extensions/session-manager.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include "endpoint.h"
#include "client-endpoint.h"
@ -39,8 +40,8 @@ static int endpoint_enum_params (void *object, int seq,
struct endpoint *this = data->endpoint;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -57,15 +58,15 @@ static int endpoint_enum_params (void *object, int seq,
if (param == NULL || !spa_pod_is_object_id(param, id))
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_endpoint_resource_param(resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_endpoint_resource_param(resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
break;
}
return 0;

View file

@ -10,6 +10,7 @@
#include <pipewire/extensions/session-manager.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include "endpoint-link.h"
#include "client-session.h"
@ -39,8 +40,8 @@ static int endpoint_link_enum_params (void *object, int seq,
struct endpoint_link *this = data->link;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -55,15 +56,15 @@ static int endpoint_link_enum_params (void *object, int seq,
if (param == NULL || !spa_pod_is_object_id(param, id))
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_endpoint_link_resource_param(resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_endpoint_link_resource_param(resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
break;
}
return 0;

View file

@ -10,6 +10,7 @@
#include <pipewire/extensions/session-manager.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#include "session.h"
#include "client-session.h"
@ -39,8 +40,8 @@ static int session_enum_params (void *object, int seq,
struct session *this = data->session;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -55,15 +56,15 @@ static int session_enum_params (void *object, int seq,
if (param == NULL || !spa_pod_is_object_id(param, id))
continue;
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_session_resource_param(resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", this, seq, index);
pw_session_resource_param(resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
break;
}
return 0;

View file

@ -10,6 +10,7 @@
#include <spa/utils/result.h>
#include <spa/pod/builder.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#define MAX_PARAMS 32
@ -84,8 +85,8 @@ static int method_enum_params(void *object, int seq,
struct param_data *pdata;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -103,15 +104,15 @@ static int method_enum_params(void *object, int seq,
param = *pw_array_get_unchecked(&pdata->params, index, struct spa_pod*);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_endpoint_link_resource_param(d->resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_endpoint_link_resource_param(d->resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
return 0;
}
}

View file

@ -10,6 +10,7 @@
#include <spa/utils/result.h>
#include <spa/pod/builder.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#define MAX_PARAMS 32
@ -84,8 +85,8 @@ static int method_enum_params(void *object, int seq,
struct param_data *pdata;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -103,15 +104,15 @@ static int method_enum_params(void *object, int seq,
param = *pw_array_get_unchecked(&pdata->params, index, struct spa_pod*);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_endpoint_stream_resource_param(d->resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_endpoint_stream_resource_param(d->resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
return 0;
}
}

View file

@ -9,6 +9,7 @@
#include <spa/utils/result.h>
#include <spa/pod/builder.h>
#include <spa/pod/dynamic.h>
#include <spa/pod/filter.h>
#define MAX_PARAMS 32
@ -84,8 +85,8 @@ static int method_enum_params(void *object, int seq,
struct param_data *pdata;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -103,15 +104,15 @@ static int method_enum_params(void *object, int seq,
param = *pw_array_get_unchecked(&pdata->params, index, struct spa_pod*);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_endpoint_resource_param(d->resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_endpoint_resource_param(d->resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
return 0;
}
}

View file

@ -10,6 +10,7 @@
#include <spa/utils/result.h>
#include <spa/pod/builder.h>
#include <spa/pod/filter.h>
#include <spa/pod/dynamic.h>
#define MAX_PARAMS 32
@ -84,8 +85,8 @@ static int method_enum_params(void *object, int seq,
struct param_data *pdata;
struct spa_pod *result;
struct spa_pod *param;
uint8_t buffer[1024];
struct spa_pod_builder b = { 0 };
uint8_t buffer[2048];
struct spa_pod_dynamic_builder b = { 0 };
uint32_t index;
uint32_t next = start;
uint32_t count = 0;
@ -103,15 +104,15 @@ static int method_enum_params(void *object, int seq,
param = *pw_array_get_unchecked(&pdata->params, index, struct spa_pod*);
spa_pod_builder_init(&b, buffer, sizeof(buffer));
if (spa_pod_filter(&b, &result, param, filter) != 0)
continue;
spa_pod_dynamic_builder_init(&b, buffer, sizeof(buffer), 4096);
if (spa_pod_filter(&b.b, &result, param, filter) == 0) {
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_session_resource_param(d->resource, seq, id, index, next, result);
count++;
}
spa_pod_dynamic_builder_clean(&b);
pw_log_debug(NAME" %p: %d param %u", impl, seq, index);
pw_session_resource_param(d->resource, seq, id, index, next, result);
if (++count == num)
if (count == num)
return 0;
}
}