summaryrefslogtreecommitdiffstats
path: root/src/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/audio_device.cpp9
-rw-r--r--src/audio/audio_device.h26
2 files changed, 35 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