summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/audio/audio_device.cpp9
-rw-r--r--src/audio/audio_device.h26
-rw-r--r--src/sys_settings.cpp9
3 files changed, 44 insertions, 0 deletions
diff --git a/src/audio/audio_device.cpp b/src/audio/audio_device.cpp
index dd61e8d..84aa2db 100644
--- a/src/audio/audio_device.cpp
+++ b/src/audio/audio_device.cpp
@@ -33,6 +33,10 @@
#include <alsa/asoundlib.h>
#endif
+#ifdef HAVE_JACK
+#include <jack/jack.h>
+#endif
+
t_audio_io* t_audio_io::open(const t_audio_device& dev, bool playback, bool capture, bool blocking, int channels, t_audio_sampleformat format, int sample_rate, bool short_latency)
{
t_audio_io* aio;
@@ -45,6 +49,11 @@ t_audio_io* t_audio_io::open(const t_audio_device& dev, bool playback, bool capt
aio = new t_alsa_io();
MEMMAN_NEW(aio);
#endif
+#ifdef HAVE_JACK
+ } elseif (dev.type == t_audio_device::JACK) {
+ aio = new t_jack_io();
+ MEMMAN_NEW(aio);
+#endif
} else {
string msg("Audio device not implemented");
log_file->write_report(msg, "t_audio_io::open",
diff --git a/src/audio/audio_device.h b/src/audio/audio_device.h
index 5adc1bb..ec81996 100644
--- a/src/audio/audio_device.h
+++ b/src/audio/audio_device.h
@@ -122,4 +122,30 @@ private:
};
#endif
+#ifdef HAVE_JACK
+class t_jack_io : public t_audio_io {
+public:
+ t_jack_io();
+ virtual ~t_jack_io();
+ void enable(bool enable_playback, bool enable_recording);
+ void flush(bool playback_buffer, bool recording_buffer);
+ int get_buffer_space(bool is_recording_buffer);
+ int get_buffer_size(bool is_recording_buffer);
+ bool play_buffer_underrun(void);
+ int read(unsigned char* buf, int len);
+ int write(const unsigned char* buf, int len);
+protected:
+ bool open(const string& device,
+ bool playback,
+ bool capture,
+ bool blocking,
+ int channels, t_audio_sampleformat format,
+ int sample_rate,
+ bool short_latency);
+private:
+ int fd;
+ int play_buffersize, rec_buffersize;
+};
+#endif
+
#endif
diff --git a/src/sys_settings.cpp b/src/sys_settings.cpp
index bb07539..32d215d 100644
--- a/src/sys_settings.cpp
+++ b/src/sys_settings.cpp
@@ -153,6 +153,12 @@ string t_audio_device::get_description(void) const {
s += ": ";
s += name;
}
+ } else if (type == JACK) {
+ s = "JACK: " +s;
+ if (!name.empty()) {
+ s += ": ";
+ s += name;
+ }
} else {
s = "Unknown: " + s;
}
@@ -170,6 +176,9 @@ string t_audio_device::get_settings_value(void) const {
case ALSA:
s = PFX_ALSA;
break;
+ case JACK:
+ s = PFX_JACK;
+ break;
default:
assert(false);
}