diff --git a/components/bl00mbox/bl00mbox_user.c b/components/bl00mbox/bl00mbox_user.c index 3c31abad16e7f5f277c92d68fb1ea5cd5b8e4524..db84045d04815d50121f16d490feab915416eb99 100644 --- a/components/bl00mbox/bl00mbox_user.c +++ b/components/bl00mbox/bl00mbox_user.c @@ -705,6 +705,9 @@ int16_t bl00mbox_channel_bud_get_signal_value(uint8_t channel, uint32_t bud_inde radspa_signal_t * sig = radspa_signal_get_by_index(bud->plugin, bud_signal_index); if(sig == NULL) return false; + if((sig->hints & RADSPA_SIGNAL_HINT_OUTPUT) && (sig->buffer != NULL)){ + return sig->buffer[0]; + } return sig->value; } diff --git a/components/bl00mbox/radspa/radspa_helpers.c b/components/bl00mbox/radspa/radspa_helpers.c index f34cc3443ce1b3f32048a3e309ce874e15565573..a3c1a17995712f7c5d3af8d8b7272e1249469356 100644 --- a/components/bl00mbox/radspa/radspa_helpers.c +++ b/components/bl00mbox/radspa/radspa_helpers.c @@ -98,22 +98,41 @@ int16_t radspa_signal_add(radspa_t * plugin, char * name, uint32_t hints, int16_ } int16_t radspa_signal_get_value(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id){ - if(sig->buffer != NULL){ - if(sig->render_pass_id != render_pass_id){ - radspa_host_request_buffer_render(sig->buffer, num_samples); //, render_pass_id); - sig->render_pass_id = render_pass_id; - } - return sig->buffer[index]; + if(sig->buffer == NULL){ + return radspa_signal_get_value_disconnected(sig, index, num_samples, render_pass_id); + } else { + return radspa_signal_get_value_connected(sig, index, num_samples, render_pass_id); } +} + +inline int16_t radspa_signal_get_value_connected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id){ + if(sig->render_pass_id != render_pass_id){ + radspa_host_request_buffer_render(sig->buffer, num_samples); //, render_pass_id); + sig->render_pass_id = render_pass_id; + } + return sig->buffer[index]; +} + +inline int16_t radspa_signal_get_value_disconnected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id){ return sig->value; } void radspa_signal_set_value(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id){ - if(!index) sig->value = value; - if(sig->buffer == NULL) return; + if(sig->buffer == NULL){ + radspa_signal_set_value_disconnected(sig, index, value, num_samples, render_pass_id); + } else { + radspa_signal_set_value_connected(sig, index, value, num_samples, render_pass_id); + } +} + +inline void radspa_signal_set_value_connected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id){ sig->buffer[index] = value; } +inline void radspa_signal_set_value_disconnected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id){ + sig->value = value; +} + radspa_t * radspa_standard_plugin_create(radspa_descriptor_t * desc, uint8_t num_signals, size_t plugin_data_size, uint32_t plugin_table_size){ radspa_t * ret = calloc(1, sizeof(radspa_t)); if(ret == NULL) return NULL; diff --git a/components/bl00mbox/radspa/radspa_helpers.h b/components/bl00mbox/radspa/radspa_helpers.h index 6a46ce7fc259fd417bf2c0cda8a2e63ded538db4..29f1ebf97f6fac29743db469d5d82432a0a3e1b7 100644 --- a/components/bl00mbox/radspa/radspa_helpers.h +++ b/components/bl00mbox/radspa/radspa_helpers.h @@ -29,4 +29,9 @@ void radspa_signals_free(radspa_t * plugin); */ int16_t radspa_signal_get_value(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id); +int16_t radspa_signal_get_value_connected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id); +int16_t radspa_signal_get_value_disconnected(radspa_signal_t * sig, int16_t index, uint16_t num_samples, uint32_t render_pass_id); + void radspa_signal_set_value(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id); +void radspa_signal_set_value_connected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id); +void radspa_signal_set_value_disconnected(radspa_signal_t * sig, int16_t index, int16_t value, uint16_t num_samples, uint32_t render_pass_id);