aboutsummaryrefslogtreecommitdiffstats
path: root/src/worker.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/worker.h')
-rw-r--r--src/worker.h35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/worker.h b/src/worker.h
index e3adeec..606278f 100644
--- a/src/worker.h
+++ b/src/worker.h
@@ -1,14 +1,39 @@
-// Copyright 2007-2016 David Robillard <d@drobilla.net>
+// Copyright 2007-2022 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "jalv_internal.h"
+#ifndef JALV_WORKER_H
+#define JALV_WORKER_H
+
+#include "zix/ring.h"
+#include "zix/sem.h"
+#include "zix/thread.h"
#include "lilv/lilv.h"
+#include "lv2/core/lv2.h"
#include "lv2/worker/worker.h"
#include <stdbool.h>
#include <stdint.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Worker for running non-realtime tasks for plugins
+
+typedef struct {
+ ZixRing* requests; ///< Requests to the worker
+ ZixRing* responses; ///< Responses from the worker
+ void* response; ///< Worker response buffer
+ ZixSem* lock; ///< Lock for plugin work() method
+ bool* exit; ///< Pointer to exit flag
+ ZixSem sem; ///< Worker semaphore
+ ZixThread thread; ///< Worker thread
+ LV2_Handle handle; ///< Plugin handle
+ const LV2_Worker_Interface* iface; ///< Plugin worker interface
+ bool threaded; ///< Run work in another thread
+} JalvWorker;
+
void
jalv_worker_init(JalvWorker* worker,
const LV2_Worker_Interface* iface,
@@ -27,3 +52,9 @@ jalv_worker_schedule(LV2_Worker_Schedule_Handle handle,
void
jalv_worker_emit_responses(JalvWorker* worker, LilvInstance* instance);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // JALV_WORKER_H