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.

116 lines
2.9KB

  1. /*
  2. * JackBridge (Part 2, Semaphore functions)
  3. * Copyright (C) 2013-2014 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any purpose with
  6. * or without fee is hereby granted, provided that the above copyright notice and this
  7. * permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  10. * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  11. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  13. * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #include "JackBridge.hpp"
  17. #ifdef JACKBRIDGE_DUMMY
  18. # include "CarlaUtils.hpp"
  19. #else
  20. # include "CarlaSemUtils.hpp"
  21. # include "CarlaShmUtils.hpp"
  22. #endif // ! JACKBRIDGE_DUMMY
  23. // -----------------------------------------------------------------------------
  24. bool jackbridge_sem_init(void* sem) noexcept
  25. {
  26. #if defined(JACKBRIDGE_DUMMY)
  27. return false;
  28. #else
  29. sem_t* const sema(carla_sem_create());
  30. std::memcpy(sem, &sema, sizeof(sem_t*));
  31. //std::memcpy(sem, sema, sizeof(sem_t*));
  32. return (sema != nullptr);
  33. #endif
  34. }
  35. void jackbridge_sem_destroy(void* sem) noexcept
  36. {
  37. #ifndef JACKBRIDGE_DUMMY
  38. carla_sem_destroy((sem_t*)sem);
  39. #endif
  40. }
  41. bool jackbridge_sem_post(void* sem) noexcept
  42. {
  43. #ifdef JACKBRIDGE_DUMMY
  44. return false;
  45. #else
  46. return carla_sem_post((sem_t*)sem);
  47. #endif
  48. }
  49. bool jackbridge_sem_timedwait(void* sem, uint secs) noexcept
  50. {
  51. #ifdef JACKBRIDGE_DUMMY
  52. return false;
  53. #else
  54. return carla_sem_timedwait((sem_t*)sem, secs);
  55. #endif
  56. }
  57. // -----------------------------------------------------------------------------
  58. bool jackbridge_shm_is_valid(const void* shm) noexcept
  59. {
  60. CARLA_SAFE_ASSERT_RETURN(shm != nullptr, false);
  61. #ifdef JACKBRIDGE_DUMMY
  62. return false;
  63. #else
  64. return carla_is_shm_valid(*(const shm_t*)shm);
  65. #endif
  66. }
  67. void jackbridge_shm_init(void* shm) noexcept
  68. {
  69. CARLA_SAFE_ASSERT_RETURN(shm != nullptr,);
  70. #ifndef JACKBRIDGE_DUMMY
  71. carla_shm_init(*(shm_t*)shm);
  72. #endif
  73. }
  74. void jackbridge_shm_attach(void* shm, const char* name) noexcept
  75. {
  76. CARLA_SAFE_ASSERT_RETURN(shm != nullptr,);
  77. #ifndef JACKBRIDGE_DUMMY
  78. *(shm_t*)shm = carla_shm_attach(name);
  79. #endif
  80. }
  81. void jackbridge_shm_close(void* shm) noexcept
  82. {
  83. CARLA_SAFE_ASSERT_RETURN(shm != nullptr,);
  84. #ifndef JACKBRIDGE_DUMMY
  85. carla_shm_close(*(shm_t*)shm);
  86. #endif
  87. }
  88. void* jackbridge_shm_map(void* shm, size_t size) noexcept
  89. {
  90. CARLA_SAFE_ASSERT_RETURN(shm != nullptr, nullptr);
  91. #ifdef JACKBRIDGE_DUMMY
  92. return nullptr;
  93. #else
  94. return carla_shm_map(*(shm_t*)shm, size);
  95. #endif
  96. }
  97. // -----------------------------------------------------------------------------