Browse Source

Cleanup driver classes

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2522 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
6b92092bc0
8 changed files with 333 additions and 185 deletions
  1. +57
    -1
      common/JackDriver.cpp
  2. +19
    -53
      common/JackDriver.h
  3. +1
    -0
      common/JackException.h
  4. +59
    -0
      common/JackRestartThreadedDriver.cpp
  5. +46
    -0
      common/JackRestartThreadedDriver.h
  6. +105
    -24
      common/JackThreadedDriver.cpp
  7. +32
    -105
      common/JackThreadedDriver.h
  8. +14
    -2
      macosx/Jackdmp.xcodeproj/project.pbxproj

+ 57
- 1
common/JackDriver.cpp View File

@@ -174,7 +174,7 @@ int JackDriver::ClientNotify(int refnum, const char* name, int notify, int sync,
return 0;
}

bool JackDriver::IsRealTime()
bool JackDriver::IsRealTime() const
{
return fEngineControl->fRealTime;
}
@@ -231,4 +231,60 @@ int JackDriverClient::ProcessSlaves()
return res;
}

int JackDriver::Process()
{
return 0;
}

int JackDriver::ProcessNull()
{
return 0;
}

int JackDriver::Attach()
{
return 0;
}

int JackDriver::Detach()
{
return 0;
}

int JackDriver::Read()
{
return 0;
}

int JackDriver::Write()
{
return 0;
}

int JackDriver::Start()
{
return 0;
}

int JackDriver::Stop()
{
return 0;
}

int JackDriver::SetBufferSize(jack_nframes_t buffer_size)
{
return 0;
}

int JackDriver::SetSampleRate(jack_nframes_t sample_rate)
{
return 0;
}

bool JackDriver::Init()
{
return true;
}


} // end of namespace

+ 19
- 53
common/JackDriver.h View File

@@ -83,7 +83,7 @@ class EXPORT JackDriverInterface
virtual void RemoveSlave(JackDriverInterface* slave) = 0;
virtual int ProcessSlaves() = 0;
virtual bool IsRealTime() = 0;
virtual bool IsRealTime() const = 0;
};
/*!
\brief The base interface for drivers clients.
@@ -165,66 +165,32 @@ class EXPORT JackDriver : public JackDriverClient
virtual int Close();
virtual int Process()
{
return 0;
}
virtual int ProcessNull()
{
return 0;
}
virtual int Attach()
{
return 0;
}
virtual int Detach()
{
return 0;
}
virtual int Read()
{
return 0;
}
virtual int Write()
{
return 0;
}
virtual int Start()
{
return 0;
}
virtual int Stop()
{
return 0;
}
virtual int SetBufferSize(jack_nframes_t buffer_size)
{
return 0;
}
virtual int SetSampleRate(jack_nframes_t sample_rate)
{
return 0;
}
virtual int Process();
virtual int ProcessNull();
virtual int Attach();
virtual int Detach();
virtual int Read();
virtual int Write();
virtual int Start();
virtual int Stop();
virtual int SetBufferSize(jack_nframes_t buffer_size);
virtual int SetSampleRate(jack_nframes_t sample_rate);
void NotifyXRun(jack_time_t callback_usecs, float delayed_usecs); // XRun notification sent by the driver
virtual bool IsRealTime();
virtual bool IsRealTime() const;
int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2);
void SetupDriverSync(int ref, bool freewheel);
virtual bool Init()
{
return true;
}
virtual bool Init();
};
} // end of namespace


+ 1
- 0
common/JackException.h View File

@@ -24,6 +24,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include <iostream>
#include <string>
#include "JackExports.h"
#include "JackError.h"

namespace Jack
{


+ 59
- 0
common/JackRestartThreadedDriver.cpp View File

@@ -0,0 +1,59 @@
/*
Copyright (C) 2001 Paul Davis
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif

#ifdef WIN32
#pragma warning (disable : 4786)
#endif

#include "JackRestartThreadedDriver.h"
#include "JackException.h"

namespace Jack
{

bool JackRestartThreadedDriver::Execute()
{
try {
// Keep running even in case of error
while (fThread.GetStatus() == JackThread::kRunning) {
Process();
}
return false;
} catch (JackDriverException& e) {
e.PrintMessage();
jack_log("Driver is restarted");
fThread.DropRealTime();
// Thread in kIniting status again...
fThread.SetStatus(JackThread::kIniting);
if (Init()) {
// Thread in kRunning status again...
fThread.SetStatus(JackThread::kRunning);
return true;
} else {
return false;
}
}
}

} // end of namespace

+ 46
- 0
common/JackRestartThreadedDriver.h View File

@@ -0,0 +1,46 @@
/*
Copyright (C) 2001 Paul Davis
Copyright (C) 2004-2008 Grame

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __JackRestartThreadedDriver__
#define __JackRestartThreadedDriverr__

#include "JackThreadedDriver.h"

namespace Jack
{

class EXPORT JackRestartThreadedDriver : public JackThreadedDriver
{
public:

JackRestartThreadedDriver(JackDriverClient* driver)
:JackThreadedDriver(driver)
{}
virtual ~JackRestartThreadedDriver()
{}

// JackRunnableInterface interface
virtual bool Execute();
};

} // end of namespace


#endif

+ 105
- 24
common/JackThreadedDriver.cpp View File

@@ -46,6 +46,111 @@ JackThreadedDriver::~JackThreadedDriver()
delete fDriver;
}

int JackThreadedDriver::Open()
{
return fDriver->Open();
}

int JackThreadedDriver::Open(jack_nframes_t nframes,
jack_nframes_t samplerate,
bool capturing,
bool playing,
int inchannels,
int outchannels,
bool monitor,
const char* capture_driver_name,
const char* playback_driver_name,
jack_nframes_t capture_latency,
jack_nframes_t playback_latency)
{
return fDriver->Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency);
}

int JackThreadedDriver::Close()
{
return fDriver->Close();
}

int JackThreadedDriver::Process()
{
return fDriver->Process();
}

int JackThreadedDriver::ProcessNull()
{
return fDriver->ProcessNull();
}

int JackThreadedDriver::Attach()
{
return fDriver->Attach();
}

int JackThreadedDriver::Detach()
{
return fDriver->Detach();
}

int JackThreadedDriver::Read()
{
return fDriver->Read();
}

int JackThreadedDriver::Write()
{
return fDriver->Write();
}

int JackThreadedDriver::SetBufferSize(jack_nframes_t buffer_size)
{
return fDriver->SetBufferSize(buffer_size);
}

int JackThreadedDriver::SetSampleRate(jack_nframes_t sample_rate)
{
return fDriver->SetSampleRate(sample_rate);
}

void JackThreadedDriver::SetMaster(bool onoff)
{
fDriver->SetMaster(onoff);
}

bool JackThreadedDriver::GetMaster()
{
return fDriver->GetMaster();
}

void JackThreadedDriver::AddSlave(JackDriverInterface* slave)
{
fDriver->AddSlave(slave);
}

void JackThreadedDriver::RemoveSlave(JackDriverInterface* slave)
{
fDriver->RemoveSlave(slave);
}

int JackThreadedDriver::ProcessSlaves()
{
return fDriver->ProcessSlaves();
}

int JackThreadedDriver::ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2)
{
return fDriver->ClientNotify(refnum, name, notify, sync, value1, value2);
}

JackClientControl* JackThreadedDriver::GetClientControl() const
{
return fDriver->GetClientControl();
}

bool JackThreadedDriver::IsRealTime() const
{
return fDriver->IsRealTime();
}

int JackThreadedDriver::Start()
{
jack_log("JackThreadedDriver::Start");
@@ -120,28 +225,4 @@ bool JackThreadedDriver::Init()
}
}

bool JackRestartThreadedDriver::Execute()
{
try {
// Keep running even in case of error
while (fThread.GetStatus() == JackThread::kRunning) {
Process();
}
return false;
} catch (JackDriverException& e) {
e.PrintMessage();
jack_log("Driver is restarted");
fThread.DropRealTime();
// Thread in kIniting status again...
fThread.SetStatus(JackThread::kIniting);
if (Init()) {
// Thread in kRunning status again...
fThread.SetStatus(JackThread::kRunning);
return true;
} else {
return false;
}
}
}

} // end of namespace

+ 32
- 105
common/JackThreadedDriver.h View File

@@ -44,11 +44,7 @@ class EXPORT JackThreadedDriver : public JackDriverClientInterface, public JackR
JackThreadedDriver(JackDriverClient* driver);
virtual ~JackThreadedDriver();

virtual int Open()
{
return fDriver->Open();
}

virtual int Open();
virtual int Open(jack_nframes_t nframes,
jack_nframes_t samplerate,
bool capturing,
@@ -59,113 +55,44 @@ class EXPORT JackThreadedDriver : public JackDriverClientInterface, public JackR
const char* capture_driver_name,
const char* playback_driver_name,
jack_nframes_t capture_latency,
jack_nframes_t playback_latency)
{
return fDriver->Open(nframes, samplerate, capturing, playing, inchannels, outchannels, monitor, capture_driver_name, playback_driver_name, capture_latency, playback_latency);
}

int Close()
{
return fDriver->Close();
}

int Process()
{
return fDriver->Process();
}
jack_nframes_t playback_latency);
virtual int Close();
virtual int Process();
int ProcessNull()
{
return fDriver->ProcessNull();
}

int Attach()
{
return fDriver->Attach();
}
int Detach()
{
return fDriver->Detach();
}

int Read()
{
return fDriver->Read();
}
int Write()
{
return fDriver->Write();
}

int Start();
int Stop();

int SetBufferSize(jack_nframes_t buffer_size)
{
return fDriver->SetBufferSize(buffer_size);
}

int SetSampleRate(jack_nframes_t sample_rate)
{
return fDriver->SetSampleRate(sample_rate);
}

void SetMaster(bool onoff)
{
fDriver->SetMaster(onoff);
}
bool GetMaster()
{
return fDriver->GetMaster();
}

void AddSlave(JackDriverInterface* slave)
{
fDriver->AddSlave(slave);
}
void RemoveSlave(JackDriverInterface* slave)
{
fDriver->RemoveSlave(slave);
}
int ProcessSlaves()
{
return fDriver->ProcessSlaves();
}

int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2)
{
return fDriver->ClientNotify(refnum, name, notify, sync, value1, value2);
}

JackClientControl* GetClientControl() const
{
return fDriver->GetClientControl();
}

bool IsRealTime()
{
return fDriver->IsRealTime();
}

virtual int ProcessNull();
virtual int Attach();
virtual int Detach();
virtual int Read();
virtual int Write();
virtual int Start();
virtual int Stop();

virtual int SetBufferSize(jack_nframes_t buffer_size);
virtual int SetSampleRate(jack_nframes_t sample_rate);
virtual void SetMaster(bool onoff);
virtual bool GetMaster();
virtual void AddSlave(JackDriverInterface* slave);
virtual void RemoveSlave(JackDriverInterface* slave);
virtual int ProcessSlaves();
virtual int ClientNotify(int refnum, const char* name, int notify, int sync, int value1, int value2);
virtual JackClientControl* GetClientControl() const;
virtual bool IsRealTime() const;
// JackRunnableInterface interface
virtual bool Execute();
virtual bool Init();

};

class EXPORT JackRestartThreadedDriver : public JackThreadedDriver
{
public:

JackRestartThreadedDriver(JackDriverClient* driver):JackThreadedDriver(driver)
{}
virtual ~JackRestartThreadedDriver()
{}

// JackRunnableInterface interface
virtual bool Execute();
};

} // end of namespace




+ 14
- 2
macosx/Jackdmp.xcodeproj/project.pbxproj View File

@@ -310,6 +310,10 @@
4B363F760DEB0D7D001F72D9 /* impulse_grabber.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B363F750DEB0D7D001F72D9 /* impulse_grabber.c */; };
4B3F49080AD8503300491C6E /* jack_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F49070AD8503300491C6E /* jack_cpu.c */; };
4B44FAE70C7598370033A72C /* JackServerLaunch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */; };
4B4CA9750E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; };
4B4CA9760E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */; };
4B4CA9770E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */; };
4B4CA9780E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */; };
4B4F9C8C0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; };
4B4F9C8D0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */; };
4B4F9C8E0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; };
@@ -1187,6 +1191,8 @@
4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; };
4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerLaunch.cpp; path = ../common/JackServerLaunch.cpp; sourceTree = SOURCE_ROOT; };
4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; };
4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackRestartThreadedDriver.h; path = ../common/JackRestartThreadedDriver.h; sourceTree = SOURCE_ROOT; };
4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackRestartThreadedDriver.cpp; path = ../common/JackRestartThreadedDriver.cpp; sourceTree = SOURCE_ROOT; };
4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackMessageBuffer.cpp; path = ../common/JackMessageBuffer.cpp; sourceTree = SOURCE_ROOT; };
4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackMessageBuffer.h; path = ../common/JackMessageBuffer.h; sourceTree = SOURCE_ROOT; };
4B56880F08B5C8620022B32D /* JackFifo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackFifo.cpp; path = ../common/JackFifo.cpp; sourceTree = SOURCE_ROOT; };
@@ -2482,12 +2488,14 @@
4BD56D8707968982006D44F9 /* Threaded */ = {
isa = PBXGroup;
children = (
4BBC93B90DF9736C002DF220 /* JackWaitThreadedDriver.h */,
4BBC93B80DF9736C002DF220 /* JackWaitThreadedDriver.cpp */,
4BF8D1BD0834EEFC00C94B91 /* JackThreadedDriver.h */,
4BF8D1BE0834EEFC00C94B91 /* JackThreadedDriver.cpp */,
4BF8D1B90834EEF100C94B91 /* JackFreewheelDriver.h */,
4BF8D1BA0834EEF100C94B91 /* JackFreewheelDriver.cpp */,
4B4CA9730E02CF9600F4BFDA /* JackRestartThreadedDriver.h */,
4B4CA9740E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp */,
4BBC93B90DF9736C002DF220 /* JackWaitThreadedDriver.h */,
4BBC93B80DF9736C002DF220 /* JackWaitThreadedDriver.cpp */,
);
name = Threaded;
sourceTree = "<group>";
@@ -2676,6 +2684,7 @@
BA222ADB0DC88269001A17F4 /* JackNetTool.h in Headers */,
4B9A26060DBF8584006E9FBC /* jslist.h in Headers */,
4B4F9C930DC20C0400706CB0 /* JackMessageBuffer.h in Headers */,
4B4CA9770E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -3024,6 +3033,7 @@
4B4F9C8D0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */,
4B5F253E0DEE9B8F0041E486 /* JackLockedEngine.h in Headers */,
4BBC93BB0DF9736C002DF220 /* JackWaitThreadedDriver.h in Headers */,
4B4CA9750E02CF9600F4BFDA /* JackRestartThreadedDriver.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5250,6 +5260,7 @@
4B9A26680DBF8B23006E9FBC /* JackControl.cpp in Sources */,
4B0206A10DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */,
4B4F9C920DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */,
4B4CA9780E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5619,6 +5630,7 @@
4B02069E0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */,
4B4F9C8C0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */,
4BBC93BA0DF9736C002DF220 /* JackWaitThreadedDriver.cpp in Sources */,
4B4CA9760E02CF9600F4BFDA /* JackRestartThreadedDriver.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};


Loading…
Cancel
Save