diff options
Diffstat (limited to 'tools/zalsa/jackclient.h')
-rw-r--r-- | tools/zalsa/jackclient.h | 120 |
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 |