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.

1231 lines
56KB

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