diff --git a/common/JackAudioDriver.cpp b/common/JackAudioDriver.cpp index b46b1c02..80fa5900 100644 --- a/common/JackAudioDriver.cpp +++ b/common/JackAudioDriver.cpp @@ -36,7 +36,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { -JackAudioDriver::JackAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table) +JackAudioDriver::JackAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table) : JackDriver(name, alias, engine, table), fCaptureChannels(0), fPlaybackChannels(0), diff --git a/common/JackAudioDriver.h b/common/JackAudioDriver.h index 70e95d79..6ffdf8c3 100644 --- a/common/JackAudioDriver.h +++ b/common/JackAudioDriver.h @@ -57,7 +57,7 @@ class EXPORT JackAudioDriver : public JackDriver public: - JackAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table); + JackAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table); virtual ~JackAudioDriver(); virtual int Process(); diff --git a/common/JackDriver.cpp b/common/JackDriver.cpp index 888b4043..ee3a097c 100644 --- a/common/JackDriver.cpp +++ b/common/JackDriver.cpp @@ -39,7 +39,7 @@ using namespace std; namespace Jack { -JackDriver::JackDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table) +JackDriver::JackDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table) { assert(strlen(name) < JACK_CLIENT_NAME_SIZE); fSynchroTable = table; diff --git a/common/JackDriver.h b/common/JackDriver.h index 38a54467..41eb6dd3 100644 --- a/common/JackDriver.h +++ b/common/JackDriver.h @@ -29,7 +29,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { -class JackEngine; +class JackEngineInterface; class JackGraphManager; class JackSynchro; struct JackEngineControl; @@ -150,7 +150,7 @@ class EXPORT JackDriver : public JackDriverClient jack_nframes_t fPlaybackLatency; jack_time_t fLastWaitUst; float fDelayedUsecs; - JackEngine* fEngine; + JackEngineInterface* fEngine; JackGraphManager* fGraphManager; JackSynchro** fSynchroTable; JackEngineControl* fEngineControl; @@ -160,7 +160,7 @@ class EXPORT JackDriver : public JackDriverClient public: - JackDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table); + JackDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table); JackDriver(); virtual ~JackDriver(); diff --git a/common/JackDriverLoader.h b/common/JackDriverLoader.h index 6b75e2bf..1421037c 100644 --- a/common/JackDriverLoader.h +++ b/common/JackDriverLoader.h @@ -44,11 +44,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #endif typedef jack_driver_desc_t * (*JackDriverDescFunction) (); -typedef Jack::JackDriverClientInterface* (*initialize) (Jack::JackEngine*, Jack::JackSynchro**, const JSList *); +typedef Jack::JackDriverClientInterface* (*initialize) (Jack::JackEngineInterface*, Jack::JackSynchro**, const JSList *); typedef struct _jack_driver_info { - Jack::JackDriverClientInterface* (*initialize)(Jack::JackEngine*, Jack::JackSynchro**, const JSList *); + Jack::JackDriverClientInterface* (*initialize)(Jack::JackEngineInterface*, Jack::JackSynchro**, const JSList *); DRIVER_HANDLE handle; } jack_driver_info_t; diff --git a/common/JackDummyDriver.cpp b/common/JackDummyDriver.cpp index 77e1cdd9..8ea3dd90 100644 --- a/common/JackDummyDriver.cpp +++ b/common/JackDummyDriver.cpp @@ -134,7 +134,7 @@ extern "C" return desc; } - Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngine* engine, Jack::JackSynchro** table, const JSList* params) { + Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) { jack_nframes_t sample_rate = 48000; jack_nframes_t period_size = 1024; unsigned int capture_ports = 2; diff --git a/common/JackDummyDriver.h b/common/JackDummyDriver.h index 1d4dc801..01f01279 100644 --- a/common/JackDummyDriver.h +++ b/common/JackDummyDriver.h @@ -38,7 +38,7 @@ class JackDummyDriver : public JackAudioDriver public: - JackDummyDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table, unsigned long wait_time) + JackDummyDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table, unsigned long wait_time) : JackAudioDriver(name, alias, engine, table), fWaitTime(wait_time) {} virtual ~JackDummyDriver() diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 09bcf002..918aa692 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -53,6 +53,7 @@ JackEngine::JackEngine(JackGraphManager* manager, JackEngine::~JackEngine() { + jack_log("JackEngine::~JackEngine"); delete fChannel; delete fSignal; } diff --git a/common/JackEngine.h b/common/JackEngine.h index 2e6e6ee4..e9eabf30 100644 --- a/common/JackEngine.h +++ b/common/JackEngine.h @@ -33,12 +33,68 @@ struct JackEngineControl; class JackServerNotifyChannelInterface; class JackExternalClient; class JackSyncInterface; + +class JackEngineInterface +{ + public: + + JackEngineInterface() + {} + JackEngineInterface(JackGraphManager* manager, JackSynchro** table, JackEngineControl* controler) + {} + virtual ~JackEngineInterface() + {} + + virtual int Open() = 0; + virtual int Close() = 0; + + // Client management + virtual int ClientCheck(const char* name, char* name_res, int protocol, int options, int* status) = 0; + virtual int ClientExternalOpen(const char* name, int pid, int* ref, int* shared_engine, int* shared_client, int* shared_graph_manager) = 0; + virtual int ClientInternalOpen(const char* name, int* ref, JackEngineControl** shared_engine, JackGraphManager** shared_manager, JackClientInterface* client, bool wait) = 0; + + virtual int ClientExternalClose(int refnum) = 0; + virtual int ClientInternalClose(int refnum, bool wait) = 0; + + virtual int ClientActivate(int refnum, bool state) = 0; + virtual int ClientDeactivate(int refnum) = 0; + + virtual int GetClientPID(const char* name) = 0; + + // Internal client management + virtual int GetInternalClientName(int int_ref, char* name_res) = 0; + virtual int InternalClientHandle(const char* client_name, int* status, int* int_ref) = 0; + virtual int InternalClientUnload(int refnum, int* status) = 0; + + // Port management + virtual int PortRegister(int refnum, const char* name, const char *type, unsigned int flags, unsigned int buffer_size, unsigned int* port) = 0; + virtual int PortUnRegister(int refnum, jack_port_id_t port) = 0; + + virtual int PortConnect(int refnum, const char* src, const char* dst) = 0; + virtual int PortDisconnect(int refnum, const char* src, const char* dst) = 0; + + virtual int PortConnect(int refnum, jack_port_id_t src, jack_port_id_t dst) = 0; + virtual int PortDisconnect(int refnum, jack_port_id_t src, jack_port_id_t dst) = 0; + + // Graph + virtual bool Process(jack_time_t callback_usecs) = 0; + + // Notifications + virtual void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs) = 0; + virtual void NotifyXRun(int refnum) = 0; + virtual void NotifyGraphReorder() = 0; + virtual void NotifyBufferSize(jack_nframes_t nframes) = 0; + virtual void NotifyFreewheel(bool onoff) = 0; + virtual void NotifyPortRegistation(jack_port_id_t port_index, bool onoff) = 0; + virtual void NotifyPortConnect(jack_port_id_t src, jack_port_id_t dst, bool onoff) = 0; + virtual void NotifyActivate(int refnum) = 0; +}; /*! \brief Engine description. */ -class JackEngine +class JackEngine : public JackEngineInterface { private: diff --git a/common/JackFreewheelDriver.h b/common/JackFreewheelDriver.h index 493213e3..94104d2a 100644 --- a/common/JackFreewheelDriver.h +++ b/common/JackFreewheelDriver.h @@ -35,7 +35,7 @@ class JackFreewheelDriver : public JackDriver public: - JackFreewheelDriver(JackEngine* engine, JackSynchro** table): JackDriver("freewheel", "", engine, table) + JackFreewheelDriver(JackEngineInterface* engine, JackSynchro** table): JackDriver("freewheel", "", engine, table) {} virtual ~JackFreewheelDriver() {} diff --git a/common/JackInternalClientChannel.h b/common/JackInternalClientChannel.h index 0f613ae8..64bc6739 100644 --- a/common/JackInternalClientChannel.h +++ b/common/JackInternalClientChannel.h @@ -35,7 +35,7 @@ class JackInternalClientChannel : public JackClientChannelInterface private: JackServer* fServer; - JackEngine* fEngine; + JackEngineInterface* fEngine; public: diff --git a/common/JackLockedEngine.h b/common/JackLockedEngine.h index 9dde2d2a..d2aa2a3b 100644 --- a/common/JackLockedEngine.h +++ b/common/JackLockedEngine.h @@ -30,7 +30,7 @@ namespace Jack \brief Locked Engine. */ -class JackLockedEngine : public JackEngine, public JackLockAble +class JackLockedEngine : public JackEngineInterface, public JackLockAble { private: diff --git a/common/JackLoopbackDriver.h b/common/JackLoopbackDriver.h index d042e84b..0966d462 100644 --- a/common/JackLoopbackDriver.h +++ b/common/JackLoopbackDriver.h @@ -35,7 +35,7 @@ class JackLoopbackDriver : public JackAudioDriver public: - JackLoopbackDriver(JackEngine* engine, JackSynchro** table) + JackLoopbackDriver(JackEngineInterface* engine, JackSynchro** table) : JackAudioDriver("loopback", "", engine, table) {} virtual ~JackLoopbackDriver() diff --git a/common/JackServer.cpp b/common/JackServer.cpp index 743b963f..3c9d7bc9 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -284,7 +284,7 @@ int JackServer::SetTimebaseCallback(int refnum, int conditional) return fEngineControl->fTransport.SetTimebase(refnum, conditional); } -JackEngine* JackServer::GetEngine() +JackEngineInterface* JackServer::GetEngine() { return fEngine; } diff --git a/common/JackServer.h b/common/JackServer.h index 61311ff3..eac66acb 100644 --- a/common/JackServer.h +++ b/common/JackServer.h @@ -35,7 +35,7 @@ class JackDriverClientInterface; class JackServerChannelInterface; class JackSyncInterface; struct JackEngineControl; -class JackEngine; +class JackEngineInterface; /*! \brief The Jack server. @@ -50,7 +50,7 @@ class EXPORT JackServer JackDriverClientInterface* fAudioDriver; JackDriverClientInterface* fFreewheelDriver; JackDriverClientInterface* fLoopbackDriver; - JackEngine* fEngine; + JackEngineInterface* fEngine; JackEngineControl* fEngineControl; JackGraphManager* fGraphManager; JackServerChannelInterface* fChannel; @@ -81,7 +81,7 @@ class EXPORT JackServer int SetTimebaseCallback(int refnum, int conditional); // Object access - JackEngine* GetEngine(); + JackEngineInterface* GetEngine(); JackEngineControl* GetEngineControl(); JackSynchro** GetSynchroTable(); JackGraphManager* GetGraphManager(); diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 93f1dd09..8b654ad5 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -2597,7 +2597,7 @@ extern "C" return desc; } - Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngine* engine, Jack::JackSynchro** table, const JSList* params) { + Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) { jack_nframes_t srate = 48000; jack_nframes_t frames_per_interrupt = 1024; unsigned long user_nperiods = 2; diff --git a/linux/firewire/JackFFADODriver.cpp b/linux/firewire/JackFFADODriver.cpp index ee19bd85..7c57bd59 100644 --- a/linux/firewire/JackFFADODriver.cpp +++ b/linux/firewire/JackFFADODriver.cpp @@ -915,7 +915,7 @@ extern "C" return desc; } - Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngine* engine, Jack::JackSynchro** table, const JSList* params) { + Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) { const JSList * node; const jack_driver_param_t * param; diff --git a/linux/freebob/JackFreebobDriver.cpp b/linux/freebob/JackFreebobDriver.cpp index f9402f5e..17cc1ec9 100644 --- a/linux/freebob/JackFreebobDriver.cpp +++ b/linux/freebob/JackFreebobDriver.cpp @@ -1039,7 +1039,7 @@ extern "C" return desc; } - Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngine* engine, Jack::JackSynchro** table, const JSList* params) { + Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) { unsigned int port = 0; unsigned int node_id = -1; int nbitems; diff --git a/macosx/JackCoreAudioDriver.cpp b/macosx/JackCoreAudioDriver.cpp index e556d1fb..4546f39e 100644 --- a/macosx/JackCoreAudioDriver.cpp +++ b/macosx/JackCoreAudioDriver.cpp @@ -419,7 +419,7 @@ OSStatus JackCoreAudioDriver::GetTotalChannels(AudioDeviceID device, int* channe return err; } -JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table) +JackCoreAudioDriver::JackCoreAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table) : JackAudioDriver(name, alias, engine, table), fJackInputData(NULL), fDriverOutputData(NULL), fState(false), fIOUsage(1.f) {} @@ -1243,7 +1243,7 @@ extern "C" return desc; } - Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngine* engine, Jack::JackSynchro** table, const JSList* params) { + Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) { jack_nframes_t srate = 44100; jack_nframes_t frames_per_interrupt = 128; int capture = FALSE; diff --git a/macosx/JackCoreAudioDriver.h b/macosx/JackCoreAudioDriver.h index b0736e57..186d6c1b 100644 --- a/macosx/JackCoreAudioDriver.h +++ b/macosx/JackCoreAudioDriver.h @@ -143,7 +143,7 @@ class JackCoreAudioDriver : public JackAudioDriver public: - JackCoreAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table); + JackCoreAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table); virtual ~JackCoreAudioDriver(); int Open(jack_nframes_t frames_per_cycle, diff --git a/macosx/JackMachServerChannel.cpp b/macosx/JackMachServerChannel.cpp index ac1c30c8..40bb5ec7 100644 --- a/macosx/JackMachServerChannel.cpp +++ b/macosx/JackMachServerChannel.cpp @@ -70,7 +70,7 @@ void JackMachServerChannel::Close() fServerPort.DestroyPort(); } -JackEngine* JackMachServerChannel::GetEngine() +JackEngineInterface* JackMachServerChannel::GetEngine() { return fServer->GetEngine(); } diff --git a/macosx/JackMachServerChannel.h b/macosx/JackMachServerChannel.h index aad1f3b1..f14bd810 100644 --- a/macosx/JackMachServerChannel.h +++ b/macosx/JackMachServerChannel.h @@ -29,7 +29,7 @@ namespace Jack { class JackServer; -class JackEngine; +class JackEngineInterface; /*! \brief JackServerChannel using Mach IPC. @@ -55,7 +55,7 @@ class JackMachServerChannel : public JackServerChannelInterface, public JackRunn int Open(const char* server_name, JackServer* server); // Open the Server/Client connection void Close(); // Close the Server/Client connection - JackEngine* GetEngine(); + JackEngineInterface* GetEngine(); JackServer* GetServer(); void ClientCheck(char* name, char* name_res, int protocol, int options, int* status, int* result); diff --git a/windows/JackPortAudioDriver.cpp b/windows/JackPortAudioDriver.cpp index c176a76c..f6866c3b 100644 --- a/windows/JackPortAudioDriver.cpp +++ b/windows/JackPortAudioDriver.cpp @@ -568,7 +568,7 @@ extern "C" return desc; } - EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngine* engine, Jack::JackSynchro** table, const JSList* params) { + EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackEngineInterface* engine, Jack::JackSynchro** table, const JSList* params) { jack_nframes_t srate = 44100; jack_nframes_t frames_per_interrupt = 512; int capture = FALSE; diff --git a/windows/JackPortAudioDriver.h b/windows/JackPortAudioDriver.h index 9cf1c59b..391b02c2 100644 --- a/windows/JackPortAudioDriver.h +++ b/windows/JackPortAudioDriver.h @@ -53,7 +53,7 @@ class JackPortAudioDriver : public JackAudioDriver public: - JackPortAudioDriver(const char* name, const char* alias, JackEngine* engine, JackSynchro** table) + JackPortAudioDriver(const char* name, const char* alias, JackEngineInterface* engine, JackSynchro** table) : JackAudioDriver(name, alias, engine, table), fStream(NULL), fInputBuffer(NULL), fOutputBuffer(NULL), fInputDevice(paNoDevice), fOutputDevice(paNoDevice) {}