Import upstream version 0.99.2
[fmit.git] / src / CaptureThread.h
index ea7f707..15c285f 100644 (file)
@@ -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 <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);
 
@@ -143,6 +157,8 @@ class CaptureThreadImplJACK : public CaptureThreadImpl
        virtual void startCapture();
        virtual void stopCapture();
        virtual bool is_available();
+    
+    ~CaptureThreadImplJACK();
 };
 #endif