X-Git-Url: http://git.johnwright.org/?p=fmit.git;a=blobdiff_plain;f=src%2FCaptureThread.h;fp=src%2FCaptureThread.h;h=15c285f41534699ad7b8141dd9d012b6e2e86abc;hp=ea7f707391a72a76156247d893007783ef358d26;hb=a8fb82288feb6b258f2c04312f0c36ba8d79b494;hpb=adfba0402927438a1869f1e716bcf0e25574ce1e diff --git a/src/CaptureThread.h b/src/CaptureThread.h index ea7f707..15c285f 100644 --- a/src/CaptureThread.h +++ b/src/CaptureThread.h @@ -63,7 +63,8 @@ class CaptureThreadImpl 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); @@ -121,21 +122,34 @@ class CaptureThreadImplALSA : public CaptureThreadImpl, public QThread #ifdef CAPTURE_JACK #include -class CaptureThreadImplJACK : public CaptureThreadImpl +#include +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); @@ -143,6 +157,8 @@ class CaptureThreadImplJACK : public CaptureThreadImpl virtual void startCapture(); virtual void stopCapture(); virtual bool is_available(); + + ~CaptureThreadImplJACK(); }; #endif