virtual void stopCapture()=0;
virtual bool is_available()=0;
- double (*decodeValue)(void* buffer, int i);
+ double m_tmp_value; // used when two channels have to be mixed down
+ double (*decodeValue)(void* buffer, int i); // not used for JACK
void (*addValue)(CaptureThreadImpl* impl, double value, int i);
void setFormatDescrsAndFns(int format_size, bool format_signed, bool format_float, int channel_count);
#ifdef CAPTURE_JACK
#include <jack/jack.h>
-class CaptureThreadImplJACK : public CaptureThreadImpl
+#include <jack/ringbuffer.h>
+class CaptureThreadImplJACK : public CaptureThreadImpl, public QThread
{
static int JackProcess(jack_nframes_t nframes, void* arg);
static void JackShutdown(void* arg);
static int JackSampleRate(jack_nframes_t nframes, void* arg);
+ jack_ringbuffer_t* m_ringbuffer;
jack_client_t* m_jack_client;
jack_port_t* m_jack_port;
int jackSampleRate(jack_nframes_t nframes);
int jackProcess(jack_nframes_t nframes);
void jackShutdown();
- void capture_init();
+ // view
+ volatile bool m_alive;
+ volatile bool m_in_run;
+
+ // control
+ volatile bool m_loop;
+ volatile bool m_wait_for_start;
+
+ void capture_init();
+ void capture_loop();
void capture_finished();
+ virtual void run();
+
public:
CaptureThreadImplJACK(CaptureThread* capture_thread);
virtual void startCapture();
virtual void stopCapture();
virtual bool is_available();
+
+ ~CaptureThreadImplJACK();
};
#endif