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.

169 lines
6.1KB

  1. /*
  2. * Carla Bridge utils
  3. * Copyright (C) 2013 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. #ifndef CARLA_BRIDGE_UTILS_HPP_INCLUDED
  18. #define CARLA_BRIDGE_UTILS_HPP_INCLUDED
  19. #include "CarlaRingBuffer.hpp"
  20. enum PluginBridgeInfoType {
  21. kPluginBridgeAudioCount = 0,
  22. kPluginBridgeMidiCount,
  23. kPluginBridgeParameterCount,
  24. kPluginBridgeProgramCount,
  25. kPluginBridgeMidiProgramCount,
  26. kPluginBridgePluginInfo,
  27. kPluginBridgeParameterInfo,
  28. kPluginBridgeParameterData,
  29. kPluginBridgeParameterRanges,
  30. kPluginBridgeProgramInfo,
  31. kPluginBridgeMidiProgramInfo,
  32. kPluginBridgeConfigure,
  33. kPluginBridgeSetParameterValue,
  34. kPluginBridgeSetDefaultValue,
  35. kPluginBridgeSetProgram,
  36. kPluginBridgeSetMidiProgram,
  37. kPluginBridgeSetCustomData,
  38. kPluginBridgeSetChunkData,
  39. kPluginBridgeUpdateNow,
  40. kPluginBridgeError
  41. };
  42. enum PluginBridgeOpcode {
  43. kPluginBridgeOpcodeNull = 0,
  44. kPluginBridgeOpcodeSetAudioPool = 1, // long
  45. kPluginBridgeOpcodeSetBufferSize = 2, // int
  46. kPluginBridgeOpcodeSetSampleRate = 3, // float
  47. kPluginBridgeOpcodeSetParameter = 4, // int, float
  48. kPluginBridgeOpcodeSetProgram = 5, // int
  49. kPluginBridgeOpcodeSetMidiProgram = 6, // int
  50. kPluginBridgeOpcodeMidiEvent = 7, // long, int, char[] (long = timeFrame, int = size max 4)
  51. kPluginBridgeOpcodeProcess = 8,
  52. kPluginBridgeOpcodeQuit = 9
  53. };
  54. const char* const CARLA_BRIDGE_MSG_HIDE_GUI = "CarlaBridgeHideGUI"; //!< Plugin -> Host call, tells host GUI is now hidden
  55. const char* const CARLA_BRIDGE_MSG_SAVED = "CarlaBridgeSaved"; //!< Plugin -> Host call, tells host state is saved
  56. #if 0
  57. const char* const CARLA_BRIDGE_MSG_SAVE_NOW = "CarlaBridgeSaveNow"; //!< Host -> Plugin call, tells plugin to save state now
  58. const char* const CARLA_BRIDGE_MSG_SET_CHUNK = "CarlaBridgeSetChunk"; //!< Host -> Plugin call, tells plugin to set chunk in file \a value
  59. const char* const CARLA_BRIDGE_MSG_SET_CUSTOM = "CarlaBridgeSetCustom"; //!< Host -> Plugin call, tells plugin to set a custom data set using \a value ("type·key·rvalue").
  60. //If \a type is 'chunk' or 'binary' \a rvalue refers to chunk file.
  61. #endif
  62. // -----------------------------------------------------------------------
  63. struct BridgeShmControl {
  64. union {
  65. void* runServer;
  66. char _padServer[32];
  67. };
  68. union {
  69. void* runClient;
  70. char _padClient[32];
  71. };
  72. RingBuffer ringBuffer;
  73. } __attribute__((__packed__));
  74. // -----------------------------------------------------------------------
  75. static inline
  76. const char* PluginBridgeInfoType2str(const PluginBridgeInfoType type)
  77. {
  78. switch (type)
  79. {
  80. case kPluginBridgeAudioCount:
  81. return "kPluginBridgeAudioCount";
  82. case kPluginBridgeMidiCount:
  83. return "kPluginBridgeMidiCount";
  84. case kPluginBridgeParameterCount:
  85. return "kPluginBridgeParameterCount";
  86. case kPluginBridgeProgramCount:
  87. return "kPluginBridgeProgramCount";
  88. case kPluginBridgeMidiProgramCount:
  89. return "kPluginBridgeMidiProgramCount";
  90. case kPluginBridgePluginInfo:
  91. return "kPluginBridgePluginInfo";
  92. case kPluginBridgeParameterInfo:
  93. return "kPluginBridgeParameterInfo";
  94. case kPluginBridgeParameterData:
  95. return "kPluginBridgeParameterData";
  96. case kPluginBridgeParameterRanges:
  97. return "kPluginBridgeParameterRanges";
  98. case kPluginBridgeProgramInfo:
  99. return "kPluginBridgeProgramInfo";
  100. case kPluginBridgeMidiProgramInfo:
  101. return "kPluginBridgeMidiProgramInfo";
  102. case kPluginBridgeConfigure:
  103. return "kPluginBridgeConfigure";
  104. case kPluginBridgeSetParameterValue:
  105. return "kPluginBridgeSetParameterValue";
  106. case kPluginBridgeSetDefaultValue:
  107. return "kPluginBridgeSetDefaultValue";
  108. case kPluginBridgeSetProgram:
  109. return "kPluginBridgeSetProgram";
  110. case kPluginBridgeSetMidiProgram:
  111. return "kPluginBridgeSetMidiProgram";
  112. case kPluginBridgeSetCustomData:
  113. return "kPluginBridgeSetCustomData";
  114. case kPluginBridgeSetChunkData:
  115. return "kPluginBridgeSetChunkData";
  116. case kPluginBridgeUpdateNow:
  117. return "kPluginBridgeUpdateNow";
  118. case kPluginBridgeError:
  119. return "kPluginBridgeError";
  120. }
  121. carla_stderr("CarlaBackend::PluginBridgeInfoType2str(%i) - invalid type", type);
  122. return nullptr;
  123. }
  124. static inline
  125. const char* PluginBridgeOpcode2str(const PluginBridgeOpcode opcode)
  126. {
  127. switch (opcode)
  128. {
  129. case kPluginBridgeOpcodeNull:
  130. return "kPluginBridgeOpcodeNull";
  131. case kPluginBridgeOpcodeSetAudioPool:
  132. return "kPluginBridgeOpcodeSetAudioPool";
  133. case kPluginBridgeOpcodeSetBufferSize:
  134. return "kPluginBridgeOpcodeSetBufferSize";
  135. case kPluginBridgeOpcodeSetSampleRate:
  136. return "kPluginBridgeOpcodeSetSampleRate";
  137. case kPluginBridgeOpcodeSetParameter:
  138. return "kPluginBridgeOpcodeSetParameter";
  139. case kPluginBridgeOpcodeSetProgram:
  140. return "kPluginBridgeOpcodeSetProgram";
  141. case kPluginBridgeOpcodeSetMidiProgram:
  142. return "kPluginBridgeOpcodeSetMidiProgram";
  143. case kPluginBridgeOpcodeMidiEvent:
  144. return "kPluginBridgeOpcodeMidiEvent";
  145. case kPluginBridgeOpcodeProcess:
  146. return "kPluginBridgeOpcodeProcess";
  147. case kPluginBridgeOpcodeQuit:
  148. return "kPluginBridgeOpcodeQuit";
  149. }
  150. carla_stderr("CarlaBackend::PluginBridgeOpcode2str(%i) - invalid opcode", opcode);
  151. return nullptr;
  152. }
  153. // -----------------------------------------------------------------------
  154. #endif // CARLA_BRIDGE_UTILS_HPP_INCLUDED