mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-27 15:03:01 +00:00
230 lines
10 KiB
C
230 lines
10 KiB
C
/* runtime/weak dynamic JACK linking
|
|
*
|
|
* (C) 2014 Robin Gareus <robin@gareus.org>
|
|
*
|
|
* The wrapped jack API itself is
|
|
* (C) 2001 Paul Davis
|
|
* (C) 2004 Jack O'Quin
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
#ifndef _WEAK_JACK_H
|
|
#define _WEAK_JACK_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/** check if libjack is available
|
|
*
|
|
* return 0 if libjack is dynamically linked of was
|
|
* successfully dl-opened. Otherwise:
|
|
*
|
|
* -1: library was not initialized
|
|
* -2: libjack was not found
|
|
* > 0 bitwise flags:
|
|
* 1: a required function was not found in libjack
|
|
* 2: jack_client_open was not found in libjack
|
|
*/
|
|
int have_libjack(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#ifdef USE_WEAK_JACK
|
|
|
|
/* <jack/jack.h> */
|
|
#define jack_client_close WJACK_client_close
|
|
#define jack_get_client_name WJACK_get_client_name
|
|
#define jack_get_sample_rate WJACK_get_sample_rate
|
|
#define jack_get_buffer_size WJACK_get_buffer_size
|
|
#define jack_frames_since_cycle_start WJACK_frames_since_cycle_start
|
|
#define jack_frame_time WJACK_frame_time
|
|
#define jack_last_frame_time WJACK_last_frame_time
|
|
#define jack_get_time WJACK_get_time
|
|
#define jack_cpu_load WJACK_cpu_load
|
|
#define jack_is_realtime WJACK_is_realtime
|
|
|
|
#define jack_client_name_size WJACK_client_name_size
|
|
|
|
#define jack_set_freewheel WJACK_set_freewheel
|
|
#define jack_set_buffer_size WJACK_set_buffer_size
|
|
|
|
#define jack_on_shutdown WJACK_on_shutdown
|
|
#define jack_on_info_shutdown WJACK_on_info_shutdown
|
|
#define jack_set_process_callback WJACK_set_process_callback
|
|
#define jack_set_freewheel_callback WJACK_set_freewheel_callback
|
|
#define jack_set_buffer_size_callback WJACK_set_buffer_size_callback
|
|
#define jack_set_sample_rate_callback WJACK_set_sample_rate_callback
|
|
#define jack_set_port_registration_callback WJACK_set_port_registration_callback
|
|
#define jack_set_port_connect_callback WJACK_set_port_connect_callback
|
|
#define jack_set_graph_order_callback WJACK_set_graph_order_callback
|
|
#define jack_set_xrun_callback WJACK_set_xrun_callback
|
|
#define jack_set_latency_callback WJACK_set_latency_callback
|
|
#define jack_set_error_function WJACK_set_error_function
|
|
#define jack_set_info_function WJACK_set_info_function
|
|
|
|
#define jack_activate WJACK_activate
|
|
#define jack_deactivate WJACK_deactivate
|
|
|
|
#define jack_recompute_total_latencies WJACK_recompute_total_latencies
|
|
#define jack_port_get_total_latency WJACK_port_get_total_latency
|
|
#define jack_port_get_latency_range WJACK_port_get_latency_range
|
|
#define jack_port_set_latency_range WJACK_port_set_latency_range
|
|
#define jack_port_get_buffer WJACK_port_get_buffer
|
|
#define jack_port_request_monitor WJACK_port_request_monitor
|
|
#define jack_port_ensure_monitor WJACK_port_ensure_monitor
|
|
#define jack_port_monitoring_input WJACK_port_monitoring_input
|
|
|
|
#define jack_port_name WJACK_port_name
|
|
#define jack_port_short_name WJACK_port_short_name
|
|
#define jack_port_flags WJACK_port_flags
|
|
#define jack_port_is_mine WJACK_port_is_mine
|
|
#define jack_port_connected WJACK_port_connected
|
|
#define jack_get_ports WJACK_get_ports
|
|
#define jack_port_name_size WJACK_port_name_size
|
|
#define jack_port_type_size WJACK_port_type_size
|
|
#define jack_port_type_get_buffer_size WJACK_port_type_get_buffer_size
|
|
#define jack_port_by_name WJACK_port_by_name
|
|
#define jack_port_by_id WJACK_port_by_id
|
|
#define jack_port_set_name WJACK_port_set_name
|
|
#define jack_port_get_aliases WJACK_port_get_aliases
|
|
#define jack_port_rename WJACK_port_rename
|
|
#define jack_port_disconnect WJACK_port_disconnect
|
|
#define jack_port_register WJACK_port_register
|
|
#define jack_port_unregister WJACK_port_unregister
|
|
#define jack_port_type WJACK_port_type
|
|
#define jack_port_get_connections WJACK_port_get_connections
|
|
#define jack_port_get_all_connections WJACK_port_get_all_connections
|
|
#define jack_connect WJACK_connect
|
|
#define jack_disconnect WJACK_disconnect
|
|
#define jack_free WJACK_free
|
|
|
|
#define jack_cycle_wait WJACK_cycle_wait
|
|
#define jack_cycle_signal WJACK_cycle_signal
|
|
#define jack_set_process_thread WJACK_set_process_thread
|
|
#define jack_set_thread_init_callback WJACK_set_thread_init_callback
|
|
|
|
/* <jack/transport.h> */
|
|
#define jack_get_current_transport_frame WJACK_get_current_transport_frame
|
|
#define jack_transport_locate WJACK_transport_locate
|
|
#define jack_transport_start WJACK_transport_start
|
|
#define jack_transport_stop WJACK_transport_stop
|
|
#define jack_transport_query WJACK_transport_query
|
|
#define jack_set_sync_callback WJACK_set_sync_callback
|
|
#define jack_set_timebase_callback WJACK_set_timebase_callback
|
|
#define jack_release_timebase WJACK_release_timebase
|
|
|
|
/* <jack/midiport.h> */
|
|
#define jack_midi_get_event_count WJACK_midi_get_event_count
|
|
#define jack_midi_event_get WJACK_midi_event_get
|
|
#define jack_midi_event_write WJACK_midi_event_write
|
|
#define jack_midi_clear_buffer WJACK_midi_clear_buffer
|
|
|
|
/* <jack/session.h> */
|
|
#define jack_set_session_callback WJACK_set_session_callback
|
|
#define jack_session_reply WJACK_session_reply
|
|
#define jack_session_event_free WJACK_session_event_free
|
|
|
|
/* <jack/ringbuffer.h> */
|
|
#define jack_ringbuffer_create WJACK_ringbuffer_create
|
|
#define jack_ringbuffer_free WJACK_ringbuffer_free
|
|
#define jack_ringbuffer_reset WJACK_ringbuffer_reset
|
|
#define jack_ringbuffer_read_advance WJACK_ringbuffer_read_advance
|
|
#define jack_ringbuffer_write_advance WJACK_ringbuffer_write_advance
|
|
#define jack_ringbuffer_read_space WJACK_ringbuffer_read_space
|
|
#define jack_ringbuffer_write_space WJACK_ringbuffer_write_space
|
|
#define jack_ringbuffer_read WJACK_ringbuffer_read
|
|
#define jack_ringbuffer_write WJACK_ringbuffer_write
|
|
#define jack_ringbuffer_mlock WJACK_ringbuffer_mlock
|
|
#define jack_ringbuffer_get_read_vector WJACK_ringbuffer_get_read_vector
|
|
#define jack_ringbuffer_get_write_vector WJACK_ringbuffer_get_write_vector
|
|
#define jack_ringbuffer_peek WJACK_ringbuffer_peek
|
|
|
|
/* <jack/thread.h> */
|
|
#define jack_client_real_time_priority WJACK_client_real_time_priority
|
|
#define jack_client_max_real_time_priority WJACK_client_max_real_time_priority
|
|
#define jack_acquire_real_time_scheduling WJACK_acquire_real_time_scheduling
|
|
#define jack_client_create_thread WJACK_client_create_thread
|
|
#define jack_drop_real_time_scheduling WJACK_drop_real_time_scheduling
|
|
#define jack_client_stop_thread WJACK_client_stop_thread
|
|
#define jack_client_kill_thread WJACK_client_kill_thread
|
|
#define jack_set_thread_creator WJACK_set_thread_creator
|
|
|
|
#define jack_client_open WJACK_client_client_openXXX
|
|
|
|
#ifndef NO_JACK_METADATA
|
|
/* <jack/metadata.h> */
|
|
#define jack_get_uuid_for_client_name WJACK_get_uuid_for_client_name
|
|
#define jack_get_client_name_by_uuid WJACK_get_client_name_by_uuid
|
|
#define jack_port_uuid WJACK_port_uuid
|
|
|
|
#define jack_set_property WJACK_set_property
|
|
#define jack_get_property WJACK_get_property
|
|
#define jack_free_description WJACK_free_description
|
|
#define jack_get_properties WJACK_get_properties
|
|
#define jack_get_all_properties WJACK_get_all_properties
|
|
#define jack_remove_property WJACK_remove_property
|
|
#define jack_remove_properties WJACK_remove_properties
|
|
#define jack_remove_all_properties WJACK_remove_all_properties
|
|
#define jack_set_property_change_callback WJACK_set_property_change_callback
|
|
#endif
|
|
|
|
/* <jack/statistics.h> */
|
|
#define jack_get_max_delayed_usecs WJACK_get_max_delayed_usecs
|
|
#define jack_get_xrun_delayed_usecs WJACK_get_xrun_delayed_usecs
|
|
#define jack_reset_max_delayed_usecs WJACK_reset_max_delayed_usecs
|
|
|
|
#endif // end USE_WEAK_JACK
|
|
|
|
#include <jack/jack.h>
|
|
#include <jack/transport.h>
|
|
#include <jack/ringbuffer.h>
|
|
#include <jack/midiport.h>
|
|
#include <jack/session.h>
|
|
#include <jack/thread.h>
|
|
#include <jack/statistics.h>
|
|
|
|
#ifndef NO_JACK_METADATA
|
|
#include <jack/metadata.h>
|
|
#endif
|
|
|
|
#ifdef USE_WEAK_JACK
|
|
|
|
#undef jack_client_open
|
|
|
|
/* var-args hack */
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
void (* WJACK_get_client_open (void)) (void);
|
|
jack_client_t * WJACK_no_client_open (const char *client_name, jack_options_t options, jack_status_t *status, ...);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#define jack_client_open(...) \
|
|
( \
|
|
(WJACK_get_client_open() != NULL) \
|
|
? ((jack_client_t* (*)(const char *, jack_options_t, jack_status_t *, ...))(WJACK_get_client_open()))(__VA_ARGS__) \
|
|
: WJACK_no_client_open(__VA_ARGS__) \
|
|
)
|
|
|
|
#endif // end USE_WEAK_JACK
|
|
|
|
#endif // _WEAK_JACK_H
|