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.

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