21 #ifndef __JackClient__
22 #define __JackClient__
24 #include "JackClientInterface.h"
25 #include "JackThread.h"
26 #include "JackConstants.h"
27 #include "JackSynchro.h"
28 #include "JackPlatformPlug.h"
29 #include "JackChannel.h"
30 #include "JackRequest.h"
31 #include "JackMetadata.h"
38 class JackGraphManager;
41 struct JackClientControl;
42 struct JackEngineControl;
54 JackProcessCallback fProcess;
55 JackGraphOrderCallback fGraphOrder;
56 JackXRunCallback fXrun;
57 JackShutdownCallback fShutdown;
58 JackInfoShutdownCallback fInfoShutdown;
59 JackThreadInitCallback fInit;
60 JackBufferSizeCallback fBufferSize;
61 JackSampleRateCallback fSampleRate;
62 JackClientRegistrationCallback fClientRegistration;
63 JackFreewheelCallback fFreewheel;
64 JackPortRegistrationCallback fPortRegistration;
65 JackPortConnectCallback fPortConnect;
66 JackPortRenameCallback fPortRename;
67 JackTimebaseCallback fTimebase;
68 JackSyncCallback fSync;
69 JackThreadCallback fThreadFun;
71 JackLatencyCallback fLatency;
78 void* fInfoShutdownArg;
82 void* fClientRegistrationArg;
84 void* fPortRegistrationArg;
85 void* fPortConnectArg;
92 void* fPropertyChangeArg;
94 char fServerName[JACK_SERVER_NAME_SIZE+1];
99 std::list<jack_port_id_t> fPortList;
101 JackSessionReply fSessionReply;
104 void SetupDriverSync(
bool freewheel);
107 void CallSyncCallback();
108 void CallTimebaseCallback();
110 virtual int ClientNotifyImp(
int refnum,
const char* name,
int notify,
int sync,
const char* message,
int value1,
int value);
112 inline void DummyCycle();
113 inline void ExecuteThread();
114 inline bool WaitSync();
115 inline void SignalSync();
116 inline int CallProcessCallback();
119 inline jack_nframes_t CycleWaitAux();
120 inline void CycleSignalAux(
int status);
121 inline void CallSyncCallbackAux();
122 inline void CallTimebaseCallbackAux();
123 inline int ActivateAux();
124 inline void InitAux();
125 inline void SetupRealTime();
127 int HandleLatencyCallback(
int status);
134 char* GetServerName() {
return fServerName; }
136 virtual int Open(
const char* server_name,
const char* name, jack_uuid_t uuid, jack_options_t options, jack_status_t* status) = 0;
143 virtual int ClientNotify(
int refnum,
const char* name,
int notify,
int sync,
const char* message,
int value1,
int value2);
145 virtual int Activate();
146 virtual int Deactivate();
149 virtual int SetBufferSize(jack_nframes_t buffer_size);
150 virtual int SetFreeWheel(
int onoff);
151 virtual int ComputeTotalLatencies();
152 virtual void ShutDown(jack_status_t code,
const char* message);
153 virtual jack_native_thread_t GetThreadID();
156 virtual int PortRegister(
const char* port_name,
const char* port_type,
unsigned long flags,
unsigned long buffer_size);
157 virtual int PortUnRegister(jack_port_id_t port);
159 virtual int PortConnect(
const char* src,
const char* dst);
160 virtual int PortDisconnect(
const char* src,
const char* dst);
161 virtual int PortDisconnect(jack_port_id_t src);
163 virtual int PortIsMine(jack_port_id_t port_index);
164 virtual int PortRename(jack_port_id_t port_index,
const char* name);
167 virtual int ReleaseTimebase();
168 virtual int SetSyncCallback(JackSyncCallback sync_callback,
void* arg);
169 virtual int SetSyncTimeout(jack_time_t timeout);
170 virtual int SetTimebaseCallback(
int conditional, JackTimebaseCallback timebase_callback,
void* arg);
171 virtual void TransportLocate(jack_nframes_t frame);
173 virtual jack_nframes_t GetCurrentTransportFrame();
175 virtual void TransportStart();
176 virtual void TransportStop();
179 virtual void OnShutdown(JackShutdownCallback callback,
void *arg);
180 virtual void OnInfoShutdown(JackInfoShutdownCallback callback,
void *arg);
181 virtual int SetProcessCallback(JackProcessCallback callback,
void* arg);
182 virtual int SetXRunCallback(JackXRunCallback callback,
void* arg);
183 virtual int SetInitCallback(JackThreadInitCallback callback,
void* arg);
184 virtual int SetGraphOrderCallback(JackGraphOrderCallback callback,
void* arg);
185 virtual int SetBufferSizeCallback(JackBufferSizeCallback callback,
void* arg);
186 virtual int SetSampleRateCallback(JackBufferSizeCallback callback,
void* arg);
187 virtual int SetClientRegistrationCallback(JackClientRegistrationCallback callback,
void* arg);
188 virtual int SetFreewheelCallback(JackFreewheelCallback callback,
void* arg);
189 virtual int SetPortRegistrationCallback(JackPortRegistrationCallback callback,
void* arg);
190 virtual int SetPortConnectCallback(JackPortConnectCallback callback,
void *arg);
191 virtual int SetPortRenameCallback(JackPortRenameCallback callback,
void *arg);
193 virtual int SetLatencyCallback(JackLatencyCallback callback,
void *arg);
197 virtual char* GetInternalClientName(
int ref);
198 virtual int InternalClientHandle(
const char* client_name, jack_status_t* status);
199 virtual int InternalClientLoad(
const char* client_name, jack_options_t options, jack_status_t* status,
jack_varargs_t* va);
200 virtual void InternalClientUnload(
int ref, jack_status_t* status);
203 jack_nframes_t CycleWait();
204 void CycleSignal(
int status);
205 virtual int SetProcessThread(JackThreadCallback fun,
void *arg);
208 virtual jack_session_command_t* SessionNotify(
const char* target, jack_session_event_type_t type,
const char* path);
210 virtual char* GetUUIDForClientName(
const char* client_name);
211 virtual char* GetClientNameByUUID(
const char* uuid);
212 virtual int ReserveClientName(
const char* client_name,
const char* uuid);
213 virtual int ClientHasSessionCallback(
const char* client_name);
216 virtual int PropertyChangeNotify(jack_uuid_t subject,
const char* key, jack_property_change_t change);
Inter process channel for server/client bidirectionnal communication : request and (receiving) notifi...
The base class for runnable objects, that have an Init and Execute method to be called in a threa...
Inter process synchronization using POSIX semaphore.
Graph manager: contains the connection manager and the port array.
A "decorator" debug client to validate API use.
Engine control in shared memory.
detail::JackClientChannelInterface * fChannel
void(* JackSessionCallback)(jack_session_event_t *event, void *arg)
The base class for clients: share part of the implementation for JackInternalClient and JackLibClient...
Darwin threads. Real-time threads are actually "time constraint" threads.