Browse Source

Simplify JackClient RT code, jack_thread_wait API marked deprecated.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3482 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/v1.9.3
sletz 16 years ago
parent
commit
4be0936d3e
7 changed files with 54 additions and 58 deletions
  1. +6
    -1
      ChangeLog
  2. +2
    -1
      common/JackAPI.cpp
  3. +38
    -40
      common/JackClient.cpp
  4. +7
    -6
      common/JackClient.h
  5. +0
    -6
      common/JackDebugClient.cpp
  6. +0
    -3
      common/JackDebugClient.h
  7. +1
    -1
      example-clients/impulse_grabber.c

+ 6
- 1
ChangeLog View File

@@ -18,12 +18,17 @@ Fernando Lopez-Lezcano
Romain Moret
Florian Faber
Michael Voigt
Torben Hohn
Torben Hohn
Paul Davis
---------------------------
Jackdmp changes log
---------------------------

2009-04-03 Stephane Letz <letz@grame.fr>

* Simplify JackClient RT code, jack_thread_wait API marked deprecated."

2009-03-29 Stephane Letz <letz@grame.fr>

* Cleanup JackInternalClient code.


+ 2
- 1
common/JackAPI.cpp View File

@@ -842,7 +842,8 @@ EXPORT jack_nframes_t jack_thread_wait(jack_client_t* ext_client, int status)
jack_error("jack_thread_wait called with a NULL client");
return 0;
} else {
return client->Wait(status);
jack_error("jack_thread_wait: deprecated, use jack_cycle_wait/jack_cycle_signal");
return -1;
}
}



+ 38
- 40
common/JackClient.cpp View File

@@ -355,6 +355,7 @@ int JackClient::StartThread()
/*!
\brief RT thread.
*/

bool JackClient::Execute()
{
if (!jack_tls_set(JackGlobals::fRealTime, this))
@@ -362,73 +363,59 @@ bool JackClient::Execute()
if (GetEngineControl()->fRealTime)
set_threaded_log_function();
// Execute a dummy cycle to be sure thread has the correct properties
DummyCycle();
if (fThreadFun) {
// Execute a dummy cycle to be sure thread has the correct properties (ensure thread creation is finished)
WaitSync();
SignalSync();
fThreadFun(fThreadFunArg);
} else {
if (WaitFirstSync())
ExecuteThread();
ExecuteThread();
}
return false;
}

inline bool JackClient::WaitFirstSync()
void JackClient::DummyCycle()
{
while (true) {
// Start first cycle
WaitSync();
if (IsActive()) {
CallSyncCallback();
// Finish first cycle
if (Wait(CallProcessCallback()) != GetEngineControl()->fBufferSize)
return false;
return true;
} else {
jack_log("Process called for an inactive client");
}
SignalSync();
}
return false;
WaitSync();
SignalSync();
}

inline void JackClient::ExecuteThread()
{
while (Wait(CallProcessCallback()) == GetEngineControl()->fBufferSize);
while (true) {
CycleWaitAux();
CycleSignalAux(CallProcessCallback());
}
}

jack_nframes_t JackClient::Wait(int status)
{
if (status == 0)
CallTimebaseCallback();
SignalSync();
if (status != 0)
End(); // Terminates the thread
if (!WaitSync())
Error(); // Terminates the thread
CallSyncCallback();
return GetEngineControl()->fBufferSize;
}

jack_nframes_t JackClient::CycleWait()
inline jack_nframes_t JackClient::CycleWaitAux()
{
if (!WaitSync())
Error(); // Terminates the thread
CallSyncCallback();
CallSyncCallbackAux();
return GetEngineControl()->fBufferSize;
}

void JackClient::CycleSignal(int status)
inline void JackClient::CycleSignalAux(int status)
{
if (status == 0)
CallTimebaseCallback();
CallTimebaseCallbackAux();
SignalSync();
if (status != 0)
End(); // Terminates the thread
}

jack_nframes_t JackClient::CycleWait()
{
return CycleWaitAux();
}

void JackClient::CycleSignal(int status)
{
CycleSignalAux(status);
}

inline int JackClient::CallProcessCallback()
{
return (fProcess != NULL) ? fProcess(GetEngineControl()->fBufferSize, fProcessArg) : 0;
@@ -696,7 +683,13 @@ void JackClient::TransportStop()

// Never called concurently with the server
// TODO check concurrency with SetSyncCallback

void JackClient::CallSyncCallback()
{
CallSyncCallbackAux();
}

inline void JackClient::CallSyncCallbackAux()
{
if (GetClientControl()->fTransportSync) {
@@ -717,6 +710,11 @@ void JackClient::CallSyncCallback()
}

void JackClient::CallTimebaseCallback()
{
CallTimebaseCallbackAux();
}

inline void JackClient::CallTimebaseCallbackAux()
{
JackTransportEngine& transport = GetEngineControl()->fTransport;
int master;


+ 7
- 6
common/JackClient.h View File

@@ -97,14 +97,18 @@ class JackClient : public JackClientInterface, public JackRunnableInterface
virtual int ClientNotifyImp(int refnum, const char* name, int notify, int sync, int value1, int value);

inline bool WaitFirstSync();
inline void DummyCycle();
inline void ExecuteThread();
inline bool WaitSync();
inline void SignalSync();
inline int CallProcessCallback();
inline void End();
inline void Error();

inline jack_nframes_t CycleWaitAux();
inline void CycleSignalAux(int status);
inline void CallSyncCallbackAux();
inline void CallTimebaseCallbackAux();
public:

JackClient();
@@ -172,10 +176,7 @@ class JackClient : public JackClientInterface, public JackRunnableInterface
virtual int InternalClientLoad(const char* client_name, jack_options_t options, jack_status_t* status, jack_varargs_t* va);
virtual void InternalClientUnload(int ref, jack_status_t* status);

// Fons Adriaensen thread model
virtual jack_nframes_t Wait(int status);

virtual jack_nframes_t CycleWait();
jack_nframes_t CycleWait();
void CycleSignal(int status);
int SetProcessThread(JackThreadCallback fun, void *arg);



+ 0
- 6
common/JackDebugClient.cpp View File

@@ -521,11 +521,5 @@ void JackDebugClient::InternalClientUnload(int ref, jack_status_t* status)
fClient->InternalClientUnload(ref, status);
}

jack_nframes_t JackDebugClient::Wait(int status)
{
CheckClient();
return fClient->Wait(status);
}

} // end of namespace


+ 0
- 3
common/JackDebugClient.h View File

@@ -127,9 +127,6 @@ class JackDebugClient : public JackClient
int InternalClientLoad(const char* client_name, jack_options_t options, jack_status_t* status, jack_varargs_t* va);
void InternalClientUnload(int ref, jack_status_t* status);

// Fons Adriaensen thread model
jack_nframes_t Wait(int status);

JackClientControl* GetClientControl() const;
void CheckClient() const;



+ 1
- 1
example-clients/impulse_grabber.c View File

@@ -95,7 +95,7 @@ main (int argc, char *argv[])
int c;
extern int optind, opterr;
int show_usage = 0;
char *optstring = "d:f";
char *optstring = "d:f:h";
struct option long_options[] = {
{ "help", 1, 0, 'h' },
{ "duration", 1, 0, 'd' },


Loading…
Cancel
Save