Browse Source

Reset in case of unrecoverable timing problems : in progress

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2603 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
cbebdea594
4 changed files with 31 additions and 3 deletions
  1. +21
    -2
      common/JackCallbackNetIOAdapter.cpp
  2. +2
    -0
      common/JackIOAdapter.h
  3. +6
    -1
      common/JackResampler.cpp
  4. +2
    -0
      common/JackResampler.h

+ 21
- 2
common/JackCallbackNetIOAdapter.cpp View File

@@ -33,6 +33,7 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg)
{
JackCallbackNetIOAdapter* adapter = static_cast<JackCallbackNetIOAdapter*>(arg);
float* buffer;
bool failure = false;
int i;
if (!adapter->fIOAdapter->IsRunning())
@@ -41,16 +42,34 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg)
// DLL
adapter->fIOAdapter->SetCallbackTime(jack_get_time());
// Push/pull from ringbuffer
for (i = 0; i < adapter->fCaptureChannels; i++) {
buffer = static_cast<float*>(jack_port_get_buffer(adapter->fCapturePortList[i], frames));
adapter->fCaptureRingBuffer[i]->Read(buffer, frames);
if (adapter->fCaptureRingBuffer[i]->Read(buffer, frames) == 0)
failure = true;
}
for (i = 0; i < adapter->fPlaybackChannels; i++) {
buffer = static_cast<float*>(jack_port_get_buffer(adapter->fPlaybackPortList[i], frames));
adapter->fPlaybackRingBuffer[i]->Write(buffer, frames);
if (adapter->fPlaybackRingBuffer[i]->Write(buffer, frames) == 0)
failure = true;
}
// Reset all ringbuffers in case of failure
if (failure) {
jack_error("JackCallbackNetIOAdapter::Process ringbuffer failure... reset");
for (i = 0; i < adapter->fCaptureChannels; i++) {
adapter->fCaptureRingBuffer[i]->Reset();
}
for (i = 0; i < adapter->fPlaybackChannels; i++) {
adapter->fPlaybackRingBuffer[i]->Reset();
}
adapter->fIOAdapter->Reset();
}
return 0;
}



+ 2
- 0
common/JackIOAdapter.h View File

@@ -79,6 +79,8 @@ namespace Jack
bool IsRunning() {return fRunning;}
virtual void Reset() {fRunning = false;}
virtual int Open();
virtual int Close();


+ 6
- 1
common/JackResampler.cpp View File

@@ -26,7 +26,7 @@ JackResampler::JackResampler():fNum(1),fDenom(1)
{
fRingBuffer = jack_ringbuffer_create(sizeof(float) * DEFAULT_RB_SIZE);
jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * DEFAULT_RB_SIZE) / 2);
}
}

JackResampler::~JackResampler()
{
@@ -34,6 +34,11 @@ JackResampler::~JackResampler()
jack_ringbuffer_free(fRingBuffer);
}

void JackResampler::Reset()
{
jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * DEFAULT_RB_SIZE) / 2);
}

unsigned int JackResampler::ReadSpace()
{
return jack_ringbuffer_read_space(fRingBuffer);


+ 2
- 0
common/JackResampler.h View File

@@ -43,6 +43,8 @@ namespace Jack
JackResampler();
virtual ~JackResampler();
virtual void Reset();
virtual int ReadResample(float* buffer, unsigned int frames);
virtual int WriteResample(float* buffer, unsigned int frames);


Loading…
Cancel
Save