From 22d87d7545ba88e7659785ce7168269adf437116 Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Thu, 9 Jul 2026 07:51:35 -0500 Subject: [PATCH 1/6] Report duplicate service registration Currenly this only reports but does not stop the duplicate registration - which overwrites the previous registration. Maybe someday in the future we will skip the duplicate registration instead. --- src/framework/mlt_repository.c | 61 +++++++++++++++++----------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/src/framework/mlt_repository.c b/src/framework/mlt_repository.c index 482a9ebbf..fdfabb4aa 100644 --- a/src/framework/mlt_repository.c +++ b/src/framework/mlt_repository.c @@ -230,52 +230,51 @@ void mlt_repository_register(mlt_repository self, const char *service, mlt_register_callback symbol) { + mlt_properties service_list = NULL; + const char *service_type_name = "unknown"; + // Add the entry point to the corresponding service list switch (service_type) { case mlt_service_consumer_type: - mlt_properties_set_data(self->consumers, - service, - new_service(symbol), - 0, - (mlt_destructor) mlt_properties_close, - NULL); + service_list = self->consumers; + service_type_name = "consumer"; break; case mlt_service_filter_type: - mlt_properties_set_data(self->filters, - service, - new_service(symbol), - 0, - (mlt_destructor) mlt_properties_close, - NULL); + service_list = self->filters; + service_type_name = "filter"; break; case mlt_service_link_type: - mlt_properties_set_data(self->links, - service, - new_service(symbol), - 0, - (mlt_destructor) mlt_properties_close, - NULL); + service_list = self->links; + service_type_name = "link"; break; case mlt_service_producer_type: - mlt_properties_set_data(self->producers, - service, - new_service(symbol), - 0, - (mlt_destructor) mlt_properties_close, - NULL); + service_list = self->producers; + service_type_name = "producer"; break; case mlt_service_transition_type: - mlt_properties_set_data(self->transitions, - service, - new_service(symbol), - 0, - (mlt_destructor) mlt_properties_close, - NULL); + service_list = self->transitions; + service_type_name = "transition"; break; default: mlt_log_error(NULL, "%s: Unable to register \"%s\"\n", __FUNCTION__, service); - break; + return; + } + + if (mlt_properties_get_data(service_list, service, NULL)) { + mlt_log_error(NULL, + "%s: Duplicate %s service registration for \"%s\" (overwriting previous " + "registration)\n", + __FUNCTION__, + service_type_name, + service); } + + mlt_properties_set_data(service_list, + service, + new_service(symbol), + 0, + (mlt_destructor) mlt_properties_close, + NULL); } /** Get the repository properties for particular service class. From 97b93b4291c404498b36db0324113614323eb5c9 Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Thu, 9 Jul 2026 07:52:50 -0500 Subject: [PATCH 2/6] Avoid duplicate registration of ladspa filters The filters were being loaded for both the ladspa and jack libraries. This changes them to only belong to the ladspa library. --- src/modules/jackrack/factory.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/modules/jackrack/factory.c b/src/modules/jackrack/factory.c index ff815737c..609dda2d7 100644 --- a/src/modules/jackrack/factory.c +++ b/src/modules/jackrack/factory.c @@ -703,6 +703,7 @@ static mlt_properties vst2_metadata(mlt_service_type type, const char *id, char JACKRACK_MODULE_EXPORT MLT_REPOSITORY { +#if defined(mltladspa_EXPORTS) #ifdef GPL GSList *list; g_jackrack_plugin_mgr = plugin_mgr_new(); @@ -783,17 +784,26 @@ JACKRACK_MODULE_EXPORT MLT_REPOSITORY #endif + MLT_REGISTER(mlt_service_filter_type, "ladspa", filter_ladspa_init); + MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); +#endif +#endif +#if defined(mltjackrack_EXPORTS) +#ifdef GPL #ifdef WITH_JACK + // JACK filter services belong to mltjackrack to avoid duplicate registration. MLT_REGISTER(mlt_service_filter_type, "jack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jack", metadata, "filter_jack.yml"); MLT_REGISTER(mlt_service_filter_type, "jackrack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jackrack", metadata, "filter_jackrack.yml"); #endif - MLT_REGISTER(mlt_service_filter_type, "ladspa", filter_ladspa_init); - MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); +#endif #endif #ifdef WITH_JACK +#if defined(mltjackrack_EXPORTS) + // JACK consumer belongs to mltjackrack to avoid duplicate registration. MLT_REGISTER(mlt_service_consumer_type, "jack", consumer_jack_init); MLT_REGISTER_METADATA(mlt_service_consumer_type, "jack", metadata, "consumer_jack.yml"); #endif +#endif } From 239e242732231095c779d56a9a1fa58a5a8da23b Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Thu, 9 Jul 2026 21:28:32 -0500 Subject: [PATCH 3/6] Resolve review comments --- src/framework/mlt_repository.c | 3 +- src/modules/jackrack/factory.c | 157 +++++++++++++++++---------------- 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/src/framework/mlt_repository.c b/src/framework/mlt_repository.c index fdfabb4aa..b82a347ad 100644 --- a/src/framework/mlt_repository.c +++ b/src/framework/mlt_repository.c @@ -262,8 +262,7 @@ void mlt_repository_register(mlt_repository self, if (mlt_properties_get_data(service_list, service, NULL)) { mlt_log_error(NULL, - "%s: Duplicate %s service registration for \"%s\" (overwriting previous " - "registration)\n", + "%s: Duplicate %s registration for \"%s\"\n", __FUNCTION__, service_type_name, service); diff --git a/src/modules/jackrack/factory.c b/src/modules/jackrack/factory.c index 609dda2d7..8c185ad50 100644 --- a/src/modules/jackrack/factory.c +++ b/src/modules/jackrack/factory.c @@ -84,7 +84,7 @@ extern mlt_producer producer_lv2_init(mlt_profile profile, char *arg); #endif -#ifdef WITH_VST2 +#if defined(GPL) && defined(WITH_VST2) #include "vestige.h" @@ -105,10 +105,11 @@ plugin_mgr_t *g_jackrack_plugin_mgr = NULL; lv2_mgr_t *g_lv2_plugin_mgr = NULL; #endif -#ifdef WITH_VST2 +#if defined(GPL) && defined(WITH_VST2) vst2_mgr_t *g_vst2_plugin_mgr = NULL; #endif +#if defined(mltladspa_EXPORTS) || (defined(mltjackrack_EXPORTS) && defined(WITH_JACK)) static void add_port_to_metadata(mlt_properties p, plugin_desc_t *desc, int j) { LADSPA_Data sample_rate = 48000; @@ -153,9 +154,12 @@ static void add_port_to_metadata(mlt_properties p, plugin_desc_t *desc, int j) mlt_properties_set(p, "mutable", "yes"); mlt_properties_set(p, "animation", "yes"); } +#endif #endif +#if (defined(mltladspa_EXPORTS) && defined(GPL)) \ + || (defined(mltjackrack_EXPORTS) && defined(WITH_JACK)) static mlt_properties metadata(mlt_service_type type, const char *id, char *data) { char file[PATH_MAX]; @@ -287,6 +291,7 @@ static mlt_properties metadata(mlt_service_type type, const char *id, char *data return result; } +#endif #ifdef WITH_LV2 @@ -507,7 +512,7 @@ static mlt_properties lv2_metadata(mlt_service_type type, const char *id, char * #endif -#ifdef WITH_VST2 +#if defined(GPL) && defined(WITH_VST2) static void vst2_add_port_to_metadata(mlt_properties p, vst2_plugin_desc_t *desc, int j) { @@ -703,107 +708,107 @@ static mlt_properties vst2_metadata(mlt_service_type type, const char *id, char JACKRACK_MODULE_EXPORT MLT_REPOSITORY { -#if defined(mltladspa_EXPORTS) -#ifdef GPL - GSList *list; - g_jackrack_plugin_mgr = plugin_mgr_new(); - - for (list = g_jackrack_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { - plugin_desc_t *desc = (plugin_desc_t *) list->data; - char *s = malloc(strlen("ladpsa.") + 21); - - sprintf(s, "ladspa.%lu", desc->id); + // Registrations owned by mltladspa. +#if defined(mltladspa_EXPORTS) && defined(GPL) + { + GSList *list; + g_jackrack_plugin_mgr = plugin_mgr_new(); + + for (list = g_jackrack_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { + plugin_desc_t *desc = (plugin_desc_t *) list->data; + char *s = malloc(strlen("ladpsa.") + 21); + + sprintf(s, "ladspa.%lu", desc->id); + + if (desc->has_input) { + MLT_REGISTER(mlt_service_filter_type, s, filter_ladspa_init); + MLT_REGISTER_METADATA(mlt_service_filter_type, s, metadata, NULL); + } else { + MLT_REGISTER(mlt_service_producer_type, s, producer_ladspa_init); + MLT_REGISTER_METADATA(mlt_service_producer_type, s, metadata, NULL); + } - if (desc->has_input) { - MLT_REGISTER(mlt_service_filter_type, s, filter_ladspa_init); - MLT_REGISTER_METADATA(mlt_service_filter_type, s, metadata, NULL); - } else { - MLT_REGISTER(mlt_service_producer_type, s, producer_ladspa_init); - MLT_REGISTER_METADATA(mlt_service_producer_type, s, metadata, NULL); + free(s); } - - free(s); + mlt_factory_register_for_clean_up(g_jackrack_plugin_mgr, + (mlt_destructor) plugin_mgr_destroy); } - mlt_factory_register_for_clean_up(g_jackrack_plugin_mgr, (mlt_destructor) plugin_mgr_destroy); +#endif -#ifdef WITH_LV2 - g_lv2_plugin_mgr = lv2_mgr_new(); +#if defined(mltladspa_EXPORTS) && defined(GPL) && defined(WITH_LV2) + { + GSList *list; + g_lv2_plugin_mgr = lv2_mgr_new(); - char global_lv2_world[20]; - snprintf(global_lv2_world, 20, "%p", g_lv2_plugin_mgr->lv2_world); - mlt_environment_set("global_lv2_world", global_lv2_world); + char global_lv2_world[20]; + snprintf(global_lv2_world, 20, "%p", g_lv2_plugin_mgr->lv2_world); + mlt_environment_set("global_lv2_world", global_lv2_world); - for (list = g_lv2_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { - lv2_plugin_desc_t *desc = (lv2_plugin_desc_t *) list->data; - char *s = NULL; - s = calloc(1, strlen("lv2.") + strlen(desc->uri) + 1); + for (list = g_lv2_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { + lv2_plugin_desc_t *desc = (lv2_plugin_desc_t *) list->data; + char *s = NULL; + s = calloc(1, strlen("lv2.") + strlen(desc->uri) + 1); - sprintf(s, "lv2.%s", desc->uri); + sprintf(s, "lv2.%s", desc->uri); - char *str_ptr = strchr(s, ':'); - while (str_ptr != NULL) { - *str_ptr++ = '^'; - str_ptr = strchr(str_ptr, ':'); - } + char *str_ptr = strchr(s, ':'); + while (str_ptr != NULL) { + *str_ptr++ = '^'; + str_ptr = strchr(str_ptr, ':'); + } - if (desc->has_input) { - MLT_REGISTER(mlt_service_filter_type, s, filter_lv2_init); - MLT_REGISTER_METADATA(mlt_service_filter_type, s, lv2_metadata, NULL); - } else { - MLT_REGISTER(mlt_service_producer_type, s, producer_lv2_init); - MLT_REGISTER_METADATA(mlt_service_producer_type, s, lv2_metadata, NULL); - } + if (desc->has_input) { + MLT_REGISTER(mlt_service_filter_type, s, filter_lv2_init); + MLT_REGISTER_METADATA(mlt_service_filter_type, s, lv2_metadata, NULL); + } else { + MLT_REGISTER(mlt_service_producer_type, s, producer_lv2_init); + MLT_REGISTER_METADATA(mlt_service_producer_type, s, lv2_metadata, NULL); + } - if (s) { - free(s); + if (s) { + free(s); + } } } #endif -#ifdef WITH_VST2 +#if defined(mltladspa_EXPORTS) && defined(GPL) && defined(WITH_VST2) + { + GSList *list; + g_vst2_plugin_mgr = vst2_mgr_new(); - g_vst2_plugin_mgr = vst2_mgr_new(); + for (list = g_vst2_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { + vst2_plugin_desc_t *desc = (vst2_plugin_desc_t *) list->data; + char *s = malloc(strlen("vst2.") + 21); - for (list = g_vst2_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { - vst2_plugin_desc_t *desc = (vst2_plugin_desc_t *) list->data; - char *s = malloc(strlen("vst2.") + 21); + sprintf(s, "vst2.%lu", desc->id); - sprintf(s, "vst2.%lu", desc->id); + if (desc->has_input) { + MLT_REGISTER(mlt_service_filter_type, s, filter_vst2_init); + MLT_REGISTER_METADATA(mlt_service_filter_type, s, vst2_metadata, NULL); + } else { + MLT_REGISTER(mlt_service_producer_type, s, producer_vst2_init); + MLT_REGISTER_METADATA(mlt_service_producer_type, s, vst2_metadata, NULL); + } - if (desc->has_input) { - MLT_REGISTER(mlt_service_filter_type, s, filter_vst2_init); - MLT_REGISTER_METADATA(mlt_service_filter_type, s, vst2_metadata, NULL); - } else { - MLT_REGISTER(mlt_service_producer_type, s, producer_vst2_init); - MLT_REGISTER_METADATA(mlt_service_producer_type, s, vst2_metadata, NULL); + free(s); } - - free(s); + mlt_factory_register_for_clean_up(g_vst2_plugin_mgr, (mlt_destructor) vst2_mgr_destroy); } - mlt_factory_register_for_clean_up(g_vst2_plugin_mgr, (mlt_destructor) vst2_mgr_destroy); - #endif - MLT_REGISTER(mlt_service_filter_type, "ladspa", filter_ladspa_init); - MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); -#endif -#endif -#if defined(mltjackrack_EXPORTS) -#ifdef GPL -#ifdef WITH_JACK - // JACK filter services belong to mltjackrack to avoid duplicate registration. + // Registrations owned by mltjackrack. +#if defined(mltjackrack_EXPORTS) && defined(GPL) && defined(WITH_JACK) MLT_REGISTER(mlt_service_filter_type, "jack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jack", metadata, "filter_jack.yml"); MLT_REGISTER(mlt_service_filter_type, "jackrack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jackrack", metadata, "filter_jackrack.yml"); + MLT_REGISTER(mlt_service_filter_type, "ladspa", filter_ladspa_init); + MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); #endif -#endif -#endif -#ifdef WITH_JACK -#if defined(mltjackrack_EXPORTS) - // JACK consumer belongs to mltjackrack to avoid duplicate registration. + +#if defined(mltjackrack_EXPORTS) && defined(WITH_JACK) MLT_REGISTER(mlt_service_consumer_type, "jack", consumer_jack_init); MLT_REGISTER_METADATA(mlt_service_consumer_type, "jack", metadata, "consumer_jack.yml"); #endif -#endif } From b138440f2a26e446418963ea16a58d07671b6497 Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Fri, 10 Jul 2026 21:00:30 -0500 Subject: [PATCH 4/6] Build mltjackrack only when JACK is found simplify jackrack export guard --- src/modules/jackrack/CMakeLists.txt | 78 ++++++++++++++--------------- src/modules/jackrack/factory.c | 11 ++-- 2 files changed, 42 insertions(+), 47 deletions(-) diff --git a/src/modules/jackrack/CMakeLists.txt b/src/modules/jackrack/CMakeLists.txt index 8ad3711eb..6795605a3 100644 --- a/src/modules/jackrack/CMakeLists.txt +++ b/src/modules/jackrack/CMakeLists.txt @@ -1,62 +1,58 @@ -add_library(mltjackrack MODULE factory.c) - file(GLOB YML "*.yml") add_custom_target(Other_jackrack_Files SOURCES ${YML} ) -include(GenerateExportHeader) -generate_export_header(mltjackrack) -target_compile_options(mltjackrack PRIVATE ${MLT_COMPILE_OPTIONS}) - -target_link_libraries(mltjackrack PRIVATE mlt Threads::Threads) -if(MSVC) - target_link_libraries(mltjackrack PRIVATE PThreads4W::PThreads4W) -endif() -target_include_directories(mltjackrack PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) if(TARGET JACK::JACK) - target_sources(mltjackrack PRIVATE consumer_jack.c) - target_link_libraries(mltjackrack PRIVATE JACK::JACK) + add_library(mltjackrack MODULE factory.c) + + include(GenerateExportHeader) + generate_export_header(mltjackrack) + target_compile_options(mltjackrack PRIVATE ${MLT_COMPILE_OPTIONS}) + + target_link_libraries(mltjackrack PRIVATE mlt Threads::Threads JACK::JACK) if(MSVC) - target_link_libraries(mltjackrack PRIVATE msvccompat) + target_link_libraries(mltjackrack PRIVATE PThreads4W::PThreads4W msvccompat) endif() + target_include_directories(mltjackrack PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + target_sources(mltjackrack PRIVATE consumer_jack.c) target_compile_definitions(mltjackrack PRIVATE WITH_JACK) install(FILES consumer_jack.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) -endif() -if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) - target_sources(mltjackrack PRIVATE - jack_rack.c jack_rack.h - lock_free_fifo.c lock_free_fifo.h - plugin.c plugin.h - plugin_desc.c plugin_desc.h - plugin_mgr.c plugin_mgr.h - plugin_settings.c plugin_settings.h - process.c process.h - producer_ladspa.c - filter_ladspa.c - ) - target_link_libraries(mltjackrack PRIVATE ${CMAKE_DL_LIBS} PkgConfig::xml PkgConfig::glib) + if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) + target_sources(mltjackrack PRIVATE + jack_rack.c jack_rack.h + lock_free_fifo.c lock_free_fifo.h + plugin.c plugin.h + plugin_desc.c plugin_desc.h + plugin_mgr.c plugin_mgr.h + plugin_settings.c plugin_settings.h + process.c process.h + producer_ladspa.c + filter_ladspa.c + ) + target_link_libraries(mltjackrack PRIVATE ${CMAKE_DL_LIBS} PkgConfig::xml PkgConfig::glib) if(MSVC) - target_link_libraries(mltjackrack PRIVATE dirent) + target_link_libraries(mltjackrack PRIVATE dirent) else() - target_link_libraries(mltjackrack PRIVATE m) + target_link_libraries(mltjackrack PRIVATE m) endif() - target_compile_definitions(mltjackrack PRIVATE GPL) - if(RELOCATABLE) - target_compile_definitions(mltjackrack PRIVATE RELOCATABLE) - endif() + target_compile_definitions(mltjackrack PRIVATE GPL) + if(RELOCATABLE) + target_compile_definitions(mltjackrack PRIVATE RELOCATABLE) + endif() - install(FILES filter_jack.yml blacklist.txt DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) + install(FILES filter_jack.yml blacklist.txt DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) - if(TARGET JACK::JACK) target_sources(mltjackrack PRIVATE filter_jackrack.c) install(FILES filter_jackrack.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) endif() -endif() -set_target_properties(mltjackrack PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}") + set_target_properties(mltjackrack PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}") +else() + message(STATUS "JACK not found; disabling mltjackrack target") +endif() add_library(mltladspa MODULE factory.c) @@ -132,4 +128,8 @@ endif() set_target_properties(mltladspa PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}") -install(TARGETS mltjackrack mltladspa LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR}) +if(TARGET mltjackrack) + install(TARGETS mltjackrack mltladspa LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR}) +else() + install(TARGETS mltladspa LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR}) +endif() diff --git a/src/modules/jackrack/factory.c b/src/modules/jackrack/factory.c index 8c185ad50..e2ec71d21 100644 --- a/src/modules/jackrack/factory.c +++ b/src/modules/jackrack/factory.c @@ -43,7 +43,7 @@ extern mlt_consumer consumer_jack_init(mlt_profile profile, #include "plugin_mgr.h" #include -#ifdef WITH_JACK +#if defined(mltjackrack_EXPORTS) extern mlt_filter filter_jackrack_init(mlt_profile profile, mlt_service_type type, const char *id, @@ -109,7 +109,6 @@ lv2_mgr_t *g_lv2_plugin_mgr = NULL; vst2_mgr_t *g_vst2_plugin_mgr = NULL; #endif -#if defined(mltladspa_EXPORTS) || (defined(mltjackrack_EXPORTS) && defined(WITH_JACK)) static void add_port_to_metadata(mlt_properties p, plugin_desc_t *desc, int j) { LADSPA_Data sample_rate = 48000; @@ -154,12 +153,9 @@ static void add_port_to_metadata(mlt_properties p, plugin_desc_t *desc, int j) mlt_properties_set(p, "mutable", "yes"); mlt_properties_set(p, "animation", "yes"); } -#endif #endif -#if (defined(mltladspa_EXPORTS) && defined(GPL)) \ - || (defined(mltjackrack_EXPORTS) && defined(WITH_JACK)) static mlt_properties metadata(mlt_service_type type, const char *id, char *data) { char file[PATH_MAX]; @@ -291,7 +287,6 @@ static mlt_properties metadata(mlt_service_type type, const char *id, char *data return result; } -#endif #ifdef WITH_LV2 @@ -798,7 +793,7 @@ JACKRACK_MODULE_EXPORT MLT_REPOSITORY #endif // Registrations owned by mltjackrack. -#if defined(mltjackrack_EXPORTS) && defined(GPL) && defined(WITH_JACK) +#if defined(mltjackrack_EXPORTS) && defined(GPL) MLT_REGISTER(mlt_service_filter_type, "jack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jack", metadata, "filter_jack.yml"); MLT_REGISTER(mlt_service_filter_type, "jackrack", filter_jackrack_init); @@ -807,7 +802,7 @@ JACKRACK_MODULE_EXPORT MLT_REPOSITORY MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); #endif -#if defined(mltjackrack_EXPORTS) && defined(WITH_JACK) +#if defined(mltjackrack_EXPORTS) MLT_REGISTER(mlt_service_consumer_type, "jack", consumer_jack_init); MLT_REGISTER_METADATA(mlt_service_consumer_type, "jack", metadata, "consumer_jack.yml"); #endif From 56b7d670172fdd97c3f1bfa1826072ae9e904706 Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Sun, 12 Jul 2026 16:38:00 -0700 Subject: [PATCH 5/6] Refactor jackrack build and factory --- CMakeLists.txt | 39 ++++++------ src/modules/jackrack/CMakeLists.txt | 79 +++++++++--------------- src/modules/jackrack/factory.c | 95 ++++++++++++++--------------- 3 files changed, 97 insertions(+), 116 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 193f2e535..abefcc172 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,8 +26,9 @@ option(MOD_FREI0R "Enable Frei0r module" ON) option(MOD_GDK "Enable GDK module" ON) option(MOD_GLAXNIMATE_QT6 "Enable Glaxnimate module (Qt6)" OFF) option(MOD_JACKRACK "Enable JACK Rack module" ON) -option(USE_LV2 "Enable LV2 features" ON) -option(USE_VST2 "Enable LV2 features" ON) +option(USE_LADSPA "Enable LADSPA features (GPL)" ON) +option(USE_LV2 "Enable LV2 features (GPL)" ON) +option(USE_VST2 "Enable VST2 features (GPL)" ON) option(MOD_KDENLIVE "Enable Kdenlive module" ON) option(MOD_MOVIT "Enable OpenGL module" ON) option(MOD_NDI "Enable NDI module" OFF) @@ -77,6 +78,7 @@ endif() list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(CheckIncludeFile) include(FeatureSummary) include(GNUInstallDirs) @@ -122,7 +124,6 @@ endif() set(MLT_SUBDIR mlt) if(NOT (WIN32 OR APPLE)) set(MLT_SUBDIR mlt-${MLT_VERSION_MAJOR}) - set(MLT_SUBDIR mlt-${MLT_VERSION_MAJOR}) endif() set(MLT_INSTALL_MODULE_DIR ${CMAKE_INSTALL_LIBDIR}/${MLT_SUBDIR}) set(MLT_INSTALL_DATA_DIR ${CMAKE_INSTALL_DATADIR}/${MLT_SUBDIR}) @@ -266,23 +267,24 @@ endif() if(MOD_JACKRACK) find_package(JACK) - pkg_check_modules(glib IMPORTED_TARGET glib-2.0) - pkg_check_modules(xml IMPORTED_TARGET libxml-2.0) - check_include_file(ladspa.h ladspa_h_FOUND) - if(NOT ladspa_h_FOUND) - set(USE_LV2 OFF) - set(USE_VST2 OFF) + if(USE_LADSPA) + if(GPL) + pkg_check_modules(glib REQUIRED IMPORTED_TARGET glib-2.0) + pkg_check_modules(xml REQUIRED IMPORTED_TARGET libxml-2.0) + if(USE_LV2) + pkg_check_modules(lilv REQUIRED IMPORTED_TARGET lilv-0) + endif() + check_include_file(ladspa.h ladspa_h_FOUND) + if(NOT ladspa_h_FOUND) + message(FATAL_ERROR "ladspa.h not found. Install LADSPA or set USE_LADSPA=OFF.") + endif() + else() + message(FATAL_ERROR "LADSPA support requires GPL. Set GPL=ON or USE_LADSPA=OFF.") + endif() endif() list(APPEND MLT_SUPPORTED_COMPONENTS jackrack) endif() -if(USE_LV2) - pkg_check_modules(lilv IMPORTED_TARGET lilv-0) - if(NOT lilv_FOUND) - set(USE_LV2 OFF) - endif() -endif() - if(MOD_KDENLIVE) list(APPEND MLT_SUPPORTED_COMPONENTS kdenlive) endif() @@ -622,7 +624,8 @@ add_feature_info("SWIG: PHP" SWIG_PHP "") add_feature_info("SWIG: Python" SWIG_PYTHON "") add_feature_info("SWIG: Ruby" SWIG_RUBY "") add_feature_info("SWIG: Tcl" SWIG_TCL "") -add_feature_info("lv2: LV2 Plugins support" USE_LV2 "") -add_feature_info("vst2: VST2 Plugins support" USE_VST2 "") +add_feature_info("jackrack: LADSPA plugins support" USE_LADSPA "") +add_feature_info("jackrack: LV2 plugins support" USE_LV2 "") +add_feature_info("jackrack: VST2 plugins support" USE_VST2 "") feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff --git a/src/modules/jackrack/CMakeLists.txt b/src/modules/jackrack/CMakeLists.txt index 6795605a3..843179f08 100644 --- a/src/modules/jackrack/CMakeLists.txt +++ b/src/modules/jackrack/CMakeLists.txt @@ -10,17 +10,18 @@ if(TARGET JACK::JACK) generate_export_header(mltjackrack) target_compile_options(mltjackrack PRIVATE ${MLT_COMPILE_OPTIONS}) + target_sources(mltjackrack PRIVATE consumer_jack.c) + target_include_directories(mltjackrack PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + target_compile_definitions(mltjackrack PRIVATE WITH_JACK) target_link_libraries(mltjackrack PRIVATE mlt Threads::Threads JACK::JACK) if(MSVC) target_link_libraries(mltjackrack PRIVATE PThreads4W::PThreads4W msvccompat) endif() - target_include_directories(mltjackrack PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) - target_sources(mltjackrack PRIVATE consumer_jack.c) - target_compile_definitions(mltjackrack PRIVATE WITH_JACK) install(FILES consumer_jack.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) - if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) + if(USE_LADSPA) target_sources(mltjackrack PRIVATE + filter_jackrack.c jack_rack.c jack_rack.h lock_free_fifo.c lock_free_fifo.h plugin.c plugin.h @@ -31,52 +32,34 @@ if(TARGET JACK::JACK) producer_ladspa.c filter_ladspa.c ) + target_compile_definitions(mltjackrack PRIVATE WITH_LADSPA) + if(RELOCATABLE) + target_compile_definitions(mltjackrack PRIVATE RELOCATABLE) + endif() target_link_libraries(mltjackrack PRIVATE ${CMAKE_DL_LIBS} PkgConfig::xml PkgConfig::glib) - if(MSVC) + if(MSVC) target_link_libraries(mltjackrack PRIVATE dirent) - else() + else() target_link_libraries(mltjackrack PRIVATE m) - endif() - - target_compile_definitions(mltjackrack PRIVATE GPL) - if(RELOCATABLE) - target_compile_definitions(mltjackrack PRIVATE RELOCATABLE) endif() - install(FILES filter_jack.yml blacklist.txt DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) - - target_sources(mltjackrack PRIVATE filter_jackrack.c) - install(FILES filter_jackrack.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) + install(FILES filter_jack.yml filter_jackrack.yml blacklist.txt DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) endif() set_target_properties(mltjackrack PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}") + install(TARGETS mltjackrack LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR}) else() message(STATUS "JACK not found; disabling mltjackrack target") endif() -add_library(mltladspa MODULE factory.c) +if(USE_LADSPA) + add_library(mltladspa MODULE factory.c) -generate_export_header(mltladspa) -target_compile_options(mltladspa PRIVATE ${MLT_COMPILE_OPTIONS}) - -target_link_libraries(mltladspa PRIVATE mlt Threads::Threads) -if(MSVC) - target_link_libraries(mltladspa PRIVATE PThreads4W::PThreads4W) -endif() -target_include_directories(mltladspa PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) - -if(USE_LV2 AND GPL) - target_compile_definitions(mltladspa PRIVATE WITH_LV2) - install(FILES filter_lv2.yml producer_lv2.yml lv2blacklist.txt DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) -endif() - -if(USE_VST2 AND GPL) - target_compile_definitions(mltladspa PRIVATE WITH_VST2) - install(FILES filter_vst2.yml producer_vst2.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) -endif() + include(GenerateExportHeader) + generate_export_header(mltladspa) + target_compile_options(mltladspa PRIVATE ${MLT_COMPILE_OPTIONS}) -if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) target_sources(mltladspa PRIVATE jack_rack.c jack_rack.h lock_free_fifo.c lock_free_fifo.h @@ -88,21 +71,23 @@ if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) producer_ladspa.c filter_ladspa.c ) - target_link_libraries(mltladspa PRIVATE ${CMAKE_DL_LIBS} PkgConfig::xml PkgConfig::glib) + target_include_directories(mltladspa PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) + target_compile_definitions(mltladspa PRIVATE WITH_LADSPA) + if(RELOCATABLE) + target_compile_definitions(mltladspa PRIVATE RELOCATABLE) + endif() + target_link_libraries(mltladspa PRIVATE ${CMAKE_DL_LIBS} mlt PkgConfig::xml PkgConfig::glib Threads::Threads) if(MSVC) target_link_libraries(mltladspa PRIVATE dirent) + target_link_libraries(mltladspa PRIVATE PThreads4W::PThreads4W) else() target_link_libraries(mltladspa PRIVATE m) endif() - target_compile_definitions(mltladspa PRIVATE GPL) - if(RELOCATABLE) - target_compile_definitions(mltladspa PRIVATE RELOCATABLE) - endif() - install(FILES filter_ladspa.yml producer_ladspa.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) - if(USE_LV2 AND TARGET PkgConfig::lilv) + if(USE_LV2) + target_compile_definitions(mltladspa PRIVATE WITH_LV2) target_link_libraries(mltladspa PRIVATE PkgConfig::lilv) target_sources(mltladspa PRIVATE filter_lv2.c producer_lv2.c @@ -111,10 +96,11 @@ if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) lv2_process.c lv2_process.h lv2_plugin_settings.c lv2_plugin_settings.h lv2_urid_helper.h) - install(FILES filter_lv2.yml producer_lv2.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) + install(FILES filter_lv2.yml producer_lv2.yml lv2blacklist.txt DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) endif() if(USE_VST2) + target_compile_definitions(mltladspa PRIVATE WITH_VST2) target_sources(mltladspa PRIVATE filter_vst2.c producer_vst2.c vst2_context.c vst2_context.h @@ -124,12 +110,7 @@ if(GPL AND TARGET PkgConfig::xml AND TARGET PkgConfig::glib AND ladspa_h_FOUND) vestige.h) install(FILES filter_vst2.yml producer_vst2.yml DESTINATION ${MLT_INSTALL_DATA_DIR}/jackrack) endif() -endif() -set_target_properties(mltladspa PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}") - -if(TARGET mltjackrack) - install(TARGETS mltjackrack mltladspa LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR}) -else() + set_target_properties(mltladspa PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${MLT_MODULE_OUTPUT_DIRECTORY}") install(TARGETS mltladspa LIBRARY DESTINATION ${MLT_INSTALL_MODULE_DIR}) endif() diff --git a/src/modules/jackrack/factory.c b/src/modules/jackrack/factory.c index e2ec71d21..7cd98ea0c 100644 --- a/src/modules/jackrack/factory.c +++ b/src/modules/jackrack/factory.c @@ -20,7 +20,6 @@ #include #include -#include #include #include #include @@ -34,21 +33,22 @@ #define JACKRACK_MODULE_EXPORT #endif +#ifdef WITH_JACK extern mlt_consumer consumer_jack_init(mlt_profile profile, mlt_service_type type, const char *id, char *arg); - -#ifdef GPL -#include "plugin_mgr.h" -#include - -#if defined(mltjackrack_EXPORTS) +#ifdef WITH_LADSPA extern mlt_filter filter_jackrack_init(mlt_profile profile, mlt_service_type type, const char *id, char *arg); #endif +#endif + +#ifdef WITH_LADSPA + +#if !defined(WITH_JACK) extern mlt_filter filter_ladspa_init(mlt_profile profile, mlt_service_type type, const char *id, @@ -57,6 +57,11 @@ extern mlt_producer producer_ladspa_init(mlt_profile profile, mlt_service_type type, const char *id, char *arg); +#endif + +#include "plugin_mgr.h" +#include +plugin_mgr_t *g_jackrack_plugin_mgr = NULL; #ifdef WITH_LV2 @@ -82,9 +87,10 @@ extern mlt_producer producer_lv2_init(mlt_profile profile, mlt_service_type type, const char *id, char *arg); +lv2_mgr_t *g_lv2_plugin_mgr = NULL; #endif -#if defined(GPL) && defined(WITH_VST2) +#ifdef WITH_VST2 #include "vestige.h" @@ -97,15 +103,6 @@ extern mlt_producer producer_vst2_init(mlt_profile profile, const char *id, char *arg); -#endif - -plugin_mgr_t *g_jackrack_plugin_mgr = NULL; - -#ifdef WITH_LV2 -lv2_mgr_t *g_lv2_plugin_mgr = NULL; -#endif - -#if defined(GPL) && defined(WITH_VST2) vst2_mgr_t *g_vst2_plugin_mgr = NULL; #endif @@ -154,28 +151,29 @@ static void add_port_to_metadata(mlt_properties p, plugin_desc_t *desc, int j) mlt_properties_set(p, "animation", "yes"); } -#endif +#endif // WITH_LADSPA static mlt_properties metadata(mlt_service_type type, const char *id, char *data) { + int is_ladspa = !strncmp(id, "ladspa.", 7); char file[PATH_MAX]; if (type == mlt_service_filter_type) { snprintf(file, PATH_MAX, "%s/jackrack/%s", mlt_environment("MLT_DATA"), - strncmp(id, "ladspa.", 7) ? data : "filter_ladspa.yml"); + is_ladspa ? "filter_ladspa.yml" : data); } else { snprintf(file, PATH_MAX, "%s/jackrack/%s", mlt_environment("MLT_DATA"), - strncmp(id, "ladspa.", 7) ? data : "producer_ladspa.yml"); + is_ladspa ? "producer_ladspa.yml" : data); } mlt_properties result = mlt_properties_parse_yaml(file); -#ifdef GPL - if (!strncmp(id, "ladspa.", 7)) { +#ifdef WITH_LADSPA + if (is_ladspa) { // Annotate the yaml properties with ladspa control port info. plugin_desc_t *desc = plugin_mgr_get_any_desc(g_jackrack_plugin_mgr, strtol(id + 7, NULL, 10)); @@ -492,7 +490,7 @@ static mlt_properties lv2_metadata(mlt_service_type type, const char *id, char * mlt_properties_set(p, "title", "Channel Mask"); mlt_properties_set(p, "description", - "A bitmask inidicating which channels to affect."); + "A bitmask indicating which channels to affect."); mlt_properties_set(p, "type", "integer"); mlt_properties_set(p, "default", "0xFFFFFFFF"); mlt_properties_set_int(p, "minimum", 0); @@ -507,7 +505,7 @@ static mlt_properties lv2_metadata(mlt_service_type type, const char *id, char * #endif -#if defined(GPL) && defined(WITH_VST2) +#ifdef WITH_VST2 static void vst2_add_port_to_metadata(mlt_properties p, vst2_plugin_desc_t *desc, int j) { @@ -624,19 +622,19 @@ static mlt_properties vst2_metadata(mlt_service_type type, const char *id, char mlt_properties_set(p, "mutable", "yes"); } /* for (i = 0; i < desc->status_port_count; i++) { - int j = desc->status_port_indicies[i]; - p = mlt_properties_new(); - snprintf(key, sizeof(key), "%d", mlt_properties_count(params)); - mlt_properties_set_data(params, - key, - p, - 0, - (mlt_destructor) mlt_properties_close, - NULL); - snprintf(key, sizeof(key), "%d[*]", j); - mlt_properties_set(p, "identifier", key); - vst2_add_port_to_metadata(p, desc, j); - mlt_properties_set(p, "readonly", "yes"); + int j = desc->status_port_indicies[i]; + p = mlt_properties_new(); + snprintf(key, sizeof(key), "%d", mlt_properties_count(params)); + mlt_properties_set_data(params, + key, + p, + 0, + (mlt_destructor) mlt_properties_close, + NULL); + snprintf(key, sizeof(key), "%d[*]", j); + mlt_properties_set(p, "identifier", key); + vst2_add_port_to_metadata(p, desc, j); + mlt_properties_set(p, "readonly", "yes"); } */ p = mlt_properties_new(); @@ -686,7 +684,7 @@ static mlt_properties vst2_metadata(mlt_service_type type, const char *id, char mlt_properties_set(p, "title", "Channel Mask"); mlt_properties_set(p, "description", - "A bitmask inidicating which channels to affect."); + "A bitmask indicating which channels to affect."); mlt_properties_set(p, "type", "integer"); mlt_properties_set(p, "default", "0xFFFFFFFF"); mlt_properties_set_int(p, "minimum", 0); @@ -704,14 +702,16 @@ static mlt_properties vst2_metadata(mlt_service_type type, const char *id, char JACKRACK_MODULE_EXPORT MLT_REPOSITORY { // Registrations owned by mltladspa. -#if defined(mltladspa_EXPORTS) && defined(GPL) +#if defined(WITH_LADSPA) && !defined(WITH_JACK) + MLT_REGISTER(mlt_service_filter_type, "ladspa", filter_ladspa_init); + MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); { GSList *list; g_jackrack_plugin_mgr = plugin_mgr_new(); for (list = g_jackrack_plugin_mgr->all_plugins; list; list = g_slist_next(list)) { plugin_desc_t *desc = (plugin_desc_t *) list->data; - char *s = malloc(strlen("ladpsa.") + 21); + char *s = malloc(strlen("ladspa.") + 21); sprintf(s, "ladspa.%lu", desc->id); @@ -730,7 +730,7 @@ JACKRACK_MODULE_EXPORT MLT_REPOSITORY } #endif -#if defined(mltladspa_EXPORTS) && defined(GPL) && defined(WITH_LV2) +#ifdef WITH_LV2 { GSList *list; g_lv2_plugin_mgr = lv2_mgr_new(); @@ -767,7 +767,7 @@ JACKRACK_MODULE_EXPORT MLT_REPOSITORY } #endif -#if defined(mltladspa_EXPORTS) && defined(GPL) && defined(WITH_VST2) +#ifdef WITH_VST2 { GSList *list; g_vst2_plugin_mgr = vst2_mgr_new(); @@ -793,17 +793,14 @@ JACKRACK_MODULE_EXPORT MLT_REPOSITORY #endif // Registrations owned by mltjackrack. -#if defined(mltjackrack_EXPORTS) && defined(GPL) +#ifdef WITH_JACK + MLT_REGISTER(mlt_service_consumer_type, "jack", consumer_jack_init); + MLT_REGISTER_METADATA(mlt_service_consumer_type, "jack", metadata, "consumer_jack.yml"); +#ifdef WITH_LADSPA MLT_REGISTER(mlt_service_filter_type, "jack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jack", metadata, "filter_jack.yml"); MLT_REGISTER(mlt_service_filter_type, "jackrack", filter_jackrack_init); MLT_REGISTER_METADATA(mlt_service_filter_type, "jackrack", metadata, "filter_jackrack.yml"); - MLT_REGISTER(mlt_service_filter_type, "ladspa", filter_ladspa_init); - MLT_REGISTER_METADATA(mlt_service_filter_type, "ladspa", metadata, "filter_ladspa.yml"); #endif - -#if defined(mltjackrack_EXPORTS) - MLT_REGISTER(mlt_service_consumer_type, "jack", consumer_jack_init); - MLT_REGISTER_METADATA(mlt_service_consumer_type, "jack", metadata, "consumer_jack.yml"); #endif } From 01b1189633093a4053bd8934483f2aff56713652 Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Sun, 12 Jul 2026 17:00:24 -0700 Subject: [PATCH 6/6] fix builds missing lv2 dependency --- .github/workflows/build-distros.yml | 14 +++++++------- .github/workflows/build-linux.yml | 2 +- .github/workflows/build-msys2-mingw64.yml | 1 + 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-distros.yml b/.github/workflows/build-distros.yml index 97d04e076..b6490229f 100644 --- a/.github/workflows/build-distros.yml +++ b/.github/workflows/build-distros.yml @@ -34,7 +34,7 @@ jobs: sed -i 's/^Types: deb/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources DEBIAN_FRONTEND=noninteractive apt-get -qq update DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt - DEBIAN_FRONTEND=noninteractive apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev + DEBIAN_FRONTEND=noninteractive apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev liblilv-dev git clone --depth 1 --branch v0.2 https://github.com/xiph/rnnoise.git /tmp/rnnoise cd /tmp/rnnoise ./autogen.sh @@ -47,7 +47,7 @@ jobs: sed -i 's/^Types: deb/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources DEBIAN_FRONTEND=noninteractive apt-get -qq update DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt - DEBIAN_FRONTEND=noninteractive apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev + DEBIAN_FRONTEND=noninteractive apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev liblilv-dev git clone --depth 1 --branch v0.2 https://github.com/xiph/rnnoise.git /tmp/rnnoise cd /tmp/rnnoise ./autogen.sh @@ -60,7 +60,7 @@ jobs: sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list" DEBIAN_FRONTEND=noninteractive apt-get -qq update DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt - DEBIAN_FRONTEND=noninteractive apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev + DEBIAN_FRONTEND=noninteractive apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev liblilv-dev git clone --depth 1 --branch v0.2 https://github.com/xiph/rnnoise.git /tmp/rnnoise cd /tmp/rnnoise ./autogen.sh @@ -73,7 +73,7 @@ jobs: echo 'deb-src http://deb.debian.org/debian testing main' >> /etc/apt/sources.list apt-get -qq update apt-get -yqq build-dep mlt - apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev + apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev liblilv-dev git clone --depth 1 --branch v0.2 https://github.com/xiph/rnnoise.git /tmp/rnnoise cd /tmp/rnnoise ./autogen.sh @@ -87,7 +87,7 @@ jobs: echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list apt-get -qq update apt-get -yqq build-dep mlt - apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev + apt-get -yqq install autoconf automake git libtool pkg-config wget cmake qt6-base-dev libqt6svg6-dev liblilv-dev git clone --depth 1 --branch v0.2 https://github.com/xiph/rnnoise.git /tmp/rnnoise cd /tmp/rnnoise ./autogen.sh @@ -102,7 +102,7 @@ jobs: yasm gavl-devel libsamplerate-devel libxml2-devel \ ladspa-devel jack-audio-connection-kit-devel sox-devel \ SDL2-devel fftw-devel frei0r-devel gtk2-devel libexif-devel \ - qt6-qtbase-devel qt6-qtsvg-devel \ + qt6-qtbase-devel qt6-qtsvg-devel lilv-devel \ libtheora-devel libvorbis-devel libvdpau-devel \ libsoup-devel liboil-devel python-devel alsa-lib \ pulseaudio-libs-devel gcc-c++ cmake ffmpeg-free-devel \ @@ -115,7 +115,7 @@ jobs: yasm gavl-devel libsamplerate-devel libxml2-devel \ ladspa-devel jack-audio-connection-kit-devel sox-devel \ SDL2-devel fftw-devel frei0r-devel gtk2-devel libexif-devel \ - qt6-qtbase-devel qt6-qtsvg-devel \ + qt6-qtbase-devel qt6-qtsvg-devel lilv-devel \ libtheora-devel libvorbis-devel libvdpau-devel \ libsoup-devel liboil-devel python-devel alsa-lib \ pulseaudio-libs-devel gcc-c++ cmake ffmpeg-free-devel \ diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 5484c6bed..80feb90c5 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -38,7 +38,7 @@ jobs: sudo sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list" sudo apt-get -qq update sudo apt-get -yqq build-dep mlt - sudo apt-get -yqq install autoconf automake git libtool pkg-config wget qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev + sudo apt-get -yqq install autoconf automake git libtool pkg-config wget qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev liblilv-dev git clone --depth 1 --branch v0.2 https://github.com/xiph/rnnoise.git /tmp/rnnoise pushd /tmp/rnnoise ./autogen.sh diff --git a/.github/workflows/build-msys2-mingw64.yml b/.github/workflows/build-msys2-mingw64.yml index 8b89e2e41..37b2eefa8 100644 --- a/.github/workflows/build-msys2-mingw64.yml +++ b/.github/workflows/build-msys2-mingw64.yml @@ -42,6 +42,7 @@ jobs: mingw-w64-x86_64-libvpx mingw-w64-x86_64-libwebp mingw-w64-x86_64-libxml2 + mingw-w64-x86_64-lilv mingw-w64-x86_64-onevpl mingw-w64-x86_64-openblas mingw-w64-x86_64-openssl