link: fix param enumeration

When the input port param enumeration has no result, use the NULL
filter to still enumerate the output port parameters instead of
returning nothing.
Fix the offset in the gst element.
This commit is contained in:
Wim Taymans 2017-11-24 16:45:54 +01:00
parent 263a017c4b
commit e2c49199f6
2 changed files with 13 additions and 3 deletions

View file

@ -467,6 +467,7 @@ on_new_buffer (void *_data,
GstMemory *mem = gst_buffer_peek_memory (buf, i); GstMemory *mem = gst_buffer_peek_memory (buf, i);
mem->offset = SPA_MIN(d->chunk->offset, d->maxsize); mem->offset = SPA_MIN(d->chunk->offset, d->maxsize);
mem->size = SPA_MIN(d->chunk->size, d->maxsize - mem->offset); mem->size = SPA_MIN(d->chunk->size, d->maxsize - mem->offset);
mem->offset += data->offset;
} }
if (pwsrc->always_copy) if (pwsrc->always_copy)

View file

@ -464,15 +464,22 @@ param_filter(struct pw_link *this,
struct spa_pod_builder ib = { 0 }; struct spa_pod_builder ib = { 0 };
struct spa_pod *oparam, *iparam; struct spa_pod *oparam, *iparam;
uint32_t iidx, oidx, num = 0; uint32_t iidx, oidx, num = 0;
int res;
for (iidx = 0;;) { for (iidx = 0;;) {
spa_pod_builder_init(&ib, ibuf, sizeof(ibuf)); spa_pod_builder_init(&ib, ibuf, sizeof(ibuf));
pw_log_debug("iparam %d", iidx); pw_log_debug("iparam %d", iidx);
if (spa_node_port_enum_params(in_port->node->node, in_port->direction, in_port->port_id, if ((res = spa_node_port_enum_params(in_port->node->node,
id, &iidx, NULL, &iparam, &ib) <= 0) in_port->direction, in_port->port_id,
id, &iidx, NULL, &iparam, &ib)) < 0)
break; break;
if (pw_log_level_enabled(SPA_LOG_LEVEL_DEBUG)) if (res == 0 && num > 0)
break;
else
iparam = NULL;
if (pw_log_level_enabled(SPA_LOG_LEVEL_DEBUG) && iparam != NULL)
spa_debug_pod(iparam, 0); spa_debug_pod(iparam, 0);
for (oidx = 0;;) { for (oidx = 0;;) {
@ -488,6 +495,8 @@ param_filter(struct pw_link *this,
num++; num++;
} }
if (iparam == NULL && num == 0)
break;
} }
return num; return num;
} }