56#define CLIENT_NAME "UltraGrid Transport"
57#define BUFF_ELEM (1<<16)
58#define BUFF_SIZE (BUFF_ELEM * sizeof(float))
60#define MOD_NAME "[JACK trans.] "
101 if(send_b > (
int) (
sizeof (jack_default_audio_sample_t) * nframes))
102 send_b =
sizeof (jack_default_audio_sample_t) * nframes;
107 jack_default_audio_sample_t *out =
109 if(to_end > send_b) {
122 const float int_max_flt = nexttowardf((
float) INT_MAX, INT_MAX);
126 jack_default_audio_sample_t *in =
128 for(j = 0; j < (int) nframes; ++j) {
165 while (ports[i]) ++i;
188 char * save_ptr = NULL,
191 if (!cfg || cfg[0] ==
'\0' || strncmp(cfg,
"help", strlen(
"help")) == 0)
193 printf(
"JACK config:\n"
194 "\t--audio-protocol JACK:({tok1|tok2...tokn-1},)*{tokn}\n\n"
196 "\t\tpi[=<name>]\t\treceive sound from JACK instead of from RTP (optionally select port)\n"
198 "\t\tpo[=<name>]\t\tsend sound output via JACK with (optional) port name.\n"
199 "\t\t\t\t\tIf name not specified, let Jack select (probably system output!)\n"
201 "\t\tch=<count>\t\tcount of input (!) JACK ports to listen at (matching RE above)\n"
202 "\t\t\t\t\tYou should set it for input, otherwise the count defaults to 0.\n"
206 while((tok = strtok_r(cfg,
",", &save_ptr)) != NULL)
210 if(tok[1] !=
'i' && tok[1] !=
'o')
224 if(strncmp(tok,
"ch=", 3))
246 while (ports[i]) ++i;
256 fprintf (stderr,
"cannot connect input ports\n");
285 char *cfg_copy = strdup(cfg);
316 snprintf(
name, 30,
"out_%02u", i);
328 snprintf(
name, 30,
"in_%02u", i);
339 fprintf (stderr,
"cannot activate client");
359 char *in_ptr =
frame->data;
371 *pos = (*((
int *)(
void *) (in_ptr +
channels *
frame->bps)) << (32 -
frame->bps * 8)) / (float) INT_MAX;
struct video_frame * frame
This file contains definition of some common audio types.
static int jack_process_callback(jack_nframes_t nframes, void *arg)
static int jack_samplerate_changed_callback(jack_nframes_t nframes, void *arg)
void log_msg(int level, const char *format,...)
#define LOG_LEVEL_NOTICE
information that may be interesting
#define LOG_LEVEL_ERROR
general errors
#define LOG_LEVEL_WARNING
less severe errors
void * jack_start(const char *cfg)
static int attach_input_ports(struct state_jack *s)
int is_jack_receiver(void *state)
void reconfigure_send_ch_count(struct state_jack *s, int ch_count)
void jack_send(void *state, struct audio_frame *frame)
bool jack_receive(void *state, void *data)
Receives data from JACK.
static int settings_init(struct state_jack *s, char *cfg)
int is_jack_sender(void *state)
static void close_libjack(struct libjack_connection *s)
static struct libjack_connection * open_libjack(void)
struct used to comunicate with audio capture/playback device
jack_port_register_t port_register
jack_set_sample_rate_callback_t set_sample_rate_callback
jack_get_sample_rate_t get_sample_rate
jack_client_open_t client_open
jack_port_name_t port_name
jack_port_get_buffer_t port_get_buffer
jack_get_ports_t get_ports
jack_disconnect_t disconnect
jack_set_process_callback_t set_process_callback
jack_port_t * input_port[MAX_PORTS]
int out_channel_count_req
struct audio_frame record
char * play_buffer[MAX_PORTS]
jack_port_t * output_port[MAX_PORTS]
struct libjack_connection * libjack
volatile int rec_buffer_end
volatile int rec_buffer_start