2026-05-25 13:50:49 +05:30
|
|
|
#ifndef PLUGINS_H
|
|
|
|
|
#define PLUGINS_H
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
void (*process)(uint8_t *gray, int w, int h, void *ctx);
|
|
|
|
|
const char *name;
|
|
|
|
|
} filter_plugin_t;
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
void *dl_handle; // handle from dlopen
|
|
|
|
|
filter_plugin_t *plugin; // resolved plugin vtable
|
|
|
|
|
char path[256]; // absolute path to .so
|
|
|
|
|
char tmp_path[280]; // temp copy path used for current dlopen // HACK:
|
2026-05-26 17:47:36 +05:30
|
|
|
char status_msg[128]; // last load/swap message
|
2026-05-25 13:50:49 +05:30
|
|
|
int inotify_fd; // inotify instance fd
|
|
|
|
|
int inotify_wd; // watch descriptor
|
|
|
|
|
} plugin_loader_t;
|
|
|
|
|
|
|
|
|
|
int plugin_load (plugin_loader_t *pl, const char *path);
|
|
|
|
|
void plugin_watch_init (plugin_loader_t *pl, const char *path);
|
|
|
|
|
void plugin_check_reload(plugin_loader_t *pl);
|
|
|
|
|
void plugin_cleanup (plugin_loader_t *pl);
|
|
|
|
|
|
|
|
|
|
#endif
|