Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.1KB

  1. /*
  2. * Carla Native Plugins
  3. * Copyright (C) 2013-2014 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License as
  7. * published by the Free Software Foundation; either version 2 of
  8. * the License, or any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * For a full copy of the GNU General Public License see the doc/GPL.txt file.
  16. */
  17. #include "CarlaEngine.hpp"
  18. #include "CarlaPlugin.hpp"
  19. #include "CarlaHost.h"
  20. #include "CarlaNative.h"
  21. #include "CarlaBackendUtils.hpp"
  22. #include "LinkedList.hpp"
  23. #ifdef CARLA_NATIVE_PLUGIN_DSSI
  24. # include "dssi/dssi.h"
  25. #endif
  26. #ifdef CARLA_NATIVE_PLUGIN_LV2
  27. # include "lv2/lv2.h"
  28. #endif
  29. using CarlaBackend::CarlaPlugin;
  30. // -----------------------------------------------------------------------
  31. // Plugin List
  32. struct PluginListManager {
  33. PluginListManager()
  34. #ifdef CARLA_NATIVE_PLUGIN_DSSI
  35. : dssiDescs(),
  36. #endif
  37. #ifdef CARLA_NATIVE_PLUGIN_LV2
  38. : lv2Descs(),
  39. #endif
  40. #ifdef CARLA_NATIVE_PLUGIN_VST
  41. : _dummy(0),
  42. #endif
  43. descs()
  44. {
  45. for (size_t i=0, count = CarlaPlugin::getNativePluginCount(); i < count; ++i)
  46. {
  47. const NativePluginDescriptor* const desc(CarlaPlugin::getNativePluginDescriptor(i));
  48. // Open/Save not possible in plugins
  49. if (desc->hints & PLUGIN_NEEDS_UI_OPEN_SAVE)
  50. continue;
  51. // skip some plugins
  52. if (std::strcmp(desc->label, "vexsynth") == 0)
  53. {
  54. continue;
  55. }
  56. // skip midi plugins, not implemented yet
  57. if (desc->audioIns == 0 && desc->audioOuts == 0 && desc->midiIns == 1 && desc->midiOuts >= 1)
  58. continue;
  59. descs.append(desc);
  60. }
  61. }
  62. ~PluginListManager()
  63. {
  64. #ifdef CARLA_NATIVE_PLUGIN_DSSI
  65. for (LinkedList<const DSSI_Descriptor*>::Itenerator it = dssiDescs.begin(); it.valid(); it.next())
  66. {
  67. const DSSI_Descriptor* const dssiDesc(it.getValue());
  68. //delete[] lv2Desc->URI;
  69. delete dssiDesc;
  70. }
  71. dssiDescs.clear();
  72. #endif
  73. #ifdef CARLA_NATIVE_PLUGIN_LV2
  74. for (LinkedList<const LV2_Descriptor*>::Itenerator it = lv2Descs.begin(); it.valid(); it.next())
  75. {
  76. const LV2_Descriptor* const lv2Desc(it.getValue());
  77. delete[] lv2Desc->URI;
  78. delete lv2Desc;
  79. }
  80. lv2Descs.clear();
  81. #endif
  82. descs.clear();
  83. }
  84. static PluginListManager& getInstance()
  85. {
  86. static PluginListManager plm;
  87. return plm;
  88. }
  89. #ifdef CARLA_NATIVE_PLUGIN_DSSI
  90. LinkedList<const DSSI_Descriptor*> dssiDescs;
  91. #endif
  92. #ifdef CARLA_NATIVE_PLUGIN_LV2
  93. LinkedList<const LV2_Descriptor*> lv2Descs;
  94. #endif
  95. #ifdef CARLA_NATIVE_PLUGIN_VST
  96. char _dummy;
  97. #endif
  98. LinkedList<const NativePluginDescriptor*> descs;
  99. };
  100. // -----------------------------------------------------------------------