From 809c2097fb7a98b080b58ffab65c49d66efb1d64 Mon Sep 17 00:00:00 2001 From: sletz Date: Fri, 15 Feb 2008 15:58:11 +0000 Subject: [PATCH] Add missing include git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1865 0c269be4-1314-0410-8aa9-9f06e86f4224 --- common/JackAPI.cpp | 32 ++++++++++++++++++++++++++++++++ common/JackClient.cpp | 38 +++++++++++++++++++++++++++++++++++--- common/JackClient.h | 4 ++++ common/JackGlobals.h | 2 +- common/JackTypes.h | 2 ++ common/jack/jack.h | 5 +++++ 6 files changed, 79 insertions(+), 4 deletions(-) diff --git a/common/JackAPI.cpp b/common/JackAPI.cpp index 4cf75e13..2187603c 100644 --- a/common/JackAPI.cpp +++ b/common/JackAPI.cpp @@ -65,6 +65,11 @@ extern "C" JackProcessCallback process_callback, void *arg); EXPORT jack_nframes_t jack_thread_wait(jack_client_t *client, int status); + + // new + EXPORT jack_nframes_t jack_cycle_wait (jack_client_t*); + EXPORT void jack_cycle_signal (jack_client_t*, int status); + EXPORT int jack_set_thread_init_callback (jack_client_t *client, JackThreadInitCallback thread_init_callback, void *arg); @@ -674,6 +679,33 @@ EXPORT jack_nframes_t jack_thread_wait(jack_client_t* ext_client, int status) } } +EXPORT jack_nframes_t jack_cycle_wait(jack_client_t* ext_client) +{ +#ifdef __CLIENTDEBUG__ + JackLibGlobals::CheckContext(); +#endif + JackClient* client = (JackClient*)ext_client; + if (client == NULL) { + jack_error("jack_cycle_wait called with a NULL client"); + return 0; + } else { + return client->CycleWait(); + } +} + +EXPORT void jack_cycle_signal(jack_client_t* ext_client, int status) +{ +#ifdef __CLIENTDEBUG__ + JackLibGlobals::CheckContext(); +#endif + JackClient* client = (JackClient*)ext_client; + if (client == NULL) { + jack_error("jack_cycle_signal called with a NULL client"); + } else { + client->CycleSignal(status); + } +} + EXPORT int jack_set_freewheel_callback(jack_client_t* ext_client, JackFreewheelCallback freewheel_callback, void* arg) { #ifdef __CLIENTDEBUG__ diff --git a/common/JackClient.cpp b/common/JackClient.cpp index a9b8379b..9a9d4425 100644 --- a/common/JackClient.cpp +++ b/common/JackClient.cpp @@ -66,6 +66,7 @@ JackClient::JackClient(JackSynchro** table) fPortConnectArg = NULL; fSyncArg = NULL; fConditionnal = 0; // Temporary?? + fWait = false; } JackClient::~JackClient() @@ -248,8 +249,10 @@ int JackClient::Activate() #endif */ - if (StartThread() < 0) - return -1; + if (fProcess || !fWait) { // Start thread only of process cb has been setup + if (StartThread() < 0) + return -1; + } int result = -1; fChannel->ClientActivate(GetClientControl()->fRefNum, &result); @@ -290,7 +293,9 @@ int JackClient::Deactivate() fThread->Kill(); #endif */ - fThread->Kill(); + //if (fProcess || fWait) { // Kill thread only of process cb has been setup + fThread->Kill(); + //} return result; } @@ -371,6 +376,7 @@ inline void JackClient::ExecuteThread() } } +/* jack_nframes_t JackClient::Wait(int status) { if (status == 0) @@ -383,6 +389,32 @@ jack_nframes_t JackClient::Wait(int status) CallSyncCallback(); return GetEngineControl()->fBufferSize; } +*/ + +jack_nframes_t JackClient::CycleWait() +{ + fWait = true; + if (!WaitSync()) + return Error(); + CallSyncCallback(); + return GetEngineControl()->fBufferSize; +} + +void JackClient::CycleSignal(int status) +{ + if (status == 0) + CallTimebaseCallback(); + SignalSync(); + if (status != 0) + End(); +} + +jack_nframes_t JackClient::Wait(int status) +{ + CycleSignal(status); + return CycleWait(); +} + inline int JackClient::CallProcessCallback() { diff --git a/common/JackClient.h b/common/JackClient.h index 7d8fd1c0..c730d2f6 100644 --- a/common/JackClient.h +++ b/common/JackClient.h @@ -172,6 +172,10 @@ class JackClient : public JackClientInterface, public JackRunnableInterface // Fons Adriaensen thread model virtual jack_nframes_t Wait(int status); + + virtual jack_nframes_t CycleWait(); + void CycleSignal(int status); + bool fWait; // JackRunnableInterface interface bool Init(); diff --git a/common/JackGlobals.h b/common/JackGlobals.h index cb729dbb..0bfe6521 100644 --- a/common/JackGlobals.h +++ b/common/JackGlobals.h @@ -39,7 +39,7 @@ class JackEngine; /*! \brief Factory description -\totdo possibly use in a dynamic way to test different communication/synchro implementations. +\todo possibly use in a dynamic way to test different communication/synchro implementations. */ class JackFactoryImpl diff --git a/common/JackTypes.h b/common/JackTypes.h index db71fc30..56210d8d 100644 --- a/common/JackTypes.h +++ b/common/JackTypes.h @@ -37,6 +37,8 @@ typedef ULONGLONG UInt64; typedef unsigned long long UInt64; #endif +#include + typedef uint16_t jack_int_t; // Internal type for ports and refnum namespace Jack diff --git a/common/jack/jack.h b/common/jack/jack.h index 29bd7955..70498ad4 100644 --- a/common/jack/jack.h +++ b/common/jack/jack.h @@ -198,6 +198,11 @@ extern "C" */ jack_nframes_t jack_thread_wait (jack_client_t*, int status); + + + jack_nframes_t jack_cycle_wait (jack_client_t*); + void jack_cycle_signal (jack_client_t*, int status); + /** * Tell JACK to call @a thread_init_callback once just after * the creation of the thread in which all other callbacks