Merge branch 'master' into develop
[jack2.git] / common / JackAudioDriver.h
blobe6f332f0aa27d14ef92611d28331547ef77d6d71
1 /*
2 Copyright (C) 2001 Paul Davis
3 Copyright (C) 2004-2008 Grame
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #ifndef __JackAudioDriver__
22 #define __JackAudioDriver__
24 #include "JackDriver.h"
26 namespace Jack
29 /*!
30 \brief The base class for audio drivers: drivers with audio ports.
32 A concrete derived class will have to be defined with a real audio driver API,
33 either callback based one (like CoreAudio, PortAudio..) ones or blocking ones (like ALSA).
35 Most of the generic audio handing code is part of this class :
36 - concrete callback basedd derived subclasses typically have to Open/Close the underlying audio API,
37 setup the audio callback and implement the Read/Write methods
38 - concrete blocking based derived subclasses typically have to Open/Close the underlying audio API,
39 implement the Read/Write methods and "wraps" the driver with the JackThreadDriver class.
42 class SERVER_EXPORT JackAudioDriver : public JackDriver
45 protected:
47 jack_default_audio_sample_t* GetInputBuffer(int port_index);
48 jack_default_audio_sample_t* GetOutputBuffer(int port_index);
49 jack_default_audio_sample_t* GetMonitorBuffer(int port_index);
51 void HandleLatencyCallback(int status);
52 virtual void UpdateLatencies();
54 int ProcessAsync();
55 void ProcessGraphAsync();
56 void ProcessGraphAsyncMaster();
57 void ProcessGraphAsyncSlave();
59 int ProcessSync();
60 void ProcessGraphSync();
61 void ProcessGraphSyncMaster();
62 void ProcessGraphSyncSlave();
64 public:
66 JackAudioDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table);
67 virtual ~JackAudioDriver();
69 virtual int Open(jack_nframes_t buffer_size,
70 jack_nframes_t samplerate,
71 bool capturing,
72 bool playing,
73 int inchannels,
74 int outchannels,
75 bool monitor,
76 const char* capture_driver_name,
77 const char* playback_driver_name,
78 jack_nframes_t capture_latency,
79 jack_nframes_t playback_latency);
82 To be called by the underlying driver audio callback, or possibly by a RT thread (using JackThreadedDriver decorator)
83 when a blocking read/write underlying API is used (like ALSA)
85 virtual int Process();
87 virtual int Attach();
88 virtual int Detach();
90 virtual int Write();
92 virtual int SetBufferSize(jack_nframes_t buffer_size);
93 virtual int SetSampleRate(jack_nframes_t sample_rate);
95 virtual int ClientNotify(int refnum, const char* name, int notify, int sync, const char* message, int value1, int value2);
99 } // end of namespace
101 #endif