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.

1234 lines
57KB

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