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 virtual int Open(jack_nframes_t buffer_size,
00054 jack_nframes_t samplerate,
00055 bool capturing,
00056 bool playing,
00057 int inchannels,
00058 int outchannels,
00059 bool monitor,
00060 const char* capture_driver_name,
00061 const char* playback_driver_name,
00062 jack_nframes_t capture_latency,
00063 jack_nframes_t playback_latency) = 0;
00064
00065 virtual int Attach() = 0;
00066 virtual int Detach() = 0;
00067
00068 virtual int Read() = 0;
00069 virtual int Write() = 0;
00070
00071 virtual int Start() = 0;
00072 virtual int Stop() = 0;
00073
00074 virtual bool IsFixedBufferSize() = 0;
00075 virtual int SetBufferSize(jack_nframes_t buffer_size) = 0;
00076 virtual int SetSampleRate(jack_nframes_t sample_rate) = 0;
00077
00078 virtual int Process() = 0;
00079 virtual int ProcessNull() = 0;
00080
00081 virtual void SetMaster(bool onoff) = 0;
00082 virtual bool GetMaster() = 0;
00083 virtual void AddSlave(JackDriverInterface* slave) = 0;
00084 virtual void RemoveSlave(JackDriverInterface* slave) = 0;
00085 virtual int ProcessSlaves() = 0;
00086
00087 virtual bool IsRealTime() const = 0;
00088 };
00089
00094 class SERVER_EXPORT JackDriverClientInterface : public JackDriverInterface, public JackClientInterface
00095 {};
00096
00101 class SERVER_EXPORT JackDriver : public JackDriverClientInterface
00102 {
00103
00104 protected:
00105
00106 char fCaptureDriverName[JACK_CLIENT_NAME_SIZE + 1];
00107 char fPlaybackDriverName[JACK_CLIENT_NAME_SIZE + 1];
00108 char fAliasName[JACK_CLIENT_NAME_SIZE + 1];
00109 jack_nframes_t fCaptureLatency;
00110 jack_nframes_t fPlaybackLatency;
00111 jack_time_t fBeginDateUst;
00112 jack_time_t fEndDateUst;
00113 float fDelayedUsecs;
00114 JackLockedEngine* fEngine;
00115 JackGraphManager* fGraphManager;
00116 JackSynchro* fSynchroTable;
00117 JackEngineControl* fEngineControl;
00118 JackClientControl fClientControl;
00119 std::list<JackDriverInterface*> fSlaveList;
00120 bool fIsMaster;
00121
00122 void CycleIncTime();
00123 void CycleTakeBeginTime();
00124 void CycleTakeEndTime();
00125
00126 void SetupDriverSync(int ref, bool freewheel);
00127
00128 void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs);
00129 void NotifyBufferSize(jack_nframes_t buffer_size);
00130 void NotifySampleRate(jack_nframes_t sample_rate);
00131
00132 public:
00133
00134 JackDriver(const char* name, const char* alias, JackLockedEngine* engine, JackSynchro* table);
00135 JackDriver();
00136 virtual ~JackDriver();
00137
00138 void SetMaster(bool onoff);
00139 bool GetMaster();
00140 void AddSlave(JackDriverInterface* slave);
00141 void RemoveSlave(JackDriverInterface* slave);
00142 int ProcessSlaves();
00143
00144 virtual int Open();
00145 virtual int Open(jack_nframes_t buffer_size,
00146 jack_nframes_t samplerate,
00147 bool capturing,
00148 bool playing,
00149 int inchannels,
00150 int outchannels,
00151 bool monitor,
00152 const char* capture_driver_name,
00153 const char* playback_driver_name,
00154 jack_nframes_t capture_latency,
00155 jack_nframes_t playback_latency);
00156 virtual int Close();
00157
00158 virtual int Process();
00159 virtual int ProcessNull();
00160
00161 virtual int Attach();
00162 virtual int Detach();
00163
00164 virtual int Read();
00165 virtual int Write();
00166
00167 virtual int Start();
00168 virtual int Stop();
00169
00170 virtual bool IsFixedBufferSize();
00171 virtual int SetBufferSize(jack_nframes_t buffer_size);
00172 virtual int SetSampleRate(jack_nframes_t sample_rate);
00173
00174 virtual int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2);
00175 virtual JackClientControl* GetClientControl() const;
00176
00177 virtual bool IsRealTime() const;
00178 virtual bool Init();
00179
00180 };
00181
00182 }
00183
00184 #endif