svapp  1.9
AudioJACKTarget.h
Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2006 Chris Cannam.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
00014 */
00015 
00016 #ifndef _AUDIO_JACK_TARGET_H_
00017 #define _AUDIO_JACK_TARGET_H_
00018 
00019 #ifdef HAVE_JACK
00020 
00021 #include <jack/jack.h>
00022 #include <vector>
00023 
00024 #include "AudioCallbackPlayTarget.h"
00025 
00026 #include <QMutex>
00027 
00028 class AudioCallbackPlaySource;
00029 
00030 class AudioJACKTarget : public AudioCallbackPlayTarget
00031 {
00032     Q_OBJECT
00033 
00034 public:
00035     AudioJACKTarget(AudioCallbackPlaySource *source);
00036     virtual ~AudioJACKTarget();
00037 
00038     virtual void shutdown();
00039 
00040     virtual bool isOK() const;
00041 
00042     virtual double getCurrentTime() const;
00043 
00044 public slots:
00045     virtual void sourceModelReplaced();
00046 
00047 protected:
00048     int process(jack_nframes_t nframes);
00049     int xrun();
00050 
00051     static int processStatic(jack_nframes_t, void *);
00052     static int xrunStatic(void *);
00053 
00054     jack_client_t              *m_client;
00055     std::vector<jack_port_t *>  m_outputs;
00056     jack_nframes_t              m_bufferSize;
00057     jack_nframes_t              m_sampleRate;
00058     QMutex                      m_mutex;
00059     bool                        m_done;
00060 };
00061 
00062 #endif /* HAVE_JACK */
00063 
00064 #endif
00065