00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef JACKDRIVER_H
00024 #define JACKDRIVER_H
00025
00026 #include "Driver.h"
00027 #include "defines.h"
00028 #include <jack/jack.h>
00029 #include <QObject>
00030
00031 class JackDriver : public Driver
00032 {
00033 Q_OBJECT
00034 public:
00035 JackDriver(AudioDevice* dev, int rate, nframes_t bufferSize);
00036 ~JackDriver();
00037
00038 int process_callback (nframes_t nframes);
00039 int _read(nframes_t nframes);
00040 int _write(nframes_t nframes);
00041 int _run_cycle() {return 1;}
00042 int setup(bool capture=true, bool playback=true, const QString& cardDevice="hw:0");
00043 int attach();
00044 int start();
00045 int stop();
00046
00047 QString get_device_name();
00048 QString get_device_longname();
00049
00050 float get_cpu_load();
00051
00052 size_t is_jack_running() const {return m_running == 1;}
00053 jack_client_t* get_client() const {return client;}
00054 bool is_slave() const {return m_isSlave;}
00055 void update_config();
00056
00057 private:
00058 volatile size_t m_running;
00059 jack_client_t* client;
00060 jack_port_t** inputPorts;
00061 jack_port_t** outputPorts;
00062 bool m_isSlave;
00063
00064 int jack_sync_callback (jack_transport_state_t, jack_position_t*);
00065
00066 static int _xrun_callback(void *arg);
00067 static int _process_callback (nframes_t nframes, void *arg);
00068 static int _bufsize_callback(jack_nframes_t nframes, void *arg);
00069 static void _on_jack_shutdown_callback(void* arg);
00070 static int _jack_sync_callback (jack_transport_state_t, jack_position_t*, void *arg);
00071 signals:
00072 void jackShutDown();
00073
00074 };
00075
00076
00077 #endif
00078
00079
00080