summaryrefslogtreecommitdiff
path: root/tools/zalsa/jackclient.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/zalsa/jackclient.h')
-rw-r--r--tools/zalsa/jackclient.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/tools/zalsa/jackclient.h b/tools/zalsa/jackclient.h
new file mode 100644
index 00000000..52f3ddfd
--- /dev/null
+++ b/tools/zalsa/jackclient.h
@@ -0,0 +1,120 @@
+// ----------------------------------------------------------------------------
+//
+// Copyright (C) 2012-2018 Fons Adriaensen <fons@linuxaudio.org>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// ----------------------------------------------------------------------------
+
+
+#ifndef __JACKCLIENT_H
+#define __JACKCLIENT_H
+
+
+#include <zita-resampler/vresampler.h>
+#include "jack/jack.h"
+#include "lfqueue.h"
+
+
+class Jackclient
+{
+public:
+
+ Jackclient (jack_client_t*, const char *jserv, int mode, int nchan, bool sync, void *arg);
+ virtual ~Jackclient (void);
+
+ enum { PLAY, CAPT, MAXCHAN = 64 };
+ enum { INIT, TERM, WAIT, SYNC0, SYNC1, SYNC2, PROC1, PROC2 };
+
+ void start (Lfq_audio *audioq,
+ Lfq_int32 *commq,
+ Lfq_adata *alsaq,
+ Lfq_jdata *infoq,
+ double ratio,
+ int delay,
+ int ltcor,
+ int rqual);
+
+ const char *jname (void) const { return _jname; }
+ int fsamp (void) const { return _fsamp; }
+ int bsize (void) const { return _bsize; }
+ int rprio (void) const { return _rprio; }
+ void *getarg(void) const { return _arg; }
+
+private:
+
+ bool init (const char *jserv);
+ void fini (void);
+ void initwait (int nwait);
+ void initsync (void);
+ void setloop (double bw);
+ void silence (int nframes);
+ void playback (int nframes);
+ void capture (int nframes);
+ void sendinfo (int state, double error, double ratio);
+
+ virtual void thr_main (void) {}
+
+ void jack_freewheel (int state);
+ void jack_latency (jack_latency_callback_mode_t jlcm);
+ int jack_process (int nframes);
+
+ jack_client_t *_client;
+ jack_port_t *_ports [MAXCHAN];
+ void *_arg;
+ const char *_jname;
+ int _mode;
+ int _nchan;
+ int _state;
+ int _count;
+ int _fsamp;
+ int _bsize;
+ int _rprio;
+ bool _freew;
+ float *_buff;
+
+ Lfq_audio *_audioq;
+ Lfq_int32 *_commq;
+ Lfq_adata *_alsaq;
+ Lfq_jdata *_infoq;
+ double _ratio;
+ int _ppsec;
+ int _bstat;
+
+ jack_nframes_t _ft;
+ double _t_a0;
+ double _t_a1;
+ int _k_a0;
+ int _k_a1;
+ double _delay;
+ int _ltcor;
+
+ double _w0;
+ double _w1;
+ double _w2;
+ double _z1;
+ double _z2;
+ double _z3;
+ double _rcorr;
+ VResampler *_resamp;
+
+ static void jack_static_shutdown (void *arg);
+ static int jack_static_buffsize (jack_nframes_t nframes, void *arg);
+ static void jack_static_freewheel (int state, void *arg);
+ static void jack_static_latency (jack_latency_callback_mode_t jlcm, void *arg);
+ static int jack_static_process (jack_nframes_t nframes, void *arg);
+};
+
+
+#endif