From 2f7d2a6668602415898b2aa5d1bc339adf8faf1a Mon Sep 17 00:00:00 2001 From: Frank Krick Date: Thu, 28 Aug 2025 18:41:30 -0400 Subject: [PATCH] Only add to ringbuffer if feedback stream is active --- src/modules/module-filter-chain.c | 46 ++++++++++++++++--------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/modules/module-filter-chain.c b/src/modules/module-filter-chain.c index 27efc4c52..2f7f4b4c1 100644 --- a/src/modules/module-filter-chain.c +++ b/src/modules/module-filter-chain.c @@ -2060,31 +2060,33 @@ static void graph_props_changed(void *object, enum spa_direction direction) pw_stream_update_params(impl->capture, params, 1); - fprintf(stdout, "graph props changed\n"); - uint32_t index; - const uint32_t available = impl->feedback_ringbuffer_size - - spa_ringbuffer_get_write_index(&impl->feedback_ringbuffer, &index); - const uint64_t pod_length = SPA_POD_SIZE(params[0]); - const uint64_t full_length = pod_length + sizeof(uint64_t); - if (available >= full_length) { - fprintf(stdout, "writing to buffer\n"); - fprintf(stdout, "writing data, pod length: %lu\nindex: %u\n", - pod_length, index); + if (impl->feedback_stream_active) { + fprintf(stdout, "graph props changed\n"); + uint32_t index; + int32_t write_index_return = spa_ringbuffer_get_write_index(&impl->feedback_ringbuffer, &index); + const uint32_t available = impl->feedback_ringbuffer_size - write_index_return; + const uint64_t pod_length = SPA_POD_SIZE(params[0]); + const uint64_t full_length = pod_length + sizeof(uint64_t); + if (available >= full_length) { + fprintf(stdout, "writing to buffer\n"); + fprintf(stdout, "writing data, pod length: %lu\nindex: %u\n", + pod_length, index); - spa_ringbuffer_write_data(&impl->feedback_ringbuffer, - impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size, - index % impl->feedback_ringbuffer_size, &pod_length, - sizeof(uint64_t)); + spa_ringbuffer_write_data(&impl->feedback_ringbuffer, + impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size, + index % impl->feedback_ringbuffer_size, &pod_length, + sizeof(uint64_t)); - spa_ringbuffer_write_data(&impl->feedback_ringbuffer, - impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size, - (index + sizeof(uint64_t)) % impl->feedback_ringbuffer_size, params[0], - SPA_POD_SIZE(params[0])); + spa_ringbuffer_write_data(&impl->feedback_ringbuffer, + impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size, + (index + sizeof(uint64_t)) % impl->feedback_ringbuffer_size, params[0], + SPA_POD_SIZE(params[0])); - spa_ringbuffer_write_update(&impl->feedback_ringbuffer, - index + sizeof(uint64_t) + SPA_POD_SIZE(params[0])); - } else { - fprintf(stdout, "not enough space in ringbuffer\n"); + spa_ringbuffer_write_update(&impl->feedback_ringbuffer, + index + sizeof(uint64_t) + SPA_POD_SIZE(params[0])); + } else { + fprintf(stdout, "not enough space in ringbuffer, available: %u, required: %lu, write index return: %i, buffer size: %u\n", available, full_length, write_index_return, impl->feedback_ringbuffer_size); + } } spa_pod_dynamic_builder_clean(&b);