54#define MOD_NAME "[JACK capture] "
93 int channel_size = nframes *
sizeof(int32_t);
123 printf(
"\t-s jack[:first_channel=<f>][:name=<n>][:<device>]\n");
125 printf(
"\t\t<f> - index of first channel to capture (default: 0)\n");
126 printf(
"\t\t<n> - name of the JACK client (default: %s)\n", PACKAGE_NAME);
129 if(!available_devices)
132 printf(
"Available devices:\n");
133 for(i = 0; i <
count; i++){
134 printf(
"\t%s\n", available_devices[i].
name);
136 free(available_devices);
152 const char *source_name = NULL;
154 client_name = alloca(
MAX(strlen(PACKAGE_NAME), strlen(cfg)) + 1);
155 strcpy(client_name, PACKAGE_NAME);
169 char *dup = strdup(cfg);
171 char *
tmp = dup, *
item, *save_ptr;
172 while ((
item = strtok_r(
tmp,
":", &save_ptr)) != NULL) {
173 if (strcmp(
item,
"help") == 0) {
178 }
else if (strstr(
item,
"first_channel=") ==
item) {
180 char *
val =
item + strlen(
"first_channel=");
183 if (errno == ERANGE || *endptr !=
'\0' || s->
first_channel < 0) {
187 }
else if (strstr(
item,
"name=") ==
item) {
188 strcpy(client_name,
item + strlen(
"name="));
190 source_name = cfg + (
item - dup);
200 if(
status & JackFailure) {
215 if (i < s->
frame.ch_count) {
256 snprintf(
name, 32,
"capture_%02u", port);
struct video_frame * frame
int void(** deleter)(void *))
This file contains definition of some common audio types.
#define AUDIO_CAPTURE_ABI_VERSION
static void audio_cap_jack_help(const char *client_name)
static int jack_process_callback(jack_nframes_t nframes, void *arg)
static int jack_samplerate_changed_callback(jack_nframes_t nframes, void *arg)
static void audio_cap_jack_should_exit(void *state)
static void audio_cap_jack_probe(struct device_info **available_devices, int *count, void(**deleter)(void *))
static void * audio_cap_jack_init(struct module *parent, const char *cfg)
static struct audio_frame * audio_cap_jack_read(void *state)
static void audio_cap_jack_done(void *state)
static const struct audio_capture_info acap_jack_info
void log_msg(int level, const char *format,...)
#define LOG_LEVEL_ERROR
general errors
#define LOG_LEVEL_WARNING
less severe errors
void register_should_exit_callback(struct module *mod, void(*callback)(void *), void *udata)
void unregister_should_exit_callback(struct module *mod, void(*callback)(void *), void *udata)
unsigned int audio_capture_sample_rate
unsigned int audio_capture_channels
#define DEFAULT_AUDIO_CAPTURE_CHANNELS
static struct device_info * audio_jack_probe(const char *client_name, unsigned long port_flags, int *count)
static void close_libjack(struct libjack_connection *s)
static struct libjack_connection * open_libjack(void)
@ LIBRARY_CLASS_AUDIO_CAPTURE
#define REGISTER_MODULE(name, info, lclass, abi)
Registers module to global modules' registry.
int ring_get_current_size(struct ring_buffer *ring)
void ring_buffer_destroy(struct ring_buffer *ring)
struct ring_buffer * ring_buffer_init(int size)
int ring_buffer_read(struct ring_buffer *ring, char *out, int max_len)
void ring_buffer_write(struct ring_buffer *ring, const char *in, int len)
struct used to comunicate with audio capture/playback device
jack_client_close_t client_close
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_set_process_callback_t set_process_callback
jack_port_t * input_ports[MAX_PORTS]
struct ring_buffer * data
struct libjack_connection * libjack
void float2int(char *out, const char *in, int len)
void mux_channel(char *out, const char *in, int bps, int in_len, int out_stream_channels, int pos_in_stream, double scale)