aboutsummaryrefslogtreecommitdiffstats
path: root/src/jalv.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2024-11-15 21:40:19 -0500
committerDavid Robillard <d@drobilla.net>2024-11-24 19:01:32 -0500
commit20b20156cfdc62dc87e258e25d12d0011c7d6e91 (patch)
tree5adee3f35b141bd3299b42204adc8e0f16b8452f /src/jalv.c
parent5f6531ef7edfef8b2056f5a6010603f00f210475 (diff)
downloadjalv-20b20156cfdc62dc87e258e25d12d0011c7d6e91.tar.gz
jalv-20b20156cfdc62dc87e258e25d12d0011c7d6e91.tar.bz2
jalv-20b20156cfdc62dc87e258e25d12d0011c7d6e91.zip
Move process thread code to a separate file
Diffstat (limited to 'src/jalv.c')
-rw-r--r--src/jalv.c85
1 files changed, 4 insertions, 81 deletions
diff --git a/src/jalv.c b/src/jalv.c
index beb36ca..1b80dcd 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -53,7 +53,6 @@
# include "suil/suil.h"
#endif
-#include <assert.h>
#include <math.h>
#include <signal.h>
#include <stdbool.h>
@@ -562,62 +561,6 @@ jalv_ui_is_resizable(Jalv* jalv)
return !fs_matches && !nrs_matches;
}
-static int
-ring_error(const char* const message)
-{
- jalv_log(JALV_LOG_ERR, "%s", message);
- return 1;
-}
-
-static int
-jalv_apply_ui_events(Jalv* jalv, uint32_t nframes)
-{
- if (!jalv->has_ui) {
- return 0;
- }
-
- ZixRing* const ring = jalv->ui_to_plugin;
- JalvMessageHeader header = {NO_MESSAGE, 0U};
- const size_t space = zix_ring_read_space(ring);
- for (size_t i = 0; i < space; i += sizeof(header) + header.size) {
- // Read message header (which includes the body size)
- if (zix_ring_read(ring, &header, sizeof(header)) != sizeof(header)) {
- return ring_error("Failed to read header from UI ring\n");
- }
-
- if (header.type == CONTROL_PORT_CHANGE) {
- assert(header.size == sizeof(JalvControlChange));
- JalvControlChange msg = {0U, 0.0f};
- if (zix_ring_read(ring, &msg, sizeof(msg)) != sizeof(msg)) {
- return ring_error("Failed to read control value from UI ring\n");
- }
-
- assert(msg.port_index < jalv->num_ports);
- jalv->ports[msg.port_index].control = msg.value;
-
- } else if (header.type == EVENT_TRANSFER) {
- assert(header.size <= jalv->msg_buf_size);
- void* const body = jalv->audio_msg;
- if (zix_ring_read(ring, body, header.size) != header.size) {
- return ring_error("Failed to read event from UI ring\n");
- }
-
- const JalvEventTransfer* const msg = (const JalvEventTransfer*)body;
- assert(msg->port_index < jalv->num_ports);
- struct Port* const port = &jalv->ports[msg->port_index];
- LV2_Evbuf_Iterator e = lv2_evbuf_end(port->evbuf);
- const LV2_Atom* const atom = &msg->atom;
- lv2_evbuf_write(
- &e, nframes, 0, atom->type, atom->size, LV2_ATOM_BODY_CONST(atom));
-
- } else {
- return ring_error("Unknown message type received from UI ring\n");
- }
- }
-
- return 0;
-}
-
void
jalv_init_ui(Jalv* jalv)
{
@@ -671,31 +614,11 @@ jalv_dump_atom(Jalv* const jalv,
}
}
-bool
-jalv_run(Jalv* jalv, uint32_t nframes)
+static int
+ring_error(const char* const message)
{
- // Read and apply control change events from UI
- jalv_apply_ui_events(jalv, nframes);
-
- // Run plugin for this cycle
- lilv_instance_run(jalv->instance, nframes);
-
- // Process any worker replies and end the cycle
- LV2_Handle handle = lilv_instance_get_handle(jalv->instance);
- jalv_worker_emit_responses(jalv->state_worker, handle);
- jalv_worker_emit_responses(jalv->worker, handle);
- jalv_worker_end_run(jalv->worker);
-
- // Check if it's time to send updates to the UI
- jalv->event_delta_t += nframes;
- bool send_ui_updates = false;
- uint32_t update_frames = (uint32_t)(jalv->sample_rate / jalv->ui_update_hz);
- if (jalv->has_ui && (jalv->event_delta_t > update_frames)) {
- send_ui_updates = true;
- jalv->event_delta_t = 0;
- }
-
- return send_ui_updates;
+ jalv_log(JALV_LOG_ERR, "%s", message);
+ return 1;
}
int