00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __JackDriver__
00022 #define __JackDriver__
00023
00024 #include "types.h"
00025 #include "JackClientInterface.h"
00026 #include "JackConstants.h"
00027 #include "JackPlatformPlug.h"
00028 #include "JackClientControl.h"
00029 #include <list>
00030
00031 namespace Jack
00032 {
00033
00034 class JackLockedEngine;
00035 class JackGraphManager;
00036 struct JackEngineControl;
00037
00042 class SERVER_EXPORT JackDriverInterface
00043 {
00044
00045 public:
00046
00047 JackDriverInterface()
00048 {}
00049 virtual ~JackDriverInterface()
00050 {}
00051
00052 virtual int Open() = 0;
00053
00054 virtual int Open (bool capturing,
00055 bool playing,
00056 int inchannels,
00057 int outchannels,
00058 bool monitor,
00059 const char* capture_driver_name,
00060 const char* playback_driver_name,
00061 jack_nframes_t capture_latency,
00062 jack_nframes_t playback_latency) = 0;
00063
00064 virtual int Open(jack_nframes_t buffer_size,
00065 jack_nframes_t samplerate,
00066 bool capturing,
00067 bool playing,
00068 int inchannels,
00069 int outchannels,
00070 bool monitor,
00071 const char* capture_driver_name,
00072 const char* playback_driver_name,
00073 jack_nframes_t capture_latency,
00074 jack_nframes_t playback_latency) = 0;
00075
00076 virtual int Attach() = 0;
00077 virtual int Detach() = 0;
00078
00079 virtual int Read() = 0;
00080 virtual int Write() = 0;
00081
00082 virtual int Start() = 0;
00083 virtual int Stop() = 0;
00084
00085 virtual bool IsFixedBufferSize() = 0;
00086 virtual int SetBufferSize(jack_nframes_t buffer_size) = 0;
00087 virtual int SetSampleRate(jack_nframes_t sample_rate) = 0;
00088
00089 virtual int Process() = 0;
00090 virtual int ProcessNull() = 0;
00091
00092 virtual void SetMaster(bool onoff) = 0;
00093 virtual bool GetMaster() = 0;
00094 virtual void AddSlave(JackDriverInterface* slave) = 0;
00095 virtual void RemoveSlave(JackDriverInterface* slave) = 0;
00096 virtual std::list<JackDriverInterface*> GetSlaves() = 0;
00097 virtual int ProcessSlaves() = 0;
00098
00099 virtual bool IsRealTime() const = 0;
00100 };
00101
00106 class SERVER_EXPORT JackDriverClientInterface : public JackDriverInterface, public JackClientInterface
00107 {};
00108
00113 class SERVER_EXPORT JackDriver : public JackDriverClientInterface
00114 {
00115
00116 protected:
00117
00118 char fCaptureDriverName[JACK_CLIENT_NAME_SIZE + 1];
00119 char fPlaybackDriverName[JACK_CLIENT_NAME_SIZE + 1];
00120 char fAliasName[JACK_CLIENT_NAME_SIZE + 1];
00121 jack_nframes_t fCaptureLatency;
00122 jack_nframes_t fPlaybackLatency;
00123 jack_time_t fBeginDateUst;
00124 jack_time_t fEndDateUst;
00125 float fDelayedUsecs;
00126 JackLockedEngine* fEngine;
00127 JackGraphManager* fGraphManager;
00128 JackSynchro* fSynchroTable;
00129 JackEngineControl* fEngineControl;
00130 JackClientControl fClientControl;
00131 std::list<JackDriverInterface*> fSlaveList;
00132 bool fIsMaster;
00133
00134 void CycleIncTime();
00135 void CycleTakeBeginTime();
00136 void CycleTakeEndTime();
00137
00138 void SetupDriverSync(int ref, bool freewheel);
00139
00140 void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs);
00141 void NotifyBufferSize(jack_nframes_t buffer_size);
00142 void NotifySampleRate(jack_nframes_t sample_rate);
00143
00144 public:
00145
00146 JackDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table);
00147 JackDriver();
00148 virtual ~JackDriver();
00149
00150 void SetMaster(bool onoff);
00151 bool GetMaster();
00152
00153 void AddSlave(JackDriverInterface* slave);
00154 void RemoveSlave(JackDriverInterface* slave);
00155 std::list<JackDriverInterface*> GetSlaves()
00156 {
00157 return fSlaveList;
00158 }
00159 int ProcessSlaves();
00160
00161 virtual int Open();
00162
00163 virtual int Open (bool capturing,
00164 bool playing,
00165 int inchannels,
00166 int outchannels,
00167 bool monitor,
00168 const char* capture_driver_name,
00169 const char* playback_driver_name,
00170 jack_nframes_t capture_latency,
00171 jack_nframes_t playback_latency);
00172
00173 virtual int Open(jack_nframes_t buffer_size,
00174 jack_nframes_t samplerate,
00175 bool capturing,
00176 bool playing,
00177 int inchannels,
00178 int outchannels,
00179 bool monitor,
00180 const char* capture_driver_name,
00181 const char* playback_driver_name,
00182 jack_nframes_t capture_latency,
00183 jack_nframes_t playback_latency);
00184 virtual int Close();
00185
00186 virtual int Process();
00187 virtual int ProcessNull();
00188
00189 virtual int Attach();
00190 virtual int Detach();
00191
00192 virtual int Read();
00193 virtual int Write();
00194
00195 virtual int Start();
00196 virtual int Stop();
00197
00198 virtual bool IsFixedBufferSize();
00199 virtual int SetBufferSize(jack_nframes_t buffer_size);
00200 virtual int SetSampleRate(jack_nframes_t sample_rate);
00201
00202 virtual int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2);
00203 virtual JackClientControl* GetClientControl() const;
00204
00205 virtual bool IsRealTime() const;
00206 virtual bool Initialize();
00207
00208 };
00209
00210 }
00211
00212 #endif