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 void NotifyFailure(int code, const char* reason);
00144
00145 public:
00146
00147 JackDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table);
00148 JackDriver();
00149 virtual ~JackDriver();
00150
00151 void SetMaster(bool onoff);
00152 bool GetMaster();
00153
00154 void AddSlave(JackDriverInterface* slave);
00155 void RemoveSlave(JackDriverInterface* slave);
00156 std::list<JackDriverInterface*> GetSlaves()
00157 {
00158 return fSlaveList;
00159 }
00160 int ProcessSlaves();
00161
00162 virtual int Open();
00163
00164 virtual int Open (bool capturing,
00165 bool playing,
00166 int inchannels,
00167 int outchannels,
00168 bool monitor,
00169 const char* capture_driver_name,
00170 const char* playback_driver_name,
00171 jack_nframes_t capture_latency,
00172 jack_nframes_t playback_latency);
00173
00174 virtual int Open(jack_nframes_t buffer_size,
00175 jack_nframes_t samplerate,
00176 bool capturing,
00177 bool playing,
00178 int inchannels,
00179 int outchannels,
00180 bool monitor,
00181 const char* capture_driver_name,
00182 const char* playback_driver_name,
00183 jack_nframes_t capture_latency,
00184 jack_nframes_t playback_latency);
00185 virtual int Close();
00186
00187 virtual int Process();
00188 virtual int ProcessNull();
00189
00190 virtual int Attach();
00191 virtual int Detach();
00192
00193 virtual int Read();
00194 virtual int Write();
00195
00196 virtual int Start();
00197 virtual int Stop();
00198
00199 virtual bool IsFixedBufferSize();
00200 virtual int SetBufferSize(jack_nframes_t buffer_size);
00201 virtual int SetSampleRate(jack_nframes_t sample_rate);
00202
00203 virtual int ClientNotify(int refnum, const char* name, int notify, int sync, const char* message, int value1, int value2);
00204 virtual JackClientControl* GetClientControl() const;
00205
00206 virtual bool IsRealTime() const;
00207 virtual bool Initialize();
00208
00209 };
00210
00211 }
00212
00213 #endif