jack2 codebase
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.

1051 lines
50KB

  1. /*
  2. Copyright (C) 2008 Grame
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  14. */
  15. #include "types.h"
  16. #include "jack.h"
  17. #include "JackExports.h"
  18. #include <dlfcn.h>
  19. #include <stdarg.h>
  20. #include <stdio.h>
  21. #include <dirent.h>
  22. #include <string.h>
  23. #ifdef __cplusplus
  24. extern "C"
  25. {
  26. #endif
  27. EXPORT jack_client_t * jack_client_open (const char *client_name,
  28. jack_options_t options,
  29. jack_status_t *status, ...);
  30. EXPORT jack_client_t * jack_client_new (const char *client_name);
  31. EXPORT int jack_client_name_size (void);
  32. EXPORT char* jack_get_client_name (jack_client_t *client);
  33. EXPORT int jack_internal_client_new (const char *client_name,
  34. const char *load_name,
  35. const char *load_init);
  36. EXPORT void jack_internal_client_close (const char *client_name);
  37. EXPORT int jack_is_realtime (jack_client_t *client);
  38. EXPORT void jack_on_shutdown (jack_client_t *client,
  39. void (*function)(void *arg), void *arg);
  40. EXPORT int jack_set_process_callback (jack_client_t *client,
  41. JackProcessCallback process_callback,
  42. void *arg);
  43. //
  44. EXPORT jack_nframes_t jack_thread_wait(jack_client_t *client, int status);
  45. // new
  46. EXPORT jack_nframes_t jack_cycle_wait (jack_client_t*);
  47. EXPORT void jack_cycle_signal (jack_client_t*, int status);
  48. EXPORT int jack_set_process_thread(jack_client_t* client, JackThreadCallback fun, void *arg);
  49. EXPORT int jack_set_thread_init_callback (jack_client_t *client,
  50. JackThreadInitCallback thread_init_callback,
  51. void *arg);
  52. EXPORT int jack_set_freewheel_callback (jack_client_t *client,
  53. JackFreewheelCallback freewheel_callback,
  54. void *arg);
  55. EXPORT int jack_set_freewheel(jack_client_t* client, int onoff);
  56. EXPORT int jack_set_buffer_size (jack_client_t *client, jack_nframes_t nframes);
  57. EXPORT int jack_set_buffer_size_callback (jack_client_t *client,
  58. JackBufferSizeCallback bufsize_callback,
  59. void *arg);
  60. EXPORT int jack_set_sample_rate_callback (jack_client_t *client,
  61. JackSampleRateCallback srate_callback,
  62. void *arg);
  63. //
  64. EXPORT int jack_set_client_registration_callback (jack_client_t *,
  65. JackClientRegistrationCallback
  66. registration_callback, void *arg);
  67. EXPORT int jack_set_port_registration_callback (jack_client_t *,
  68. JackPortRegistrationCallback
  69. registration_callback, void *arg);
  70. //
  71. EXPORT int jack_set_port_connect_callback (jack_client_t *,
  72. JackPortConnectCallback
  73. connect_callback, void *arg);
  74. EXPORT int jack_set_graph_order_callback (jack_client_t *,
  75. JackGraphOrderCallback graph_callback,
  76. void *);
  77. EXPORT int jack_set_xrun_callback (jack_client_t *,
  78. JackXRunCallback xrun_callback, void *arg);
  79. EXPORT int jack_activate (jack_client_t *client);
  80. EXPORT int jack_deactivate (jack_client_t *client);
  81. EXPORT jack_port_t * jack_port_register (jack_client_t *client,
  82. const char *port_name,
  83. const char *port_type,
  84. unsigned long flags,
  85. unsigned long buffer_size);
  86. EXPORT int jack_port_unregister (jack_client_t *, jack_port_t *);
  87. EXPORT void * jack_port_get_buffer (jack_port_t *, jack_nframes_t);
  88. EXPORT const char * jack_port_name (const jack_port_t *port);
  89. EXPORT const char * jack_port_short_name (const jack_port_t *port);
  90. EXPORT int jack_port_flags (const jack_port_t *port);
  91. EXPORT const char * jack_port_type (const jack_port_t *port);
  92. EXPORT int jack_port_is_mine (const jack_client_t *, const jack_port_t *port);
  93. EXPORT int jack_port_connected (const jack_port_t *port);
  94. EXPORT int jack_port_connected_to (const jack_port_t *port,
  95. const char *port_name);
  96. EXPORT const char ** jack_port_get_connections (const jack_port_t *port);
  97. EXPORT const char ** jack_port_get_all_connections (const jack_client_t *client,
  98. const jack_port_t *port);
  99. EXPORT int jack_port_tie (jack_port_t *src, jack_port_t *dst);
  100. EXPORT int jack_port_untie (jack_port_t *port);
  101. EXPORT jack_nframes_t jack_port_get_latency (jack_port_t *port);
  102. EXPORT jack_nframes_t jack_port_get_total_latency (jack_client_t *,
  103. jack_port_t *port);
  104. EXPORT void jack_port_set_latency (jack_port_t *, jack_nframes_t);
  105. //
  106. EXPORT int jack_recompute_total_latency (jack_client_t*, jack_port_t* port);
  107. EXPORT int jack_recompute_total_latencies (jack_client_t*);
  108. EXPORT int jack_port_set_name (jack_port_t *port, const char *port_name);
  109. //
  110. EXPORT int jack_port_set_alias (jack_port_t *port, const char *alias);
  111. EXPORT int jack_port_unset_alias (jack_port_t *port, const char *alias);
  112. EXPORT int jack_port_get_aliases (const jack_port_t *port, char* const aliases[2]);
  113. EXPORT int jack_port_request_monitor (jack_port_t *port, int onoff);
  114. EXPORT int jack_port_request_monitor_by_name (jack_client_t *client,
  115. const char *port_name, int onoff);
  116. EXPORT int jack_port_ensure_monitor (jack_port_t *port, int onoff);
  117. EXPORT int jack_port_monitoring_input (jack_port_t *port);
  118. EXPORT int jack_connect (jack_client_t *,
  119. const char *source_port,
  120. const char *destination_port);
  121. EXPORT int jack_disconnect (jack_client_t *,
  122. const char *source_port,
  123. const char *destination_port);
  124. EXPORT int jack_port_disconnect (jack_client_t *, jack_port_t *);
  125. EXPORT int jack_port_name_size(void);
  126. EXPORT int jack_port_type_size(void);
  127. EXPORT jack_nframes_t jack_get_sample_rate (jack_client_t *);
  128. EXPORT jack_nframes_t jack_get_buffer_size (jack_client_t *);
  129. EXPORT const char ** jack_get_ports (jack_client_t *,
  130. const char *port_name_pattern,
  131. const char *type_name_pattern,
  132. unsigned long flags);
  133. EXPORT jack_port_t * jack_port_by_name (jack_client_t *, const char *port_name);
  134. EXPORT jack_port_t * jack_port_by_id (jack_client_t *client,
  135. jack_port_id_t port_id);
  136. EXPORT int jack_engine_takeover_timebase (jack_client_t *);
  137. EXPORT jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *);
  138. //
  139. EXPORT jack_time_t jack_get_time();
  140. EXPORT jack_nframes_t jack_time_to_frames(const jack_client_t *client, jack_time_t time);
  141. EXPORT jack_time_t jack_frames_to_time(const jack_client_t *client, jack_nframes_t frames);
  142. EXPORT jack_nframes_t jack_frame_time (const jack_client_t *);
  143. EXPORT jack_nframes_t jack_last_frame_time (const jack_client_t *client);
  144. EXPORT float jack_cpu_load (jack_client_t *client);
  145. EXPORT pthread_t jack_client_thread_id (jack_client_t *);
  146. EXPORT void jack_set_error_function (void (*func)(const char *));
  147. EXPORT float jack_get_max_delayed_usecs (jack_client_t *client);
  148. EXPORT float jack_get_xrun_delayed_usecs (jack_client_t *client);
  149. EXPORT void jack_reset_max_delayed_usecs (jack_client_t *client);
  150. EXPORT int jack_release_timebase (jack_client_t *client);
  151. EXPORT int jack_set_sync_callback (jack_client_t *client,
  152. JackSyncCallback sync_callback,
  153. void *arg);
  154. EXPORT int jack_set_sync_timeout (jack_client_t *client,
  155. jack_time_t timeout);
  156. EXPORT int jack_set_timebase_callback (jack_client_t *client,
  157. int conditional,
  158. JackTimebaseCallback timebase_callback,
  159. void *arg);
  160. EXPORT int jack_transport_locate (jack_client_t *client,
  161. jack_nframes_t frame);
  162. EXPORT jack_transport_state_t jack_transport_query (const jack_client_t *client,
  163. jack_position_t *pos);
  164. EXPORT jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client);
  165. EXPORT int jack_transport_reposition (jack_client_t *client,
  166. jack_position_t *pos);
  167. EXPORT void jack_transport_start (jack_client_t *client);
  168. EXPORT void jack_transport_stop (jack_client_t *client);
  169. EXPORT void jack_get_transport_info (jack_client_t *client,
  170. jack_transport_info_t *tinfo);
  171. EXPORT void jack_set_transport_info (jack_client_t *client,
  172. jack_transport_info_t *tinfo);
  173. EXPORT int jack_acquire_real_time_scheduling (pthread_t thread, int priority);
  174. EXPORT int jack_client_create_thread (jack_client_t* client,
  175. pthread_t *thread,
  176. int priority,
  177. int realtime, // boolean
  178. void *(*start_routine)(void*),
  179. void *arg);
  180. EXPORT int jack_drop_real_time_scheduling (pthread_t thread);
  181. EXPORT char * jack_get_internal_client_name (jack_client_t *client,
  182. jack_intclient_t intclient);
  183. EXPORT jack_intclient_t jack_internal_client_handle (jack_client_t *client,
  184. const char *client_name,
  185. jack_status_t *status);
  186. EXPORT jack_intclient_t jack_internal_client_load (jack_client_t *client,
  187. const char *client_name,
  188. jack_options_t options,
  189. jack_status_t *status, ...);
  190. EXPORT jack_status_t jack_internal_client_unload (jack_client_t *client,
  191. jack_intclient_t intclient);
  192. EXPORT jack_client_t * jack_client_open (const char *client_name,
  193. jack_options_t options,
  194. jack_status_t *status, ...);
  195. EXPORT jack_client_t * jack_client_new (const char *client_name);
  196. EXPORT int jack_client_close (jack_client_t *client);
  197. #ifdef __cplusplus
  198. }
  199. #endif
  200. // Function definition
  201. typedef void* (*jack_port_get_buffer_fun_def)(jack_port_t* port, jack_nframes_t frames);
  202. static jack_port_get_buffer_fun_def jack_port_get_buffer_fun = 0;
  203. EXPORT void* jack_port_get_buffer(jack_port_t* port, jack_nframes_t frames)
  204. {
  205. return (*jack_port_get_buffer_fun)(port, frames);
  206. }
  207. typedef const char* (*jack_port_name_fun_def)(const jack_port_t* port);
  208. static jack_port_name_fun_def jack_port_name_fun = 0;
  209. EXPORT const char* jack_port_name(const jack_port_t* port)
  210. {
  211. return (*jack_port_name_fun)(port);
  212. }
  213. typedef const char* (*jack_port_short_name_fun_def) (const jack_port_t* port);
  214. static jack_port_short_name_fun_def jack_port_short_name_fun = 0;
  215. EXPORT const char* jack_port_short_name(const jack_port_t* port)
  216. {
  217. return (*jack_port_short_name_fun)(port);
  218. }
  219. typedef int (*jack_port_flags_fun_def)(const jack_port_t* port);
  220. static jack_port_flags_fun_def jack_port_flags_fun = 0;
  221. EXPORT int jack_port_flags(const jack_port_t* port)
  222. {
  223. return (*jack_port_flags_fun)(port);
  224. }
  225. typedef const char* (*jack_port_type_fun_def)(const jack_port_t* port);
  226. static jack_port_type_fun_def jack_port_type_fun = 0;
  227. EXPORT const char* jack_port_type(const jack_port_t* port)
  228. {
  229. return (*jack_port_type_fun)(port);
  230. }
  231. typedef int (*jack_port_connected_fun_def)(const jack_port_t* port);
  232. static jack_port_connected_fun_def jack_port_connected_fun = 0;
  233. EXPORT int jack_port_connected(const jack_port_t* port)
  234. {
  235. return (*jack_port_connected_fun)(port);
  236. }
  237. typedef int (*jack_port_connected_to_fun_def)(const jack_port_t* port, const char* portname);
  238. static jack_port_connected_to_fun_def jack_port_connected_to_fun = 0;
  239. EXPORT int jack_port_connected_to(const jack_port_t* port, const char* portname)
  240. {
  241. return (*jack_port_connected_to_fun)(port, portname);
  242. }
  243. typedef int (*jack_port_tie_fun_def)(jack_port_t* src, jack_port_t* dst);
  244. static jack_port_tie_fun_def jack_port_tie_fun = 0;
  245. EXPORT int jack_port_tie(jack_port_t* src, jack_port_t* dst)
  246. {
  247. return (*jack_port_tie_fun)(src, dst);
  248. }
  249. typedef int (*jack_port_untie_fun_def)(jack_port_t* port);
  250. static jack_port_untie_fun_def jack_port_untie_fun = 0;
  251. EXPORT int jack_port_untie(jack_port_t* port)
  252. {
  253. return (*jack_port_untie_fun)(port);
  254. }
  255. typedef jack_nframes_t (*jack_port_get_latency_fun_def)(jack_port_t* port);
  256. static jack_port_get_latency_fun_def jack_port_get_latency_fun = 0;
  257. EXPORT jack_nframes_t jack_port_get_latency(jack_port_t* port)
  258. {
  259. return (*jack_port_get_latency)(port);
  260. }
  261. typedef void (*jack_port_set_latency_fun_def)(jack_port_t* port, jack_nframes_t frames);
  262. static jack_port_set_latency_fun_def jack_port_set_latency_fun = 0;
  263. EXPORT void jack_port_set_latency(jack_port_t* port, jack_nframes_t frames)
  264. {
  265. (*jack_port_set_latency_fun)(port, frames);
  266. }
  267. typedef int (*jack_recompute_total_latency_fun_def)(jack_client_t* ext_client, jack_port_t* port);
  268. static jack_recompute_total_latency_fun_def jack_recompute_total_latency_fun = 0;
  269. EXPORT int jack_recompute_total_latency(jack_client_t* ext_client, jack_port_t* port)
  270. {
  271. return (*jack_recompute_total_latency_fun)(ext_client, port);
  272. }
  273. typedef int (*jack_recompute_total_latencies_fun_def)(jack_client_t* ext_client);
  274. static jack_recompute_total_latencies_fun_def jack_recompute_total_latencies_fun = 0;
  275. EXPORT int jack_recompute_total_latencies(jack_client_t* ext_client)
  276. {
  277. return (*jack_recompute_total_latencies_fun)(ext_client);
  278. }
  279. typedef int (*jack_port_set_name_fun_def)(jack_port_t* port, const char* name);
  280. static jack_port_set_name_fun_def jack_port_set_name_fun = 0;
  281. EXPORT int jack_port_set_name(jack_port_t* port, const char* name)
  282. {
  283. return (*jack_port_set_name_fun)(port, name);
  284. }
  285. typedef int (*jack_port_request_monitor_fun_def)(jack_port_t* port, int onoff);
  286. static jack_port_request_monitor_fun_def jack_port_request_monitor_fun = 0;
  287. EXPORT int jack_port_request_monitor(jack_port_t* port, int onoff)
  288. {
  289. return (*jack_port_request_monitor_fun)(port, onoff);
  290. }
  291. typedef int (*jack_port_request_monitor_by_name_fun_def)(jack_client_t* ext_client, const char* port_name, int onoff);
  292. static jack_port_request_monitor_by_name_fun_def jack_port_request_monitor_by_name_fun = 0;
  293. EXPORT int jack_port_request_monitor_by_name(jack_client_t* ext_client, const char* port_name, int onoff)
  294. {
  295. return (*jack_port_request_monitor_by_name_fun)(ext_client, port_name, onoff);
  296. }
  297. typedef int (*jack_port_ensure_monitor_fun_def)(jack_port_t* port, int onoff);
  298. static jack_port_ensure_monitor_fun_def jack_port_ensure_monitor_fun = 0;
  299. EXPORT int jack_port_ensure_monitor(jack_port_t* port, int onoff)
  300. {
  301. return (*jack_port_ensure_monitor_fun)(port, onoff);
  302. }
  303. typedef int (*jack_port_monitoring_input_fun_def)(jack_port_t* port);
  304. static jack_port_monitoring_input_fun_def jack_port_monitoring_input_fun = 0;
  305. EXPORT int jack_port_monitoring_input(jack_port_t* port)
  306. {
  307. return (*jack_port_monitoring_input_fun)(port);
  308. }
  309. typedef int (*jack_is_realtime_fun_def)(jack_client_t* ext_client);
  310. static jack_is_realtime_fun_def jack_is_realtime_fun = 0;
  311. EXPORT int jack_is_realtime(jack_client_t* ext_client)
  312. {
  313. return (*jack_is_realtime_fun)(ext_client);
  314. }
  315. typedef void (*shutdown_fun)(void* arg);
  316. typedef void (*jack_on_shutdown_fun_def)(jack_client_t* ext_client, shutdown_fun callback, void* arg);
  317. static jack_on_shutdown_fun_def jack_on_shutdown_fun = 0;
  318. EXPORT void jack_on_shutdown(jack_client_t* ext_client, shutdown_fun callback, void* arg)
  319. {
  320. return (*jack_on_shutdown_fun)(ext_client, callback, arg);
  321. }
  322. typedef int (*jack_set_process_callback_fun_def)(jack_client_t* ext_client, JackProcessCallback callback, void* arg);
  323. static jack_set_process_callback_fun_def jack_set_process_callback_fun = 0;
  324. EXPORT int jack_set_process_callback(jack_client_t* ext_client, JackProcessCallback callback, void* arg)
  325. {
  326. return (*jack_set_process_callback_fun)(ext_client, callback, arg);
  327. }
  328. typedef int (*jack_set_freewheel_callback_fun_def)(jack_client_t* ext_client, JackFreewheelCallback freewheel_callback, void* arg);
  329. static jack_set_freewheel_callback_fun_def jack_set_freewheel_callback_fun = 0;
  330. EXPORT int jack_set_freewheel_callback(jack_client_t* ext_client, JackFreewheelCallback freewheel_callback, void* arg)
  331. {
  332. return (*jack_set_freewheel_callback_fun)(ext_client, freewheel_callback, arg);
  333. }
  334. typedef int (*jack_set_freewheel_fun_def)(jack_client_t* ext_client, int onoff);
  335. static jack_set_freewheel_fun_def jack_set_freewheel_fun = 0;
  336. EXPORT int jack_set_freewheel(jack_client_t* ext_client, int onoff)
  337. {
  338. return (*jack_set_freewheel_fun)(ext_client, onoff);
  339. }
  340. typedef int (*jack_set_buffer_size_fun_def)(jack_client_t* ext_client, jack_nframes_t buffer_size);
  341. static jack_set_buffer_size_fun_def jack_set_buffer_size_fun = 0;
  342. EXPORT int jack_set_buffer_size(jack_client_t* ext_client, jack_nframes_t buffer_size)
  343. {
  344. return (*jack_set_buffer_size_fun)(ext_client, buffer_size);
  345. }
  346. typedef int (*jack_set_buffer_size_callback_fun_def)(jack_client_t* ext_client, JackBufferSizeCallback bufsize_callback, void* arg);
  347. static jack_set_buffer_size_callback_fun_def jack_set_buffer_size_callback_fun = 0;
  348. EXPORT int jack_set_buffer_size_callback(jack_client_t* ext_client, JackBufferSizeCallback bufsize_callback, void* arg)
  349. {
  350. return (*jack_set_buffer_size_callback_fun)(ext_client, bufsize_callback, arg);
  351. }
  352. typedef int (*jack_set_sample_rate_callback_fun_def)(jack_client_t* ext_client, JackSampleRateCallback srate_callback, void* arg);
  353. static jack_set_sample_rate_callback_fun_def jack_set_sample_rate_callback_fun = 0;
  354. EXPORT int jack_set_sample_rate_callback(jack_client_t* ext_client, JackSampleRateCallback srate_callback, void* arg)
  355. {
  356. return (*jack_set_sample_rate_callback_fun)(ext_client, srate_callback, arg);
  357. }
  358. typedef int (*jack_set_client_registration_callback_fun_def)(jack_client_t* ext_client, JackClientRegistrationCallback registration_callback, void* arg);
  359. static jack_set_client_registration_callback_fun_def jack_set_client_registration_callback_fun = 0;
  360. EXPORT int jack_set_client_registration_callback(jack_client_t* ext_client, JackClientRegistrationCallback registration_callback, void* arg)
  361. {
  362. return (*jack_set_client_registration_callback_fun)(ext_client, registration_callback, arg);
  363. }
  364. typedef int (*jack_set_port_registration_callback_fun_def)(jack_client_t* ext_client, JackPortRegistrationCallback registration_callback, void* arg);
  365. static jack_set_port_registration_callback_fun_def jack_set_port_registration_callback_fun = 0;
  366. EXPORT int jack_set_port_registration_callback(jack_client_t* ext_client, JackPortRegistrationCallback registration_callback, void* arg)
  367. {
  368. return (*jack_set_port_registration_callback_fun)(ext_client, registration_callback, arg);
  369. }
  370. typedef int (*jack_set_port_connect_callback_fun_def)(jack_client_t* ext_client, JackPortConnectCallback connect_callback, void* arg);
  371. static jack_set_port_connect_callback_fun_def jack_set_port_connect_callback_fun = 0;
  372. EXPORT int jack_set_port_connect_callback(jack_client_t* ext_client, JackPortConnectCallback connect_callback, void* arg)
  373. {
  374. return (*jack_set_port_connect_callback_fun)(ext_client, connect_callback, arg);
  375. }
  376. typedef int (*jack_set_graph_order_callback_fun_def)(jack_client_t* ext_client, JackGraphOrderCallback graph_callback, void* arg);
  377. static jack_set_graph_order_callback_fun_def jack_set_graph_order_callback_fun = 0;
  378. EXPORT int jack_set_graph_order_callback(jack_client_t* ext_client, JackGraphOrderCallback graph_callback, void* arg)
  379. {
  380. return (*jack_set_graph_order_callback_fun)(ext_client, graph_callback, arg);
  381. }
  382. typedef int (*jack_set_xrun_callback_fun_def)(jack_client_t* ext_client, JackXRunCallback xrun_callback, void* arg);
  383. static jack_set_xrun_callback_fun_def jack_set_xrun_callback_fun = 0;
  384. EXPORT int jack_set_xrun_callback(jack_client_t* ext_client, JackXRunCallback xrun_callback, void* arg)
  385. {
  386. return (*jack_set_xrun_callback_fun)(ext_client, xrun_callback, arg);
  387. }
  388. typedef int (*jack_set_thread_init_callback_fun_def)(jack_client_t* ext_client, JackThreadInitCallback init_callback, void *arg);
  389. static jack_set_thread_init_callback_fun_def jack_set_thread_init_callback_fun = 0;
  390. EXPORT int jack_set_thread_init_callback(jack_client_t* ext_client, JackThreadInitCallback init_callback, void *arg)
  391. {
  392. return (*jack_set_thread_init_callback_fun)(ext_client, init_callback, arg);
  393. }
  394. typedef int (*jack_activate_fun_def)(jack_client_t* ext_client);
  395. static jack_activate_fun_def jack_activate_fun = 0;
  396. EXPORT int jack_activate(jack_client_t* ext_client)
  397. {
  398. return (*jack_activate_fun)(ext_client);
  399. }
  400. typedef int (*jack_deactivate_fun_def)(jack_client_t* ext_client);
  401. static jack_deactivate_fun_def jack_deactivate_fun = 0;
  402. EXPORT int jack_deactivate(jack_client_t* ext_client)
  403. {
  404. return (*jack_deactivate_fun)(ext_client);
  405. }
  406. typedef jack_port_t* (*jack_port_register_fun_def)(jack_client_t* ext_client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size);
  407. static jack_port_register_fun_def jack_port_register_fun = 0;
  408. EXPORT jack_port_t* jack_port_register(jack_client_t* ext_client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size)
  409. {
  410. return (*jack_port_register_fun)(ext_client, port_name, port_type, flags, buffer_size);
  411. }
  412. typedef int (*jack_port_unregister_fun_def)(jack_client_t* ext_client, jack_port_t* port);
  413. static jack_port_unregister_fun_def jack_port_unregister_fun = 0;
  414. EXPORT int jack_port_unregister(jack_client_t* ext_client, jack_port_t* port)
  415. {
  416. return (*jack_port_unregister_fun)(ext_client, port);
  417. }
  418. typedef int (*jack_port_is_mine_fun_def)(const jack_client_t* ext_client, const jack_port_t* port);
  419. static jack_port_is_mine_fun_def jack_port_is_mine_fun = 0;
  420. EXPORT int jack_port_is_mine(const jack_client_t* ext_client, const jack_port_t* port)
  421. {
  422. return (*jack_port_is_mine_fun)(ext_client, port);
  423. }
  424. typedef const char** (*jack_port_get_connections_fun_def)(const jack_port_t* port);
  425. static jack_port_get_connections_fun_def jack_port_get_connections_fun = 0;
  426. EXPORT const char** jack_port_get_connections(const jack_port_t* port)
  427. {
  428. return (*jack_port_get_connections_fun)(port);
  429. }
  430. // Calling client does not need to "own" the port
  431. typedef const char** (*jack_port_get_all_connections_fun_def)(const jack_client_t* ext_client, const jack_port_t* port);
  432. static jack_port_get_all_connections_fun_def jack_port_get_all_connections_fun = 0;
  433. EXPORT const char** jack_port_get_all_connections(const jack_client_t* ext_client, const jack_port_t* port)
  434. {
  435. return (*jack_port_get_all_connections_fun)(ext_client, port);
  436. }
  437. typedef jack_nframes_t (*jack_port_get_total_latency_fun_def)(jack_client_t* ext_client, jack_port_t* port);
  438. static jack_port_get_total_latency_fun_def jack_port_get_total_latency_fun = 0;
  439. EXPORT jack_nframes_t jack_port_get_total_latency(jack_client_t* ext_client, jack_port_t* port)
  440. {
  441. return (*jack_port_get_total_latency_fun)(ext_client, port);
  442. }
  443. typedef int (*jack_connect_fun_def)(jack_client_t* ext_client, const char* src, const char* dst);
  444. static jack_connect_fun_def jack_connect_fun = 0;
  445. EXPORT int jack_connect(jack_client_t* ext_client, const char* src, const char* dst)
  446. {
  447. return (*jack_connect_fun)(ext_client, src, dst);
  448. }
  449. typedef int (*jack_disconnect_fun_def)(jack_client_t* ext_client, const char* src, const char* dst);
  450. static jack_disconnect_fun_def jack_disconnect_fun = 0;
  451. EXPORT int jack_disconnect(jack_client_t* ext_client, const char* src, const char* dst)
  452. {
  453. return (*jack_disconnect_fun)(ext_client, src, dst);
  454. }
  455. typedef int (*jack_port_connect_fun_def)(jack_client_t* ext_client, jack_port_t* src, jack_port_t* dst);
  456. static jack_port_connect_fun_def jack_port_connect_fun = 0;
  457. EXPORT int jack_port_connect(jack_client_t* ext_client, jack_port_t* src, jack_port_t* dst)
  458. {
  459. return (*jack_port_connect_fun)(ext_client, src, dst);
  460. }
  461. typedef int (*jack_port_disconnect_fun_def)(jack_client_t* ext_client, jack_port_t* src);
  462. static jack_port_disconnect_fun_def jack_port_disconnect_fun = 0;
  463. EXPORT int jack_port_disconnect(jack_client_t* ext_client, jack_port_t* src)
  464. {
  465. return (*jack_port_disconnect_fun)(ext_client, src);
  466. }
  467. typedef jack_nframes_t (*jack_get_sample_rate_fun_def)(jack_client_t* ext_client);
  468. static jack_get_sample_rate_fun_def jack_get_sample_rate_fun = 0;
  469. EXPORT jack_nframes_t jack_get_sample_rate(jack_client_t* ext_client)
  470. {
  471. return (*jack_get_sample_rate_fun)(ext_client);
  472. }
  473. typedef jack_nframes_t (*jack_get_buffer_size_fun_def)(jack_client_t* ext_client);
  474. static jack_get_buffer_size_fun_def jack_get_buffer_size_fun = 0;
  475. EXPORT jack_nframes_t jack_get_buffer_size(jack_client_t* ext_client)
  476. {
  477. return (*jack_get_buffer_size_fun)(ext_client);
  478. }
  479. typedef const char** (*jack_get_ports_fun_def)(jack_client_t* ext_client, const char* port_name_pattern, const char* type_name_pattern, unsigned long flags);
  480. static jack_get_ports_fun_def jack_get_ports_fun = 0;
  481. EXPORT const char** jack_get_ports(jack_client_t* ext_client, const char* port_name_pattern, const char* type_name_pattern, unsigned long flags)
  482. {
  483. return (*jack_get_ports_fun)(ext_client, port_name_pattern, type_name_pattern, flags);
  484. }
  485. typedef jack_port_t* (*jack_port_by_name_fun_def)(jack_client_t* ext_client, const char* portname);
  486. static jack_port_by_name_fun_def jack_port_by_name_fun = 0;
  487. EXPORT jack_port_t* jack_port_by_name(jack_client_t* ext_client, const char* portname)
  488. {
  489. return (*jack_port_by_name_fun)(ext_client, portname);
  490. }
  491. typedef jack_port_t* (*jack_port_by_id_fun_def)(const jack_client_t* ext_client, jack_port_id_t id);
  492. static jack_port_by_id_fun_def jack_port_by_id_fun = 0;
  493. EXPORT jack_port_t* jack_port_by_id(const jack_client_t* ext_client, jack_port_id_t id)
  494. {
  495. return (*jack_port_by_id_fun)(ext_client, id);
  496. }
  497. typedef int (*jack_engine_takeover_timebase_fun_def)(jack_client_t* ext_client);
  498. static jack_engine_takeover_timebase_fun_def jack_engine_takeover_timebase_fun = 0;
  499. EXPORT int jack_engine_takeover_timebase(jack_client_t* ext_client)
  500. {
  501. return (*jack_engine_takeover_timebase_fun)(ext_client);
  502. }
  503. typedef jack_nframes_t (*jack_frames_since_cycle_start_fun_def)(const jack_client_t* ext_client);
  504. static jack_frames_since_cycle_start_fun_def jack_frames_since_cycle_start_fun = 0;
  505. EXPORT jack_nframes_t jack_frames_since_cycle_start(const jack_client_t* ext_client)
  506. {
  507. return (*jack_frames_since_cycle_start_fun)(ext_client);
  508. }
  509. typedef jack_time_t (*jack_get_time_fun_def)();
  510. static jack_get_time_fun_def jack_get_time_fun = 0;
  511. EXPORT jack_time_t jack_get_time()
  512. {
  513. return (*jack_get_time_fun)();
  514. }
  515. typedef jack_nframes_t (*jack_time_to_frames_fun_def)(const jack_client_t* ext_client, jack_time_t time);
  516. static jack_time_to_frames_fun_def jack_time_to_frames_fun = 0;
  517. EXPORT jack_nframes_t jack_time_to_frames(const jack_client_t* ext_client, jack_time_t time)
  518. {
  519. return (*jack_time_to_frames_fun)(ext_client, time);
  520. }
  521. typedef jack_nframes_t (*jack_frame_time_fun_def)(const jack_client_t* ext_client);
  522. static jack_frame_time_fun_def jack_frame_time_fun = 0;
  523. EXPORT jack_nframes_t jack_frame_time(const jack_client_t* ext_client)
  524. {
  525. return (*jack_frame_time_fun)(ext_client);
  526. }
  527. typedef jack_nframes_t (*jack_last_frame_time_fun_def)(const jack_client_t* ext_client);
  528. static jack_last_frame_time_fun_def jack_last_frame_time_fun = 0;
  529. EXPORT jack_nframes_t jack_last_frame_time(const jack_client_t* ext_client)
  530. {
  531. return (*jack_last_frame_time_fun)(ext_client);
  532. }
  533. typedef float (*jack_cpu_load_fun_def)(jack_client_t* ext_client);
  534. static jack_cpu_load_fun_def jack_cpu_load_fun = 0;
  535. EXPORT float jack_cpu_load(jack_client_t* ext_client)
  536. {
  537. return (*jack_cpu_load_fun)(ext_client);
  538. }
  539. typedef pthread_t (*jack_client_thread_id_fun_def)(jack_client_t* ext_client);
  540. static jack_client_thread_id_fun_def jack_client_thread_id_fun = 0;
  541. EXPORT pthread_t jack_client_thread_id(jack_client_t* ext_client)
  542. {
  543. return (*jack_client_thread_id_fun)(ext_client);
  544. }
  545. typedef char* (*jack_get_client_name_fun_def)(jack_client_t* ext_client);
  546. static jack_get_client_name_fun_def jack_get_client_name_fun = 0;
  547. EXPORT char* jack_get_client_name (jack_client_t* ext_client)
  548. {
  549. return (*jack_get_client_name_fun)(ext_client);
  550. }
  551. typedef int (*jack_client_name_size_fun_def)(void);
  552. static jack_client_name_size_fun_def jack_client_name_size_fun = 0;
  553. EXPORT int jack_client_name_size(void)
  554. {
  555. return (*jack_client_name_size_fun)();
  556. }
  557. typedef int (*jack_port_name_size_fun_def)(void);
  558. static jack_port_name_size_fun_def jack_port_name_size_fun = 0;
  559. EXPORT int jack_port_name_size(void)
  560. {
  561. return (*jack_port_name_size_fun)();
  562. }
  563. // transport.h
  564. typedef int (*jack_release_timebase_fun_def)(jack_client_t* ext_client);
  565. static jack_release_timebase_fun_def jack_release_timebase_fun = 0;
  566. EXPORT int jack_release_timebase(jack_client_t* ext_client)
  567. {
  568. return (*jack_release_timebase_fun)(ext_client);
  569. }
  570. typedef int (*jack_set_sync_callback_fun_def)(jack_client_t* ext_client, JackSyncCallback sync_callback, void *arg);
  571. static jack_set_sync_callback_fun_def jack_set_sync_callback_fun = 0;
  572. EXPORT int jack_set_sync_callback(jack_client_t* ext_client, JackSyncCallback sync_callback, void *arg)
  573. {
  574. return (*jack_set_sync_callback_fun)(ext_client, sync_callback, arg);
  575. }
  576. typedef int (*jack_set_sync_timeout_fun_def)(jack_client_t* ext_client, jack_time_t timeout);
  577. static jack_set_sync_timeout_fun_def jack_set_sync_timeout_fun = 0;
  578. EXPORT int jack_set_sync_timeout(jack_client_t* ext_client, jack_time_t timeout)
  579. {
  580. return (*jack_set_sync_timeout_fun)(ext_client, timeout);
  581. }
  582. typedef int (*jack_set_timebase_callback_fun_def)(jack_client_t* ext_client, int conditional, JackTimebaseCallback timebase_callback, void* arg);
  583. static jack_set_timebase_callback_fun_def jack_set_timebase_callback_fun = 0;
  584. EXPORT int jack_set_timebase_callback(jack_client_t* ext_client, int conditional, JackTimebaseCallback timebase_callback, void* arg)
  585. {
  586. return (*jack_set_timebase_callback_fun)(ext_client, conditional, timebase_callback, arg);
  587. }
  588. typedef int (*jack_transport_locate_fun_def)(jack_client_t* ext_client, jack_nframes_t frame);
  589. static jack_transport_locate_fun_def jack_transport_locate_fun = 0;
  590. EXPORT int jack_transport_locate(jack_client_t* ext_client, jack_nframes_t frame)
  591. {
  592. return (*jack_transport_locate_fun)(ext_client, frame);
  593. }
  594. typedef jack_transport_state_t (*jack_transport_query_fun_def)(const jack_client_t* ext_client, jack_position_t* pos);
  595. static jack_transport_query_fun_def jack_transport_query_fun = 0;
  596. EXPORT jack_transport_state_t jack_transport_query(const jack_client_t* ext_client, jack_position_t* pos)
  597. {
  598. return (*jack_transport_query_fun)(ext_client, pos);
  599. }
  600. typedef jack_nframes_t (*jack_get_current_transport_frame_fun_def)(const jack_client_t* ext_client);
  601. static jack_get_current_transport_frame_fun_def jack_get_current_transport_frame_fun = 0;
  602. EXPORT jack_nframes_t jack_get_current_transport_frame(const jack_client_t* ext_client)
  603. {
  604. return (*jack_get_current_transport_frame_fun)(ext_client);
  605. }
  606. typedef int (*jack_transport_reposition_fun_def)(jack_client_t* ext_client, jack_position_t* pos);
  607. static jack_transport_reposition_fun_def jack_transport_reposition_fun = 0;
  608. EXPORT int jack_transport_reposition(jack_client_t* ext_client, jack_position_t* pos)
  609. {
  610. return (*jack_transport_reposition_fun)(ext_client, pos);
  611. }
  612. typedef void (*jack_transport_start_fun_def)(jack_client_t* ext_client);
  613. static jack_transport_start_fun_def jack_transport_start_fun = 0;
  614. EXPORT void jack_transport_start(jack_client_t* ext_client)
  615. {
  616. return (*jack_transport_start_fun)(ext_client);
  617. }
  618. typedef void (*jack_transport_stop_fun_def)(jack_client_t* ext_client);
  619. static jack_transport_stop_fun_def jack_transport_stop_fun = 0;
  620. EXPORT void jack_transport_stop(jack_client_t* ext_client)
  621. {
  622. return (*jack_transport_stop_fun)(ext_client);
  623. }
  624. // deprecated
  625. typedef void (*jack_get_transport_info_fun_def)(jack_client_t* ext_client, jack_transport_info_t* tinfo);
  626. static jack_get_transport_info_fun_def jack_get_transport_info_fun = 0;
  627. EXPORT void jack_get_transport_info(jack_client_t* ext_client, jack_transport_info_t* tinfo)
  628. {
  629. (*jack_get_transport_info_fun)(ext_client, tinfo);
  630. }
  631. typedef void (*jack_set_transport_info_fun_def)(jack_client_t* ext_client, jack_transport_info_t* tinfo);
  632. static jack_set_transport_info_fun_def jack_set_transport_info_fun = 0;
  633. EXPORT void jack_set_transport_info(jack_client_t* ext_client, jack_transport_info_t* tinfo)
  634. {
  635. (*jack_set_transport_info_fun)(ext_client, tinfo);
  636. }
  637. // statistics.h
  638. typedef float (*jack_get_max_delayed_usecs_fun_def)(jack_client_t* ext_client);
  639. static jack_get_max_delayed_usecs_fun_def jack_get_max_delayed_usecs_fun = 0;
  640. EXPORT float jack_get_max_delayed_usecs(jack_client_t* ext_client)
  641. {
  642. return (*jack_get_max_delayed_usecs_fun)(ext_client);
  643. }
  644. typedef float (*jack_get_xrun_delayed_usecs_fun_def)(jack_client_t* ext_client);
  645. static jack_get_xrun_delayed_usecs_fun_def jack_get_xrun_delayed_usecs_fun = 0;
  646. EXPORT float jack_get_xrun_delayed_usecs(jack_client_t* ext_client)
  647. {
  648. return (*jack_get_xrun_delayed_usecs_fun)(ext_client);
  649. }
  650. typedef void (*jack_reset_max_delayed_usecs_fun_def)(jack_client_t* ext_client);
  651. static jack_reset_max_delayed_usecs_fun_def jack_reset_max_delayed_usecs_fun = 0;
  652. EXPORT void jack_reset_max_delayed_usecs(jack_client_t* ext_client)
  653. {
  654. (*jack_reset_max_delayed_usecs)(ext_client);
  655. }
  656. // thread.h
  657. typedef int (*jack_acquire_real_time_scheduling_fun_def)(pthread_t thread, int priority);
  658. static jack_acquire_real_time_scheduling_fun_def jack_acquire_real_time_scheduling_fun = 0;
  659. EXPORT int jack_acquire_real_time_scheduling(pthread_t thread, int priority)
  660. {
  661. return (*jack_acquire_real_time_scheduling_fun)(thread, priority);
  662. }
  663. typedef void *(*start_routine)(void*);
  664. typedef int (*jack_client_create_thread_fun_def)(jack_client_t* client,
  665. pthread_t *thread,
  666. int priority,
  667. int realtime, // boolean
  668. start_routine callback,
  669. void *arg);
  670. static jack_client_create_thread_fun_def jack_client_create_thread_fun = 0;
  671. EXPORT int jack_client_create_thread(jack_client_t* client,
  672. pthread_t *thread,
  673. int priority,
  674. int realtime, // boolean
  675. start_routine callback,
  676. void *arg)
  677. {
  678. return (*jack_client_create_thread_fun)(client, thread, priority, realtime, callback, arg);
  679. }
  680. typedef int (*jack_drop_real_time_scheduling_fun_def)(pthread_t thread);
  681. static jack_drop_real_time_scheduling_fun_def jack_drop_real_time_scheduling_fun = 0;
  682. EXPORT int jack_drop_real_time_scheduling(pthread_t thread)
  683. {
  684. return (*jack_drop_real_time_scheduling_fun)(thread);
  685. }
  686. // intclient.h
  687. typedef char* (*jack_get_internal_client_name_fun_def)(jack_client_t* ext_client, jack_intclient_t intclient);
  688. static jack_get_internal_client_name_fun_def jack_get_internal_client_name_fun = 0;
  689. EXPORT char* jack_get_internal_client_name(jack_client_t* ext_client, jack_intclient_t intclient)
  690. {
  691. return (*jack_get_internal_client_name_fun)(ext_client, intclient);
  692. }
  693. typedef jack_intclient_t (*jack_internal_client_handle_fun_def)(jack_client_t* ext_client, const char* client_name, jack_status_t* status);
  694. static jack_internal_client_handle_fun_def jack_internal_client_handle_fun = 0;
  695. EXPORT jack_intclient_t jack_internal_client_handle(jack_client_t* ext_client, const char* client_name, jack_status_t* status)
  696. {
  697. return (*jack_internal_client_handle_fun)(ext_client, client_name, status);
  698. }
  699. typedef jack_intclient_t (*jack_internal_client_load_fun_def)(jack_client_t* ext_client, const char* client_name, jack_options_t options, jack_status_t* status, ...);
  700. static jack_internal_client_load_fun_def jack_internal_client_load_fun = 0;
  701. EXPORT jack_intclient_t jack_internal_client_load(jack_client_t* ext_client, const char* client_name, jack_options_t options, jack_status_t* status, ...)
  702. {
  703. va_list ap;
  704. va_start(ap, status);
  705. jack_intclient_t res = (*jack_internal_client_load_fun)(ext_client, client_name, options, status, ap);
  706. va_end(ap);
  707. return res;
  708. }
  709. typedef jack_status_t (*jack_internal_client_unload_fun_def)(jack_client_t* ext_client, jack_intclient_t intclient);
  710. static jack_internal_client_unload_fun_def jack_internal_client_unload_fun = 0;
  711. EXPORT jack_status_t jack_internal_client_unload(jack_client_t* ext_client, jack_intclient_t intclient)
  712. {
  713. return (*jack_internal_client_unload_fun)(ext_client, intclient);
  714. }
  715. // client
  716. static long gClientCount = 0;
  717. static void* gLibrary = 0;
  718. static bool init_library();
  719. static bool open_library();
  720. static void close_library();
  721. typedef jack_client_t * (*jack_client_open_fun_def)(const char *client_name, jack_options_t options, jack_status_t *status, ...);
  722. static jack_client_open_fun_def jack_client_open_fun = 0;
  723. EXPORT jack_client_t * jack_client_open(const char *client_name, jack_options_t options, jack_status_t *status, ...)
  724. {
  725. // Library check...
  726. if (!open_library())
  727. return 0;
  728. va_list ap;
  729. va_start(ap, status);
  730. jack_client_t* res = (*jack_client_open_fun)(client_name, options, status, ap);
  731. va_end(ap);
  732. return res;
  733. }
  734. typedef jack_client_t * (*jack_client_new_fun_def)(const char *client_name);
  735. static jack_client_new_fun_def jack_client_new_fun = 0;
  736. EXPORT jack_client_t * jack_client_new(const char *client_name)
  737. {
  738. // Library check...
  739. if (!open_library())
  740. return 0;
  741. return (*jack_client_new_fun)(client_name);
  742. }
  743. typedef int (*jack_client_close_fun_def)(jack_client_t *client);
  744. static jack_client_close_fun_def jack_client_close_fun = 0;
  745. EXPORT int jack_client_close(jack_client_t *client)
  746. {
  747. int res = (*jack_client_close_fun)(client);
  748. close_library();
  749. return res;
  750. }
  751. // Library loader
  752. static bool get_jack_library_in_directory(const char* dir_name, char* library_name)
  753. {
  754. struct dirent * dir_entry;
  755. DIR * dir_stream = opendir(dir_name);
  756. if (!dir_stream)
  757. return false;
  758. while ((dir_entry = readdir(dir_stream))) {
  759. if (strncmp("libjack.so", dir_entry->d_name, 10) == 0) {
  760. strcpy(library_name, dir_entry->d_name);
  761. closedir(dir_stream);
  762. return true;
  763. }
  764. }
  765. closedir(dir_stream);
  766. return false;
  767. }
  768. static bool get_jack_library(char* library_name)
  769. {
  770. if (get_jack_library_in_directory("/usr/lib", library_name))
  771. return true;
  772. if (get_jack_library_in_directory("/usr/local/lib", library_name))
  773. return true;
  774. return false;
  775. }
  776. static bool open_library()
  777. {
  778. if (gClientCount++ == 0) {
  779. return init_library();
  780. } else {
  781. return true;
  782. }
  783. }
  784. static void close_library()
  785. {
  786. if (--gClientCount == 0) {
  787. dlclose(gLibrary);
  788. }
  789. }
  790. static bool check_client(void* library)
  791. {
  792. jack_client_t* client = 0;
  793. // Get "new", "open" and "close" entry points...
  794. jack_client_new_fun = (jack_client_new_fun_def)dlsym(library, "jack_client_new");
  795. jack_client_close_fun = (jack_client_close_fun_def)dlsym(library, "jack_client_close");
  796. jack_client_open_fun = (jack_client_open_fun_def)dlsym(gLibrary, "jack_client_open");
  797. // Try opening a client...
  798. if ((client = (*jack_client_new_fun)("dummy"))) { // jackd server is running....
  799. (*jack_client_close_fun)(client);
  800. return true;
  801. } else {
  802. return false;
  803. }
  804. }
  805. static bool init_library()
  806. {
  807. char library_name[64];
  808. void* jackLibrary = (get_jack_library(library_name)) ? dlopen(library_name, RTLD_LAZY) : 0;
  809. void* jackmpLibrary = dlopen("libjackmp.so", RTLD_LAZY);
  810. if (jackLibrary) {
  811. if (check_client(jackLibrary)) { // jackd is running...
  812. gLibrary = jackLibrary;
  813. if (jackmpLibrary) dlclose(jackmpLibrary);
  814. } else if (check_client(jackmpLibrary)) { // jackdmp is running...
  815. gLibrary = jackmpLibrary;
  816. if (jackLibrary) dlclose(jackLibrary);
  817. } else {
  818. goto error;
  819. }
  820. } else if (jackmpLibrary) {
  821. if (check_client(jackmpLibrary)) { // jackd is running...
  822. gLibrary = jackmpLibrary;
  823. } else {
  824. goto error;
  825. }
  826. } else {
  827. printf("Jack libraries not found, failure...\n");
  828. goto error;
  829. }
  830. // Load entry points...
  831. jack_port_get_buffer_fun = (jack_port_get_buffer_fun_def)dlsym(gLibrary, "jack_port_get_buffer");
  832. jack_port_name_fun = (jack_port_name_fun_def)dlsym(gLibrary, "jack_port_name");
  833. jack_port_short_name_fun = (jack_port_short_name_fun_def)dlsym(gLibrary, "jack_port_short_name");
  834. jack_port_flags_fun = (jack_port_flags_fun_def)dlsym(gLibrary, "jack_port_flags");
  835. jack_port_type_fun = (jack_port_type_fun_def)dlsym(gLibrary, "jack_port_type");
  836. jack_port_connected_fun = (jack_port_connected_fun_def)dlsym(gLibrary, "jack_port_connected");
  837. jack_port_connected_to_fun = (jack_port_connected_to_fun_def)dlsym(gLibrary, "jack_port_connected_to");
  838. jack_port_tie_fun = (jack_port_tie_fun_def)dlsym(gLibrary, "jack_port_tie");
  839. jack_port_untie_fun = (jack_port_untie_fun_def)dlsym(gLibrary, "jack_port_untie");
  840. jack_port_get_latency_fun = (jack_port_get_latency_fun_def)dlsym(gLibrary, "jack_port_get_latency");
  841. jack_port_set_latency_fun = (jack_port_set_latency_fun_def)dlsym(gLibrary, "jack_port_set_latency");
  842. jack_recompute_total_latency_fun = (jack_recompute_total_latency_fun_def)dlsym(gLibrary, "jack_recompute_total_latency");
  843. jack_recompute_total_latencies_fun = (jack_recompute_total_latencies_fun_def)dlsym(gLibrary, "jack_recompute_total_latencies");
  844. jack_port_set_name_fun = (jack_port_set_name_fun_def)dlsym(gLibrary, "jack_port_set_name");
  845. jack_port_request_monitor_fun = (jack_port_request_monitor_fun_def)dlsym(gLibrary, "jack_port_request_monitor");
  846. jack_port_request_monitor_by_name_fun = (jack_port_request_monitor_by_name_fun_def)dlsym(gLibrary, "jack_port_request_monitor_by_name");
  847. jack_port_ensure_monitor_fun = (jack_port_ensure_monitor_fun_def)dlsym(gLibrary, "jack_port_ensure_monitor");
  848. jack_port_monitoring_input_fun = (jack_port_monitoring_input_fun_def)dlsym(gLibrary, "jack_port_monitoring_input_fun");
  849. jack_is_realtime_fun = (jack_is_realtime_fun_def)dlsym(gLibrary, "jack_is_realtime");
  850. jack_on_shutdown_fun = (jack_on_shutdown_fun_def)dlsym(gLibrary, "jack_on_shutdown");
  851. jack_set_process_callback_fun = (jack_set_process_callback_fun_def)dlsym(gLibrary, "jack_set_process_callback");
  852. jack_set_freewheel_callback_fun = (jack_set_freewheel_callback_fun_def)dlsym(gLibrary, "jack_set_freewheel_callback");
  853. jack_set_freewheel_fun = (jack_set_freewheel_fun_def)dlsym(gLibrary, "jack_set_freewheel");
  854. jack_set_buffer_size_fun = (jack_set_buffer_size_fun_def)dlsym(gLibrary, "jack_set_buffer_size");
  855. jack_set_buffer_size_callback_fun = (jack_set_buffer_size_callback_fun_def)dlsym(gLibrary, "jack_set_buffer_size_callback");
  856. jack_set_sample_rate_callback_fun = (jack_set_sample_rate_callback_fun_def)dlsym(gLibrary, "jack_set_sample_rate_callback");
  857. jack_set_client_registration_callback_fun = (jack_set_client_registration_callback_fun_def)dlsym(gLibrary, "jack_set_client_registration_callback");
  858. jack_set_port_registration_callback_fun = (jack_set_port_registration_callback_fun_def)dlsym(gLibrary, "jack_set_port_registration_callback");
  859. jack_set_port_connect_callback_fun = (jack_set_port_connect_callback_fun_def)dlsym(gLibrary, "jack_set_port_connect_callback");
  860. jack_set_graph_order_callback_fun = (jack_set_graph_order_callback_fun_def)dlsym(gLibrary, "jack_set_graph_order_callback");
  861. jack_set_xrun_callback_fun = (jack_set_xrun_callback_fun_def)dlsym(gLibrary, "jack_set_xrun_callback");
  862. jack_set_thread_init_callback_fun = (jack_set_thread_init_callback_fun_def)dlsym(gLibrary, "jack_set_thread_init_callback");
  863. jack_activate_fun = (jack_activate_fun_def)dlsym(gLibrary, "jack_activate");
  864. jack_deactivate_fun = (jack_deactivate_fun_def)dlsym(gLibrary, "jack_deactivate");
  865. jack_port_register_fun = (jack_port_register_fun_def)dlsym(gLibrary, "jack_port_register");
  866. jack_port_unregister_fun = (jack_port_unregister_fun_def)dlsym(gLibrary, "jack_port_unregister");
  867. jack_port_is_mine_fun = (jack_port_is_mine_fun_def)dlsym(gLibrary, "jack_port_is_mine");
  868. jack_port_get_connections_fun = (jack_port_get_connections_fun_def)dlsym(gLibrary, "jack_port_get_connections");
  869. jack_port_get_all_connections_fun = (jack_port_get_all_connections_fun_def)dlsym(gLibrary, "jack_port_get_all_connections_fun");
  870. jack_port_get_total_latency_fun = (jack_port_get_total_latency_fun_def)dlsym(gLibrary, "jack_port_get_total_latency");
  871. jack_connect_fun = (jack_connect_fun_def)dlsym(gLibrary, "jack_connect");
  872. jack_disconnect_fun = (jack_disconnect_fun_def)dlsym(gLibrary, "jack_disconnect");
  873. jack_port_connect_fun = (jack_port_connect_fun_def)dlsym(gLibrary, "jack_port_connect");
  874. jack_port_disconnect_fun = (jack_port_disconnect_fun_def)dlsym(gLibrary, "jack_port_disconnect");
  875. jack_get_sample_rate_fun = (jack_get_sample_rate_fun_def)dlsym(gLibrary, "jack_get_sample_rate");
  876. jack_get_buffer_size_fun = (jack_get_buffer_size_fun_def)dlsym(gLibrary, "jack_get_buffer_size");
  877. jack_get_ports_fun = (jack_get_ports_fun_def)dlsym(gLibrary, "jack_get_ports");
  878. jack_port_by_name_fun = (jack_port_by_name_fun_def)dlsym(gLibrary, "jack_port_by_name");
  879. jack_port_by_id_fun = (jack_port_by_id_fun_def)dlsym(gLibrary, "jack_port_by_id");
  880. jack_engine_takeover_timebase_fun = (jack_engine_takeover_timebase_fun_def)dlsym(gLibrary, "jack_engine_takeover_timebase");
  881. jack_frames_since_cycle_start_fun = (jack_frames_since_cycle_start_fun_def)dlsym(gLibrary, "jack_frames_since_cycle_start");
  882. jack_get_time_fun = (jack_get_time_fun_def)dlsym(gLibrary, "jack_get_time");
  883. jack_time_to_frames_fun = (jack_time_to_frames_fun_def)dlsym(gLibrary, "jack_time_to_frames");
  884. jack_frame_time_fun = (jack_frame_time_fun_def)dlsym(gLibrary, "jack_frame_time");
  885. jack_last_frame_time_fun = (jack_last_frame_time_fun_def)dlsym(gLibrary, "jack_last_frame_time");
  886. jack_cpu_load_fun = (jack_cpu_load_fun_def)dlsym(gLibrary, "jack_cpu_load");
  887. jack_client_thread_id_fun = (jack_client_thread_id_fun_def)dlsym(gLibrary, "jack_client_thread_id");
  888. jack_get_client_name_fun = (jack_get_client_name_fun_def)dlsym(gLibrary, "jack_get_client_name");
  889. jack_port_name_size_fun = (jack_port_name_size_fun_def)dlsym(gLibrary, "jack_port_name_size");
  890. jack_client_name_size_fun = (jack_client_name_size_fun_def)dlsym(gLibrary, "jack_client_name_size");
  891. jack_release_timebase_fun = (jack_release_timebase_fun_def)dlsym(gLibrary, "jack_release_timebase");
  892. jack_set_sync_callback_fun = (jack_set_sync_callback_fun_def)dlsym(gLibrary, "jack_set_sync_callback");
  893. jack_set_sync_timeout_fun = (jack_set_sync_timeout_fun_def)dlsym(gLibrary, "jack_set_sync_timeout");
  894. jack_set_timebase_callback_fun = (jack_set_timebase_callback_fun_def)dlsym(gLibrary, "jack_set_timebase_callback");
  895. jack_transport_locate_fun = (jack_transport_locate_fun_def)dlsym(gLibrary, "jack_transport_locate_fun");
  896. jack_transport_query_fun = (jack_transport_query_fun_def)dlsym(gLibrary, "jack_transport_query");
  897. jack_get_current_transport_frame_fun = (jack_get_current_transport_frame_fun_def)dlsym(gLibrary, "jack_get_current_transport_frame");
  898. jack_transport_reposition_fun = (jack_transport_reposition_fun_def)dlsym(gLibrary, "jack_transport_reposition");
  899. jack_transport_start_fun = (jack_transport_start_fun_def)dlsym(gLibrary, "jack_transport_start");
  900. jack_transport_stop_fun = (jack_transport_stop_fun_def)dlsym(gLibrary, "jack_transport_stop");
  901. jack_get_transport_info_fun = (jack_get_transport_info_fun_def)dlsym(gLibrary, "jack_get_transport_info");
  902. jack_set_transport_info_fun = (jack_set_transport_info_fun_def)dlsym(gLibrary, "jack_set_transport_info");
  903. jack_get_max_delayed_usecs_fun = (jack_get_max_delayed_usecs_fun_def)dlsym(gLibrary, "jack_get_max_delayed_usecs");
  904. jack_get_xrun_delayed_usecs_fun = (jack_get_xrun_delayed_usecs_fun_def)dlsym(gLibrary, "jack_get_xrun_delayed_usecs");
  905. jack_reset_max_delayed_usecs_fun = (jack_reset_max_delayed_usecs_fun_def)dlsym(gLibrary, "jack_reset_max_delayed_usecs");
  906. jack_acquire_real_time_scheduling_fun = (jack_acquire_real_time_scheduling_fun_def)dlsym(gLibrary, "jack_acquire_real_time_scheduling");
  907. jack_client_create_thread_fun = (jack_client_create_thread_fun_def)dlsym(gLibrary, "jack_client_create_thread");
  908. jack_drop_real_time_scheduling_fun = (jack_drop_real_time_scheduling_fun_def)dlsym(gLibrary, "jack_drop_real_time_scheduling");
  909. jack_get_internal_client_name_fun = (jack_get_internal_client_name_fun_def)dlsym(gLibrary, "jack_get_internal_client_name");
  910. jack_internal_client_handle_fun = (jack_internal_client_handle_fun_def)dlsym(gLibrary, "jack_internal_client_handle");
  911. jack_internal_client_load_fun = (jack_internal_client_load_fun_def)dlsym(gLibrary, "jack_internal_client_load");
  912. jack_internal_client_unload_fun = (jack_internal_client_unload_fun_def)dlsym(gLibrary, "jack_internal_client_unload");
  913. jack_client_open_fun = (jack_client_open_fun_def)dlsym(gLibrary, "jack_client_open");
  914. jack_client_new_fun = (jack_client_new_fun_def)dlsym(gLibrary, "jack_client_new");
  915. jack_client_close_fun = (jack_client_close_fun_def)dlsym(gLibrary, "jack_client_close");
  916. return true;
  917. error:
  918. if (jackLibrary)
  919. dlclose(jackLibrary);
  920. if (jackmpLibrary)
  921. dlclose(jackmpLibrary);
  922. return false;
  923. }