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
This commit is contained in:
parent
a1bcae9cc7
commit
4be0936d3e
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -355,6 +355,7 @@ int JackClient::StartThread()
|
|||
/*!
|
||||
\brief RT thread.
|
||||
*/
|
||||
|
||||
bool JackClient::Execute()
|
||||
{
|
||||
if (!jack_tls_set(JackGlobals::fRealTime, this))
|
||||
|
@ -362,71 +363,57 @@ 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)
|
||||
inline jack_nframes_t JackClient::CycleWaitAux()
|
||||
{
|
||||
if (!WaitSync())
|
||||
Error(); // Terminates the thread
|
||||
CallSyncCallbackAux();
|
||||
return GetEngineControl()->fBufferSize;
|
||||
}
|
||||
|
||||
inline void JackClient::CycleSignalAux(int status)
|
||||
{
|
||||
if (status == 0)
|
||||
CallTimebaseCallback();
|
||||
CallTimebaseCallbackAux();
|
||||
SignalSync();
|
||||
if (status != 0)
|
||||
End(); // Terminates the thread
|
||||
if (!WaitSync())
|
||||
Error(); // Terminates the thread
|
||||
CallSyncCallback();
|
||||
return GetEngineControl()->fBufferSize;
|
||||
if (status != 0)
|
||||
End(); // Terminates the thread
|
||||
}
|
||||
|
||||
jack_nframes_t JackClient::CycleWait()
|
||||
{
|
||||
if (!WaitSync())
|
||||
Error(); // Terminates the thread
|
||||
CallSyncCallback();
|
||||
return GetEngineControl()->fBufferSize;
|
||||
return CycleWaitAux();
|
||||
}
|
||||
|
||||
void JackClient::CycleSignal(int status)
|
||||
{
|
||||
if (status == 0)
|
||||
CallTimebaseCallback();
|
||||
SignalSync();
|
||||
if (status != 0)
|
||||
End(); // Terminates the thread
|
||||
CycleSignalAux(status);
|
||||
}
|
||||
|
||||
inline int JackClient::CallProcessCallback()
|
||||
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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…
Reference in New Issue