aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-08-10 18:39:13 -0400
committerDavid Robillard <d@drobilla.net>2022-08-17 13:51:20 -0400
commit5043403cd31d6cc92777a90582b7520945eef1e9 (patch)
tree65370d5580d28da123602339c19b78d2e72c5607 /src
parent07441cc2e624ff5d0b81fba102fee648110e16a4 (diff)
downloadjalv-5043403cd31d6cc92777a90582b7520945eef1e9.tar.gz
jalv-5043403cd31d6cc92777a90582b7520945eef1e9.tar.bz2
jalv-5043403cd31d6cc92777a90582b7520945eef1e9.zip
Factor feature initialization out of jalv_open()
Diffstat (limited to 'src')
-rw-r--r--src/jalv.c195
1 files changed, 104 insertions, 91 deletions
diff --git a/src/jalv.c b/src/jalv.c
index 5c61004..44d10e8 100644
--- a/src/jalv.c
+++ b/src/jalv.c
@@ -977,6 +977,105 @@ jalv_init_env(SerdEnv* const env)
env, (const uint8_t*)"xsd", (const uint8_t*)NS_XSD);
}
+static void
+jalv_init_features(Jalv* const jalv)
+{
+ // urid:map
+ jalv->map.handle = jalv;
+ jalv->map.map = map_uri;
+ init_feature(&jalv->features.map_feature, LV2_URID__map, &jalv->map);
+
+ // urid:unmap
+ jalv->unmap.handle = jalv;
+ jalv->unmap.unmap = unmap_uri;
+ init_feature(&jalv->features.unmap_feature, LV2_URID__unmap, &jalv->unmap);
+
+ // state:makePath
+ jalv->features.make_path.handle = jalv;
+ jalv->features.make_path.path = jalv_make_path;
+ init_feature(&jalv->features.make_path_feature,
+ LV2_STATE__makePath,
+ &jalv->features.make_path);
+
+ // worker:schedule (normal)
+ jalv->features.sched.schedule_work = jalv_worker_schedule;
+ init_feature(
+ &jalv->features.sched_feature, LV2_WORKER__schedule, &jalv->features.sched);
+
+ // worker:schedule (state)
+ jalv->features.ssched.schedule_work = jalv_worker_schedule;
+ init_feature(&jalv->features.state_sched_feature,
+ LV2_WORKER__schedule,
+ &jalv->features.ssched);
+
+ // log:log
+ jalv->features.llog.handle = &jalv->log;
+ jalv->features.llog.printf = jalv_printf;
+ jalv->features.llog.vprintf = jalv_vprintf;
+ init_feature(&jalv->features.log_feature, LV2_LOG__log, &jalv->features.llog);
+
+ // (options:options is initialized later by jalv_init_options())
+
+ // state:threadSafeRestore
+ init_feature(
+ &jalv->features.safe_restore_feature, LV2_STATE__threadSafeRestore, NULL);
+
+ // ui:requestValue
+ jalv->features.request_value.handle = jalv;
+ init_feature(&jalv->features.request_value_feature,
+ LV2_UI__requestValue,
+ &jalv->features.request_value);
+}
+
+static void
+jalv_init_options(Jalv* const jalv)
+{
+ const LV2_Options_Option options[ARRAY_SIZE(jalv->features.options)] = {
+ {LV2_OPTIONS_INSTANCE,
+ 0,
+ jalv->urids.param_sampleRate,
+ sizeof(float),
+ jalv->urids.atom_Float,
+ &jalv->sample_rate},
+ {LV2_OPTIONS_INSTANCE,
+ 0,
+ jalv->urids.bufsz_minBlockLength,
+ sizeof(int32_t),
+ jalv->urids.atom_Int,
+ &jalv->block_length},
+ {LV2_OPTIONS_INSTANCE,
+ 0,
+ jalv->urids.bufsz_maxBlockLength,
+ sizeof(int32_t),
+ jalv->urids.atom_Int,
+ &jalv->block_length},
+ {LV2_OPTIONS_INSTANCE,
+ 0,
+ jalv->urids.bufsz_sequenceSize,
+ sizeof(int32_t),
+ jalv->urids.atom_Int,
+ &jalv->midi_buf_size},
+ {LV2_OPTIONS_INSTANCE,
+ 0,
+ jalv->urids.ui_updateRate,
+ sizeof(float),
+ jalv->urids.atom_Float,
+ &jalv->ui_update_hz},
+ {LV2_OPTIONS_INSTANCE,
+ 0,
+ jalv->urids.ui_scaleFactor,
+ sizeof(float),
+ jalv->urids.atom_Float,
+ &jalv->ui_scale_factor},
+ {LV2_OPTIONS_INSTANCE, 0, 0, 0, 0, NULL}};
+
+ memcpy(jalv->features.options, options, sizeof(jalv->features.options));
+
+ init_feature(&jalv->features.options_feature,
+ LV2_OPTIONS__options,
+ (void*)jalv->features.options);
+}
+
int
jalv_open(Jalv* const jalv, int* argc, char*** argv)
{
@@ -991,16 +1090,17 @@ jalv_open(Jalv* const jalv, int* argc, char*** argv)
#endif
// Parse command-line arguments
- const int ret = jalv_frontend_init(argc, argv, &jalv->opts);
- if (ret) {
+ int ret = 0;
+ if ((ret = jalv_frontend_init(argc, argv, &jalv->opts))) {
jalv_close(jalv);
return ret;
}
- jalv->env = serd_env_new(NULL);
jalv->symap = symap_new();
jalv_init_urids(jalv->symap, &jalv->urids);
+ jalv_init_env(jalv->env);
+ jalv_init_features(jalv);
jalv->log.urids = &jalv->urids;
jalv->log.tracing = jalv->opts.trace;
@@ -1008,18 +1108,7 @@ jalv_open(Jalv* const jalv, int* argc, char*** argv)
zix_sem_init(&jalv->symap_lock, 1);
zix_sem_init(&jalv->work_lock, 1);
- // urid:map
- jalv->map.handle = jalv;
- jalv->map.map = map_uri;
- init_feature(&jalv->features.map_feature, LV2_URID__map, &jalv->map);
-
- // urid:unmap
- jalv->unmap.handle = jalv;
- jalv->unmap.unmap = unmap_uri;
- init_feature(&jalv->features.unmap_feature, LV2_URID__unmap, &jalv->unmap);
-
lv2_atom_forge_init(&jalv->forge, &jalv->map);
- jalv_init_env(jalv->env);
jalv->sratom = sratom_new(&jalv->map);
jalv->ui_sratom = sratom_new(&jalv->map);
@@ -1036,36 +1125,6 @@ jalv_open(Jalv* const jalv, int* argc, char*** argv)
free(templ);
#endif
- // state:makePath
- jalv->features.make_path.handle = jalv;
- jalv->features.make_path.path = jalv_make_path;
- init_feature(&jalv->features.make_path_feature,
- LV2_STATE__makePath,
- &jalv->features.make_path);
-
- // worker:schedule (normal)
- jalv->features.sched.schedule_work = jalv_worker_schedule;
- init_feature(
- &jalv->features.sched_feature, LV2_WORKER__schedule, &jalv->features.sched);
-
- // worker:schedule (state)
- jalv->features.ssched.schedule_work = jalv_worker_schedule;
- init_feature(&jalv->features.state_sched_feature,
- LV2_WORKER__schedule,
- &jalv->features.ssched);
-
- // log:log
- jalv->features.llog.handle = &jalv->log;
- jalv->features.llog.printf = jalv_printf;
- jalv->features.llog.vprintf = jalv_vprintf;
- init_feature(&jalv->features.log_feature, LV2_LOG__log, &jalv->features.llog);
-
- // ui:requestValue
- jalv->features.request_value.handle = jalv;
- init_feature(&jalv->features.request_value_feature,
- LV2_UI__requestValue,
- &jalv->features.request_value);
-
zix_sem_init(&jalv->done, 0);
zix_sem_init(&jalv->paused, 0);
@@ -1236,53 +1295,7 @@ jalv_open(Jalv* const jalv, int* argc, char*** argv)
jalv_log(JALV_LOG_INFO, "Update rate: %.01f Hz\n", jalv->ui_update_hz);
jalv_log(JALV_LOG_INFO, "Scale factor: %.01f\n", jalv->ui_scale_factor);
- // Build options array to pass to plugin
- const LV2_Options_Option options[ARRAY_SIZE(jalv->features.options)] = {
- {LV2_OPTIONS_INSTANCE,
- 0,
- jalv->urids.param_sampleRate,
- sizeof(float),
- jalv->urids.atom_Float,
- &jalv->sample_rate},
- {LV2_OPTIONS_INSTANCE,
- 0,
- jalv->urids.bufsz_minBlockLength,
- sizeof(int32_t),
- jalv->urids.atom_Int,
- &jalv->block_length},
- {LV2_OPTIONS_INSTANCE,
- 0,
- jalv->urids.bufsz_maxBlockLength,
- sizeof(int32_t),
- jalv->urids.atom_Int,
- &jalv->block_length},
- {LV2_OPTIONS_INSTANCE,
- 0,
- jalv->urids.bufsz_sequenceSize,
- sizeof(int32_t),
- jalv->urids.atom_Int,
- &jalv->midi_buf_size},
- {LV2_OPTIONS_INSTANCE,
- 0,
- jalv->urids.ui_updateRate,
- sizeof(float),
- jalv->urids.atom_Float,
- &jalv->ui_update_hz},
- {LV2_OPTIONS_INSTANCE,
- 0,
- jalv->urids.ui_scaleFactor,
- sizeof(float),
- jalv->urids.atom_Float,
- &jalv->ui_scale_factor},
- {LV2_OPTIONS_INSTANCE, 0, 0, 0, 0, NULL}};
- memcpy(jalv->features.options, options, sizeof(jalv->features.options));
-
- init_feature(&jalv->features.options_feature,
- LV2_OPTIONS__options,
- (void*)jalv->features.options);
-
- init_feature(
- &jalv->features.safe_restore_feature, LV2_STATE__threadSafeRestore, NULL);
+ jalv_init_options(jalv);
// Create Plugin <=> UI communication buffers
jalv->ui_to_plugin = zix_ring_new(NULL, jalv->opts.buffer_size);