diff options
-rw-r--r-- | src/gst/gstpipewiresrc.c | 1 | ||||
-rw-r--r-- | src/pipewire/link.c | 15 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/gst/gstpipewiresrc.c b/src/gst/gstpipewiresrc.c index f65878b6..16f74848 100644 --- a/src/gst/gstpipewiresrc.c +++ b/src/gst/gstpipewiresrc.c @@ -467,6 +467,7 @@ on_new_buffer (void *_data, GstMemory *mem = gst_buffer_peek_memory (buf, i); mem->offset = SPA_MIN(d->chunk->offset, d->maxsize); mem->size = SPA_MIN(d->chunk->size, d->maxsize - mem->offset); + mem->offset += data->offset; } if (pwsrc->always_copy) diff --git a/src/pipewire/link.c b/src/pipewire/link.c index 1f7b7802..0843089a 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -464,15 +464,22 @@ param_filter(struct pw_link *this, struct spa_pod_builder ib = { 0 }; struct spa_pod *oparam, *iparam; uint32_t iidx, oidx, num = 0; + int res; for (iidx = 0;;) { spa_pod_builder_init(&ib, ibuf, sizeof(ibuf)); pw_log_debug("iparam %d", iidx); - if (spa_node_port_enum_params(in_port->node->node, in_port->direction, in_port->port_id, - id, &iidx, NULL, &iparam, &ib) <= 0) + if ((res = spa_node_port_enum_params(in_port->node->node, + in_port->direction, in_port->port_id, + id, &iidx, NULL, &iparam, &ib)) < 0) 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); for (oidx = 0;;) { @@ -488,6 +495,8 @@ param_filter(struct pw_link *this, num++; } + if (iparam == NULL && num == 0) + break; } return num; } |