25 #ifndef SRC_HEADERS_GX_JACK_H_
26 #define SRC_HEADERS_GX_JACK_H_
28 #include <jack/jack.h>
29 #include <jack/midiport.h>
30 #include <jack/ringbuffer.h>
32 #ifdef HAVE_JACK_SESSION
33 #include <jack/session.h>
55 jack_ringbuffer_t *ring;
64 void push(
const char *a,
const char *b,
bool conn);
93 #ifdef HAVE_JACK_SESSION
95 typedef int (*jack_set_session_callback_type)(
96 jack_client_t *, JackSessionCallback,
void *arg);
97 typedef char *(*jack_get_uuid_for_client_name_type)(
98 jack_client_t *,
const char *);
99 typedef char *(*jack_client_get_uuid_type)(jack_client_t *);
118 static int gx_jack_srate_callback(jack_nframes_t,
void* arg);
119 static int gx_jack_xrun_callback(
void* arg);
120 static int gx_jack_buffersize_callback(jack_nframes_t,
void* arg);
121 static int gx_jack_process(jack_nframes_t,
void* arg);
122 static int gx_jack_insert_process(jack_nframes_t,
void* arg);
124 static void shutdown_callback_client(
void* arg);
125 static void shutdown_callback_client_insert(
void* arg);
126 void gx_jack_shutdown_callback();
127 static void gx_jack_portreg_callback(jack_port_id_t,
int,
void* arg);
128 static void gx_jack_portconn_callback(jack_port_id_t a, jack_port_id_t b,
int connect,
void* arg);
129 #ifdef HAVE_JACK_SESSION
130 jack_session_event_t *session_event;
131 jack_session_event_t *session_event_ins;
132 int session_callback_seen;
133 static void gx_jack_session_callback(jack_session_event_t *event,
void *arg);
134 static void gx_jack_session_callback_ins(jack_session_event_t *event,
void *arg);
135 static jack_set_session_callback_type jack_set_session_callback_fp;
136 static jack_get_uuid_for_client_name_type jack_get_uuid_for_client_name_fp;
137 static jack_client_get_uuid_type jack_client_get_uuid_fp;
139 void cleanup_slot(
bool otherthread);
140 void fetch_connection_data();
142 sigc::signal<void,string,string,bool> connection_changed;
143 Glib::Dispatcher buffersize_change;
145 Glib::Dispatcher client_change_rt;
146 sigc::signal<void> client_change;
147 string client_instance;
148 jack_nframes_t jack_sr;
149 jack_nframes_t jack_bs;
150 float *insert_buffer;
151 Glib::Dispatcher xrun;
153 bool xrun_msg_blocked;
154 void report_xrun_clear();
156 void write_jack_port_connections(
158 std::string make_clientvar(
const std::string& s);
159 std::string replace_clientvar(
const std::string& s);
160 int is_power_of_two (
unsigned int x);
161 bool gx_jack_init(
bool startserver,
int wait_after_connect,
164 void gx_jack_callbacks();
165 void gx_jack_cleanup();
166 inline void check_overload();
196 void send_midi_cc(
int cc_num,
int pgm_num,
int bgn,
int num);
217 #ifdef HAVE_JACK_SESSION
218 jack_session_event_t *get_last_session_event() {
221 jack_session_event_t *get_last_session_event_ins() {
224 int return_last_session_event();
225 int return_last_session_event_ins();
226 string get_uuid_insert();
234 #endif // SRC_HEADERS_GX_JACK_H_