From 5043403cd31d6cc92777a90582b7520945eef1e9 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 10 Aug 2022 18:39:13 -0400 Subject: Factor feature initialization out of jalv_open() --- src/jalv.c | 195 ++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 104 insertions(+), 91 deletions(-) (limited to 'src') 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); -- cgit v1.2.1