/* * Copyright (c) 2015 Andrew Kelley * * This file is part of libsoundio, which is MIT licensed. * See http://opensource.org/licenses/MIT */ #ifndef SOUNDIO_JACK_H #define SOUNDIO_JACK_H #include "soundio_internal.h" #include "os.h" #include "atomics.h" // jack.h does not properly put `void` in function prototypes with no // arguments, so we're forced to temporarily disable -Werror=strict-prototypes #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wstrict-prototypes" #include #pragma GCC diagnostic pop struct SoundIoPrivate; int soundio_jack_init(struct SoundIoPrivate *si); struct SoundIoDeviceJackPort { char *full_name; int full_name_len; enum SoundIoChannelId channel_id; jack_latency_range_t latency_range; }; struct SoundIoDeviceJack { int port_count; struct SoundIoDeviceJackPort *ports; }; struct SoundIoJack { jack_client_t *client; struct SoundIoOsMutex *mutex; struct SoundIoOsCond *cond; atomic_flag refresh_devices_flag; int sample_rate; int period_size; bool is_shutdown; bool emitted_shutdown_cb; }; struct SoundIoOutStreamJackPort { jack_port_t *source_port; const char *dest_port_name; int dest_port_name_len; }; struct SoundIoOutStreamJack { jack_client_t *client; int period_size; int frames_left; double hardware_latency; struct SoundIoOutStreamJackPort ports[SOUNDIO_MAX_CHANNELS]; struct SoundIoChannelArea areas[SOUNDIO_MAX_CHANNELS]; }; struct SoundIoInStreamJackPort { jack_port_t *dest_port; const char *source_port_name; int source_port_name_len; }; struct SoundIoInStreamJack { jack_client_t *client; int period_size; int frames_left; double hardware_latency; struct SoundIoInStreamJackPort ports[SOUNDIO_MAX_CHANNELS]; struct SoundIoChannelArea areas[SOUNDIO_MAX_CHANNELS]; char *buf_ptrs[SOUNDIO_MAX_CHANNELS]; }; #endif