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 bool gx_jack_init(
bool startserver,
int wait_after_connect,
163 void gx_jack_callbacks();
164 void gx_jack_cleanup();
165 inline void check_overload();
180 bool get_is_rt() {
return client ? jack_is_realtime(client) :
false; }
181 jack_nframes_t
get_time_is() {
return client ? jack_frame_time(client) : 0; }
191 bool gx_jack_connection(
bool connect,
bool startserver,
194 void* get_midi_buffer(jack_nframes_t nframes);
195 void send_midi_cc(
int cc_num,
int pgm_num,
int bgn,
int num);
196 void process_midi_cc(
void *buf, jack_nframes_t nframes);
200 static string get_default_instancename();
215 static void rt_watchdog_set_limit(
int limit);
216 #ifdef HAVE_JACK_SESSION 217 jack_session_event_t *get_last_session_event() {
220 jack_session_event_t *get_last_session_event_ins() {
223 int return_last_session_event();
224 int return_last_session_event_ins();
225 string get_uuid_insert();
232 #endif // SRC_HEADERS_GX_JACK_H_
void send_connection_changes(bool v)
void set_jack_down(bool v)
jack_nframes_t get_jack_sr()
Glib::Dispatcher & signal_portchange()
PortConnection midi_output
PortConnection insert_out
jack_nframes_t get_jack_bs()
Glib::Dispatcher connection
void set_jack_insert(bool v)
int atomic_get(volatile int &p)
Glib::Dispatcher new_data
void set_jack_exit(bool v)
sigc::signal< void, string, string, bool > & signal_connection_changed()
Glib::Dispatcher & signal_buffersize_change()
PortConnData(const char *a, const char *b, bool conn)
jack_transport_state_t transport_state
jack_client_t * client_insert
PortConnection midi_input
const string & get_instancename()
void atomic_set(volatile int *p, int v)
Glib::Dispatcher shutdown
sigc::signal< void > & signal_client_change()
Glib::Dispatcher portchange
Glib::Dispatcher session_ins
jack_transport_state_t old_transport_state
string client_insert_name
jack_nframes_t get_time_is()