Only add to ringbuffer if feedback stream is active

This commit is contained in:
Frank Krick 2025-08-28 18:41:30 -04:00
parent 2f36f4009a
commit 2f7d2a6668

View file

@ -2060,31 +2060,33 @@ static void graph_props_changed(void *object, enum spa_direction direction)
pw_stream_update_params(impl->capture, params, 1); pw_stream_update_params(impl->capture, params, 1);
fprintf(stdout, "graph props changed\n"); if (impl->feedback_stream_active) {
uint32_t index; fprintf(stdout, "graph props changed\n");
const uint32_t available = impl->feedback_ringbuffer_size uint32_t index;
- spa_ringbuffer_get_write_index(&impl->feedback_ringbuffer, &index); int32_t write_index_return = spa_ringbuffer_get_write_index(&impl->feedback_ringbuffer, &index);
const uint64_t pod_length = SPA_POD_SIZE(params[0]); const uint32_t available = impl->feedback_ringbuffer_size - write_index_return;
const uint64_t full_length = pod_length + sizeof(uint64_t); const uint64_t pod_length = SPA_POD_SIZE(params[0]);
if (available >= full_length) { const uint64_t full_length = pod_length + sizeof(uint64_t);
fprintf(stdout, "writing to buffer\n"); if (available >= full_length) {
fprintf(stdout, "writing data, pod length: %lu\nindex: %u\n", fprintf(stdout, "writing to buffer\n");
pod_length, index); fprintf(stdout, "writing data, pod length: %lu\nindex: %u\n",
pod_length, index);
spa_ringbuffer_write_data(&impl->feedback_ringbuffer, spa_ringbuffer_write_data(&impl->feedback_ringbuffer,
impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size, impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size,
index % impl->feedback_ringbuffer_size, &pod_length, index % impl->feedback_ringbuffer_size, &pod_length,
sizeof(uint64_t)); sizeof(uint64_t));
spa_ringbuffer_write_data(&impl->feedback_ringbuffer, spa_ringbuffer_write_data(&impl->feedback_ringbuffer,
impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size, impl->feedback_ringbuffer_data, impl->feedback_ringbuffer_size,
(index + sizeof(uint64_t)) % impl->feedback_ringbuffer_size, params[0], (index + sizeof(uint64_t)) % impl->feedback_ringbuffer_size, params[0],
SPA_POD_SIZE(params[0])); SPA_POD_SIZE(params[0]));
spa_ringbuffer_write_update(&impl->feedback_ringbuffer, spa_ringbuffer_write_update(&impl->feedback_ringbuffer,
index + sizeof(uint64_t) + SPA_POD_SIZE(params[0])); index + sizeof(uint64_t) + SPA_POD_SIZE(params[0]));
} else { } else {
fprintf(stdout, "not enough space in ringbuffer\n"); 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); spa_pod_dynamic_builder_clean(&b);