mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
builder: make methods to save and restore state
This commit is contained in:
parent
737b428077
commit
cd5e697e9f
20 changed files with 120 additions and 112 deletions
|
|
@ -33,30 +33,40 @@ struct spa_pod_frame {
|
||||||
uint32_t ref;
|
uint32_t ref;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spa_pod_builder {
|
struct spa_pod_builder_state {
|
||||||
void *data;
|
|
||||||
uint32_t size;
|
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
|
||||||
uint32_t (*write) (struct spa_pod_builder *builder, const void *data, uint32_t size);
|
|
||||||
void * (*deref) (struct spa_pod_builder *builder, uint32_t ref);
|
|
||||||
void (*reset) (struct spa_pod_builder *builder, uint32_t offset);
|
|
||||||
bool in_array;
|
bool in_array;
|
||||||
bool first;
|
bool first;
|
||||||
int depth;
|
int depth;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct spa_pod_builder {
|
||||||
|
void *data;
|
||||||
|
uint32_t size;
|
||||||
|
|
||||||
|
uint32_t (*write) (struct spa_pod_builder *builder, const void *data, uint32_t size);
|
||||||
|
void * (*deref) (struct spa_pod_builder *builder, uint32_t ref);
|
||||||
|
void (*reset) (struct spa_pod_builder *builder, struct spa_pod_builder_state *state);
|
||||||
|
|
||||||
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod_frame frame[SPA_POD_MAX_DEPTH];
|
struct spa_pod_frame frame[SPA_POD_MAX_DEPTH];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SPA_POD_BUILDER_INIT(buffer,size) { buffer, size, }
|
#define SPA_POD_BUILDER_INIT(buffer,size) { buffer, size, }
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
spa_pod_builder_reset(struct spa_pod_builder *builder, uint32_t offset)
|
spa_pod_builder_get_state(struct spa_pod_builder *builder, struct spa_pod_builder_state *state)
|
||||||
|
{
|
||||||
|
*state = builder->state;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
spa_pod_builder_reset(struct spa_pod_builder *builder, struct spa_pod_builder_state *state)
|
||||||
{
|
{
|
||||||
if (builder->reset)
|
if (builder->reset)
|
||||||
builder->reset(builder, offset);
|
builder->reset(builder, state);
|
||||||
builder->offset = offset;
|
else
|
||||||
builder->depth = 0;
|
builder->state = *state;
|
||||||
builder->in_array = builder->first = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void spa_pod_builder_init(struct spa_pod_builder *builder, void *data, uint32_t size)
|
static inline void spa_pod_builder_init(struct spa_pod_builder *builder, void *data, uint32_t size)
|
||||||
|
|
@ -84,11 +94,11 @@ spa_pod_builder_push(struct spa_pod_builder *builder,
|
||||||
const struct spa_pod *pod,
|
const struct spa_pod *pod,
|
||||||
uint32_t ref)
|
uint32_t ref)
|
||||||
{
|
{
|
||||||
struct spa_pod_frame *frame = &builder->frame[builder->depth++];
|
struct spa_pod_frame *frame = &builder->frame[builder->state.depth++];
|
||||||
frame->pod = *pod;
|
frame->pod = *pod;
|
||||||
frame->ref = ref;
|
frame->ref = ref;
|
||||||
builder->in_array = builder->first = (pod->type == SPA_POD_TYPE_ARRAY ||
|
builder->state.in_array = builder->state.first =
|
||||||
pod->type == SPA_POD_TYPE_PROP);
|
(pod->type == SPA_POD_TYPE_ARRAY || pod->type == SPA_POD_TYPE_PROP);
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -101,16 +111,16 @@ spa_pod_builder_raw(struct spa_pod_builder *builder, const void *data, uint32_t
|
||||||
if (builder->write) {
|
if (builder->write) {
|
||||||
ref = builder->write(builder, data, size);
|
ref = builder->write(builder, data, size);
|
||||||
} else {
|
} else {
|
||||||
ref = builder->offset;
|
ref = builder->state.offset;
|
||||||
if (ref + size > builder->size)
|
if (ref + size > builder->size)
|
||||||
ref = -1;
|
ref = -1;
|
||||||
else
|
else
|
||||||
memcpy(builder->data + ref, data, size);
|
memcpy(builder->data + ref, data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
builder->offset += size;
|
builder->state.offset += size;
|
||||||
|
|
||||||
for (i = 0; i < builder->depth; i++)
|
for (i = 0; i < builder->state.depth; i++)
|
||||||
builder->frame[i].pod.size += size;
|
builder->frame[i].pod.size += size;
|
||||||
|
|
||||||
return ref;
|
return ref;
|
||||||
|
|
@ -137,14 +147,14 @@ static inline void *spa_pod_builder_pop(struct spa_pod_builder *builder)
|
||||||
struct spa_pod_frame *frame, *top;
|
struct spa_pod_frame *frame, *top;
|
||||||
struct spa_pod *pod;
|
struct spa_pod *pod;
|
||||||
|
|
||||||
frame = &builder->frame[--builder->depth];
|
frame = &builder->frame[--builder->state.depth];
|
||||||
if ((pod = spa_pod_builder_deref(builder, frame->ref)) != NULL)
|
if ((pod = spa_pod_builder_deref(builder, frame->ref)) != NULL)
|
||||||
*pod = frame->pod;
|
*pod = frame->pod;
|
||||||
|
|
||||||
top = builder->depth > 0 ? &builder->frame[builder->depth-1] : NULL;
|
top = builder->state.depth > 0 ? &builder->frame[builder->state.depth-1] : NULL;
|
||||||
builder->in_array = (top && (top->pod.type == SPA_POD_TYPE_ARRAY ||
|
builder->state.in_array = (top &&
|
||||||
top->pod.type == SPA_POD_TYPE_PROP));
|
(top->pod.type == SPA_POD_TYPE_ARRAY || top->pod.type == SPA_POD_TYPE_PROP));
|
||||||
spa_pod_builder_pad(builder, builder->offset);
|
spa_pod_builder_pad(builder, builder->state.offset);
|
||||||
|
|
||||||
return pod;
|
return pod;
|
||||||
}
|
}
|
||||||
|
|
@ -155,16 +165,16 @@ spa_pod_builder_primitive(struct spa_pod_builder *builder, const struct spa_pod
|
||||||
const void *data;
|
const void *data;
|
||||||
uint32_t size, ref;
|
uint32_t size, ref;
|
||||||
|
|
||||||
if (builder->in_array && !builder->first) {
|
if (builder->state.in_array && !builder->state.first) {
|
||||||
data = SPA_POD_BODY_CONST(p);
|
data = SPA_POD_BODY_CONST(p);
|
||||||
size = SPA_POD_BODY_SIZE(p);
|
size = SPA_POD_BODY_SIZE(p);
|
||||||
} else {
|
} else {
|
||||||
data = p;
|
data = p;
|
||||||
size = SPA_POD_SIZE(p);
|
size = SPA_POD_SIZE(p);
|
||||||
builder->first = false;
|
builder->state.first = false;
|
||||||
}
|
}
|
||||||
ref = spa_pod_builder_raw(builder, data, size);
|
ref = spa_pod_builder_raw(builder, data, size);
|
||||||
if (!builder->in_array)
|
if (!builder->state.in_array)
|
||||||
spa_pod_builder_pad(builder, size);
|
spa_pod_builder_pad(builder, size);
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
@ -235,7 +245,7 @@ spa_pod_builder_write_string(struct spa_pod_builder *builder, const char *str, u
|
||||||
ref = -1;
|
ref = -1;
|
||||||
if (spa_pod_builder_raw(builder, "", 1) == -1)
|
if (spa_pod_builder_raw(builder, "", 1) == -1)
|
||||||
ref = -1;
|
ref = -1;
|
||||||
spa_pod_builder_pad(builder, builder->offset);
|
spa_pod_builder_pad(builder, builder->state.offset);
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -543,8 +553,8 @@ spa_pod_builder_addv(struct spa_pod_builder *builder,
|
||||||
}
|
}
|
||||||
case ']': case ')': case '>':
|
case ']': case ')': case '>':
|
||||||
spa_pod_builder_pop(builder);
|
spa_pod_builder_pop(builder);
|
||||||
if (builder->depth > 0 &&
|
if (builder->state.depth > 0 &&
|
||||||
builder->frame[builder->depth-1].pod.type == SPA_POD_TYPE_PROP)
|
builder->frame[builder->state.depth-1].pod.type == SPA_POD_TYPE_PROP)
|
||||||
spa_pod_builder_pop(builder);
|
spa_pod_builder_pop(builder);
|
||||||
break;
|
break;
|
||||||
case ' ': case '\n': case '\t': case '\r':
|
case ' ': case '\n': case '\t': case '\r':
|
||||||
|
|
@ -558,7 +568,7 @@ spa_pod_builder_addv(struct spa_pod_builder *builder,
|
||||||
}
|
}
|
||||||
format++;
|
format++;
|
||||||
}
|
}
|
||||||
return spa_pod_builder_deref(builder, builder->frame[builder->depth].ref);
|
return spa_pod_builder_deref(builder, builder->frame[builder->state.depth].ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void *spa_pod_builder_add(struct spa_pod_builder *builder, const char *format, ...)
|
static inline void *spa_pod_builder_add(struct spa_pod_builder *builder, const char *format, ...)
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
struct state *this;
|
struct state *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(index != NULL, -EINVAL);
|
spa_return_val_if_fail(index != NULL, -EINVAL);
|
||||||
|
|
@ -60,7 +60,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct state, node);
|
this = SPA_CONTAINER_OF(node, struct state, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -92,7 +92,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -281,7 +281,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
struct state *this;
|
struct state *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(index != NULL, -EINVAL);
|
spa_return_val_if_fail(index != NULL, -EINVAL);
|
||||||
|
|
@ -292,8 +292,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -375,7 +374,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
struct state *this;
|
struct state *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(index != NULL, -EINVAL);
|
spa_return_val_if_fail(index != NULL, -EINVAL);
|
||||||
|
|
@ -59,7 +59,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct state, node);
|
this = SPA_CONTAINER_OF(node, struct state, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -89,7 +89,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -330,7 +330,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
struct state *this;
|
struct state *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -342,7 +342,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -398,7 +398,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -387,7 +387,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct port *port;
|
struct port *port;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -401,7 +401,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
port = GET_PORT(this, direction, port_id);
|
port = GET_PORT(this, direction, port_id);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -471,7 +471,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -184,7 +184,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct impl, node);
|
this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -217,7 +217,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -577,7 +577,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
|
@ -590,7 +590,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -660,7 +660,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -275,11 +275,11 @@ spa_ffmpeg_dec_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this = SPA_CONTAINER_OF(node, struct impl, node);
|
struct impl *this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
struct type *t = &this->type;
|
struct type *t = &this->type;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -305,7 +305,7 @@ spa_ffmpeg_dec_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -271,11 +271,11 @@ spa_ffmpeg_enc_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this = SPA_CONTAINER_OF(node, struct impl, node);
|
struct impl *this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
struct type *t = &this->type;
|
struct type *t = &this->type;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -301,7 +301,7 @@ spa_ffmpeg_enc_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -144,7 +144,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct impl, node);
|
this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -168,7 +168,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -468,7 +468,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
|
@ -481,7 +481,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -533,7 +533,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -151,7 +151,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct impl, node);
|
this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -179,7 +179,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -483,7 +483,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
|
@ -496,7 +496,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -548,7 +548,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(index != NULL, -EINVAL);
|
spa_return_val_if_fail(index != NULL, -EINVAL);
|
||||||
|
|
@ -185,7 +185,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct impl, node);
|
this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -212,7 +212,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -520,7 +520,7 @@ static int impl_node_port_enum_params(struct spa_node *node,
|
||||||
struct port *port;
|
struct port *port;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -534,7 +534,7 @@ static int impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
port = &this->out_ports[port_id];
|
port = &this->out_ports[port_id];
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -587,7 +587,7 @@ static int impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -158,8 +158,8 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(builder != NULL, -EINVAL);
|
spa_return_val_if_fail(builder != NULL, -EINVAL);
|
||||||
|
|
@ -167,7 +167,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct impl, node);
|
this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -196,7 +196,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -522,7 +522,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
|
@ -535,7 +535,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
spa_return_val_if_fail(CHECK_PORT(this, direction, port_id), -EINVAL);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -595,7 +595,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -145,7 +145,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
|
|
@ -155,7 +155,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
this = SPA_CONTAINER_OF(node, struct impl, node);
|
this = SPA_CONTAINER_OF(node, struct impl, node);
|
||||||
t = &this->type;
|
t = &this->type;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -182,7 +182,7 @@ static int impl_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
@ -392,7 +392,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
struct impl *this;
|
struct impl *this;
|
||||||
struct type *t;
|
struct type *t;
|
||||||
struct port *port;
|
struct port *port;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
|
|
@ -407,7 +407,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
port = GET_PORT(this, direction, port_id);
|
port = GET_PORT(this, direction, port_id);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idList) {
|
if (id == t->param.idList) {
|
||||||
|
|
@ -463,7 +463,7 @@ impl_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
if (spa_pod_filter(builder, param, (struct spa_pod*)filter) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -384,7 +384,7 @@ static int negotiate_formats(struct data *data)
|
||||||
":", data->type.format_audio.rate, "i", 44100,
|
":", data->type.format_audio.rate, "i", 44100,
|
||||||
":", data->type.format_audio.channels, "i", 2);
|
":", data->type.format_audio.channels, "i", 2);
|
||||||
|
|
||||||
ref = b.offset;
|
ref = b.state.offset;
|
||||||
|
|
||||||
spa_debug_pod(&filter->pod, 0);
|
spa_debug_pod(&filter->pod, 0);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -468,7 +468,7 @@ static int negotiate_formats(struct data *data)
|
||||||
":", data->type.format_audio.rate, "i", 44100,
|
":", data->type.format_audio.rate, "i", 44100,
|
||||||
":", data->type.format_audio.channels, "i", 2);
|
":", data->type.format_audio.channels, "i", 2);
|
||||||
|
|
||||||
ref = b.offset;
|
ref = b.state.offset;
|
||||||
|
|
||||||
if ((res =
|
if ((res =
|
||||||
spa_node_port_enum_params(data->sink,
|
spa_node_port_enum_params(data->sink,
|
||||||
|
|
|
||||||
|
|
@ -333,7 +333,7 @@ static int negotiate_formats(struct data *data)
|
||||||
":", data->type.format_audio.rate, "i", 44100,
|
":", data->type.format_audio.rate, "i", 44100,
|
||||||
":", data->type.format_audio.channels, "i", 2);
|
":", data->type.format_audio.channels, "i", 2);
|
||||||
|
|
||||||
ref = b.offset;
|
ref = b.state.offset;
|
||||||
|
|
||||||
if ((res = spa_node_port_enum_params(data->sink,
|
if ((res = spa_node_port_enum_params(data->sink,
|
||||||
SPA_DIRECTION_INPUT, 0,
|
SPA_DIRECTION_INPUT, 0,
|
||||||
|
|
|
||||||
|
|
@ -531,10 +531,10 @@ handle_audio_fields (ConvertData *d)
|
||||||
static uint32_t
|
static uint32_t
|
||||||
write_pod (struct spa_pod_builder *b, const void *data, uint32_t size)
|
write_pod (struct spa_pod_builder *b, const void *data, uint32_t size)
|
||||||
{
|
{
|
||||||
uint32_t ref = b->offset;
|
uint32_t ref = b->state.offset;
|
||||||
|
|
||||||
if (b->size <= b->offset) {
|
if (b->size <= ref) {
|
||||||
b->size = SPA_ROUND_UP_N (b->offset + size, 512);
|
b->size = SPA_ROUND_UP_N (ref + size, 512);
|
||||||
b->data = realloc (b->data, b->size);
|
b->data = realloc (b->data, b->size);
|
||||||
if (b->data == NULL)
|
if (b->data == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
||||||
|
|
@ -156,7 +156,7 @@ static int spa_proxy_node_enum_params(struct spa_node *node,
|
||||||
struct spa_pod_builder *builder)
|
struct spa_pod_builder *builder)
|
||||||
{
|
{
|
||||||
struct proxy *this;
|
struct proxy *this;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(index != NULL, -EINVAL);
|
spa_return_val_if_fail(index != NULL, -EINVAL);
|
||||||
|
|
@ -164,7 +164,7 @@ static int spa_proxy_node_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
this = SPA_CONTAINER_OF(node, struct proxy, node);
|
this = SPA_CONTAINER_OF(node, struct proxy, node);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
struct spa_pod_object *param;
|
struct spa_pod_object *param;
|
||||||
|
|
@ -180,7 +180,7 @@ static int spa_proxy_node_enum_params(struct spa_node *node,
|
||||||
if (spa_pod_filter(builder, ¶m->pod, &filter->pod) == 0)
|
if (spa_pod_filter(builder, ¶m->pod, &filter->pod) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -456,7 +456,7 @@ spa_proxy_node_port_enum_params(struct spa_node *node,
|
||||||
{
|
{
|
||||||
struct proxy *this;
|
struct proxy *this;
|
||||||
struct proxy_port *port;
|
struct proxy_port *port;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
|
|
||||||
spa_return_val_if_fail(node != NULL, -EINVAL);
|
spa_return_val_if_fail(node != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(index != NULL, -EINVAL);
|
spa_return_val_if_fail(index != NULL, -EINVAL);
|
||||||
|
|
@ -468,7 +468,8 @@ spa_proxy_node_port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
port = GET_PORT(this, direction, port_id);
|
port = GET_PORT(this, direction, port_id);
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
struct spa_pod_object *param;
|
struct spa_pod_object *param;
|
||||||
|
|
||||||
|
|
@ -483,7 +484,7 @@ spa_proxy_node_port_enum_params(struct spa_node *node,
|
||||||
if (spa_pod_filter(builder, ¶m->pod, &filter->pod) == 0)
|
if (spa_pod_filter(builder, ¶m->pod, &filter->pod) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -447,10 +447,10 @@ static int port_enum_params(struct spa_node *node,
|
||||||
struct node_data *nd = SPA_CONTAINER_OF(node, struct node_data, node_impl);
|
struct node_data *nd = SPA_CONTAINER_OF(node, struct node_data, node_impl);
|
||||||
struct type *t = &nd->type;
|
struct type *t = &nd->type;
|
||||||
struct spa_pod *param;
|
struct spa_pod *param;
|
||||||
uint32_t offset;
|
struct spa_pod_builder_state state;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
offset = builder->offset;
|
spa_pod_builder_get_state(builder, &state);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (id == t->param.idEnumFormat) {
|
if (id == t->param.idEnumFormat) {
|
||||||
|
|
@ -466,7 +466,7 @@ static int port_enum_params(struct spa_node *node,
|
||||||
|
|
||||||
(*index)++;
|
(*index)++;
|
||||||
|
|
||||||
spa_pod_builder_reset(builder, offset);
|
spa_pod_builder_reset(builder, &state);
|
||||||
if ((res = spa_pod_filter(builder, param, (struct spa_pod*)filter)) < 0)
|
if ((res = spa_pod_filter(builder, param, (struct spa_pod*)filter)) < 0)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -348,12 +348,10 @@ static inline void *begin_write(struct pw_protocol_native_connection *conn, uint
|
||||||
static uint32_t write_pod(struct spa_pod_builder *b, const void *data, uint32_t size)
|
static uint32_t write_pod(struct spa_pod_builder *b, const void *data, uint32_t size)
|
||||||
{
|
{
|
||||||
struct impl *impl = SPA_CONTAINER_OF(b, struct impl, builder);
|
struct impl *impl = SPA_CONTAINER_OF(b, struct impl, builder);
|
||||||
uint32_t ref = b->offset;
|
uint32_t ref = b->state.offset;
|
||||||
|
|
||||||
ref = b->offset;
|
if (b->size <= ref) {
|
||||||
|
b->size = SPA_ROUND_UP_N(ref + size, 4096);
|
||||||
if (b->size <= b->offset) {
|
|
||||||
b->size = SPA_ROUND_UP_N(b->offset + size, 4096);
|
|
||||||
b->data = begin_write(&impl->this, b->size);
|
b->data = begin_write(&impl->this, b->size);
|
||||||
}
|
}
|
||||||
memcpy(b->data + ref, data, size);
|
memcpy(b->data + ref, data, size);
|
||||||
|
|
@ -385,7 +383,7 @@ pw_protocol_native_connection_begin_resource(struct pw_protocol_native_connectio
|
||||||
|
|
||||||
impl->dest_id = resource->id;
|
impl->dest_id = resource->id;
|
||||||
impl->opcode = opcode;
|
impl->opcode = opcode;
|
||||||
impl->builder = (struct spa_pod_builder) { NULL, 0, 0, write_pod };
|
impl->builder = (struct spa_pod_builder) { NULL, 0, write_pod };
|
||||||
|
|
||||||
return &impl->builder;
|
return &impl->builder;
|
||||||
}
|
}
|
||||||
|
|
@ -414,7 +412,7 @@ pw_protocol_native_connection_begin_proxy(struct pw_protocol_native_connection *
|
||||||
|
|
||||||
impl->dest_id = proxy->id;
|
impl->dest_id = proxy->id;
|
||||||
impl->opcode = opcode;
|
impl->opcode = opcode;
|
||||||
impl->builder = (struct spa_pod_builder) { NULL, 0, 0, write_pod };
|
impl->builder = (struct spa_pod_builder) { NULL, 0, write_pod };
|
||||||
|
|
||||||
return &impl->builder;
|
return &impl->builder;
|
||||||
}
|
}
|
||||||
|
|
@ -424,7 +422,7 @@ pw_protocol_native_connection_end(struct pw_protocol_native_connection *conn,
|
||||||
struct spa_pod_builder *builder)
|
struct spa_pod_builder *builder)
|
||||||
{
|
{
|
||||||
struct impl *impl = SPA_CONTAINER_OF(conn, struct impl, this);
|
struct impl *impl = SPA_CONTAINER_OF(conn, struct impl, this);
|
||||||
uint32_t *p, size = builder->offset;
|
uint32_t *p, size = builder->state.offset;
|
||||||
struct buffer *buf = &impl->out;
|
struct buffer *buf = &impl->out;
|
||||||
|
|
||||||
if ((p = connection_ensure_size(conn, buf, 8 + size)) == NULL)
|
if ((p = connection_ensure_size(conn, buf, 8 + size)) == NULL)
|
||||||
|
|
|
||||||
|
|
@ -422,7 +422,7 @@ param_filter(struct pw_link *this,
|
||||||
for (oidx = 0;;) {
|
for (oidx = 0;;) {
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
|
|
||||||
offset = result->offset;
|
offset = result->state.offset;
|
||||||
|
|
||||||
pw_log_debug("oparam %d %d", oidx, offset);
|
pw_log_debug("oparam %d %d", oidx, offset);
|
||||||
if (spa_node_port_enum_params(out_port->node->node, out_port->direction,
|
if (spa_node_port_enum_params(out_port->node->node, out_port->direction,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue