diff options
Diffstat (limited to 'src/worker.h')
-rw-r--r-- | src/worker.h | 35 |
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 |