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.

111 lines
3.1KB

  1. // SPDX-FileCopyrightText: 2011-2025 Filipe Coelho <falktx@falktx.com>
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #ifndef CARLA_ENGINE_CLIENT_HPP_INCLUDED
  4. #define CARLA_ENGINE_CLIENT_HPP_INCLUDED
  5. #include "CarlaEngine.hpp"
  6. #include "CarlaEnginePorts.hpp"
  7. #include "CarlaPlugin.hpp"
  8. #include "CarlaStringList.hpp"
  9. CARLA_BACKEND_START_NAMESPACE
  10. // -----------------------------------------------------------------------
  11. // Carla Engine Client Protected Data
  12. struct CarlaEngineClient::ProtectedData {
  13. const CarlaEngine& engine;
  14. bool active;
  15. uint32_t latency;
  16. #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
  17. CarlaEngineCVSourcePortsForStandalone cvSourcePorts;
  18. EngineInternalGraph& egraph;
  19. CarlaPluginPtr plugin;
  20. #endif
  21. CarlaStringList audioInList;
  22. CarlaStringList audioOutList;
  23. CarlaStringList cvInList;
  24. CarlaStringList cvOutList;
  25. CarlaStringList eventInList;
  26. CarlaStringList eventOutList;
  27. #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
  28. ProtectedData(const CarlaEngine& eng, EngineInternalGraph& eg, CarlaPluginPtr p) noexcept;
  29. #else
  30. ProtectedData(const CarlaEngine& eng) noexcept;
  31. #endif
  32. ~ProtectedData();
  33. void addAudioPortName(bool isInput, const char* name);
  34. void addCVPortName(bool isInput, const char* name);
  35. void addEventPortName(bool isInput, const char* name);
  36. void clearPorts();
  37. const char* getUniquePortName(const char* name);
  38. #ifdef CARLA_PROPER_CPP11_SUPPORT
  39. ProtectedData() = delete;
  40. CARLA_DECLARE_NON_COPYABLE(ProtectedData)
  41. #endif
  42. };
  43. // -----------------------------------------------------------------------
  44. // Carla Engine Client
  45. #ifndef BUILD_BRIDGE_ALTERNATIVE_ARCH
  46. class CarlaEngineClientForStandalone : public CarlaEngineClient
  47. {
  48. public:
  49. CarlaEngineClientForStandalone(const CarlaEngine& engine,
  50. EngineInternalGraph& egraph,
  51. const CarlaPluginPtr plugin)
  52. : CarlaEngineClient(new ProtectedData(engine, egraph, plugin)) {}
  53. ~CarlaEngineClientForStandalone() noexcept override
  54. {
  55. carla_debug("CarlaEngineClientForStandalone::~CarlaEngineClientForStandalone()");
  56. delete pData;
  57. }
  58. protected:
  59. inline PatchbayGraph* getPatchbayGraphOrNull() const noexcept
  60. {
  61. return pData->egraph.getPatchbayGraphOrNull();
  62. }
  63. inline CarlaPluginPtr getPlugin() const noexcept
  64. {
  65. return pData->plugin;
  66. }
  67. CARLA_DECLARE_NON_COPYABLE(CarlaEngineClientForStandalone)
  68. };
  69. typedef CarlaEngineClientForStandalone CarlaEngineClientForSubclassing;
  70. #else
  71. class CarlaEngineClientForBridge : public CarlaEngineClient
  72. {
  73. public:
  74. CarlaEngineClientForBridge(const CarlaEngine& engine)
  75. : CarlaEngineClient(new ProtectedData(engine)) {}
  76. ~CarlaEngineClientForBridge() override
  77. {
  78. carla_debug("CarlaEngineClientForBridge::~CarlaEngineClientForBridge()");
  79. delete pData;
  80. }
  81. CARLA_DECLARE_NON_COPYABLE(CarlaEngineClientForBridge)
  82. };
  83. typedef CarlaEngineClientForBridge CarlaEngineClientForSubclassing;
  84. #endif
  85. // -----------------------------------------------------------------------
  86. CARLA_BACKEND_END_NAMESPACE
  87. #endif // CARLA_ENGINE_CLIENT_HPP_INCLUDED