/* * Carla Native Plugins * Copyright (C) 2013-2019 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #ifndef CARLA_BUNDLE_TYPE # error CARLA_BUNDLE_TYPE undefined #endif // -------------------------------------------------------------------------------------------------------------------- #include "carla-lv2.cpp" // -------------------------------------------------------------------------------------------------------------------- #define MAX_PLUGIN_DESCRIPTORS 8 static const NativePluginDescriptor* sDescs[MAX_PLUGIN_DESCRIPTORS]; static std::size_t sDescsUsed = 0; std::size_t carla_getNativePluginCount() noexcept { return sDescsUsed; } const NativePluginDescriptor* carla_getNativePluginDescriptor(const std::size_t index) noexcept { CARLA_SAFE_ASSERT_RETURN(index < sDescsUsed, nullptr); return sDescs[index]; } void carla_register_native_plugin(const NativePluginDescriptor* desc) { CARLA_SAFE_ASSERT_RETURN(sDescsUsed < MAX_PLUGIN_DESCRIPTORS,); sDescs[sDescsUsed++] = desc; } // -------------------------------------------------------------------------------------------------------------------- static void carla_register_bundled_native_plugins(void); static const struct PluginRegisterer { PluginRegisterer() { carla_register_bundled_native_plugins(); } } sPluginRegisterer; // -------------------------------------------------------------------------------------------------------------------- extern "C" { // Simple plugins void carla_register_native_plugin_audiogain(void); void carla_register_native_plugin_bypass(void); void carla_register_native_plugin_lfo(void); void carla_register_native_plugin_midichanab(void); void carla_register_native_plugin_midichanfilter(void); void carla_register_native_plugin_midichannelize(void); void carla_register_native_plugin_midigain(void); void carla_register_native_plugin_midijoin(void); void carla_register_native_plugin_midisplit(void); void carla_register_native_plugin_midithrough(void); void carla_register_native_plugin_miditranspose(void); // Audio file void carla_register_native_plugin_audiofile(void); // MIDI file and sequencer void carla_register_native_plugin_midifile(void); void carla_register_native_plugin_midipattern(void); // Carla void carla_register_native_plugin_carla(void); // External-UI plugins void carla_register_native_plugin_bigmeter(void); void carla_register_native_plugin_notes(void); #ifdef HAVE_EXTERNAL_PLUGINS void carla_register_all_native_external_plugins(void); #endif } static void carla_register_bundled_native_plugins(void) { #if CARLA_BUNDLE_TYPE == 1 carla_register_native_plugin_audiogain(); #elif CARLA_BUNDLE_TYPE == 2 carla_register_native_plugin_audiofile(); carla_register_native_plugin_midifile(); #elif CARLA_BUNDLE_TYPE == 3 carla_register_native_plugin_midichanab(); carla_register_native_plugin_midichannelize(); carla_register_native_plugin_midichanfilter(); carla_register_native_plugin_midigain(); carla_register_native_plugin_midijoin(); carla_register_native_plugin_midisplit(); carla_register_native_plugin_miditranspose(); #endif } // --------------------------------------------------------------------------------------------------------------------