Browse Source

Use PushAndPull method in JackOSSAdapter and JackAlsaAdapter.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@3359 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.2
sletz 17 years ago
parent
commit
6eda6fb35f
2 changed files with 10 additions and 63 deletions
  1. +4
    -35
      linux/alsa/JackAlsaAdapter.cpp
  2. +6
    -28
      solaris/oss/JackOSSAdapter.cpp

+ 4
- 35
linux/alsa/JackAlsaAdapter.cpp View File

@@ -152,46 +152,15 @@ namespace Jack
bool JackAlsaAdapter::Execute()
{
//read data from audio interface
if ( fAudioInterface.read() < 0 )
if (fAudioInterface.read() < 0)
return false;

bool failure = false;

//compute resampling factor
jack_time_t time1, time2;
ResampleFactor ( time1, time2 );

//resample inputs
for ( int i = 0; i < fCaptureChannels; i++ )
{
fCaptureRingBuffer[i]->SetRatio ( time1, time2 );
if ( fCaptureRingBuffer[i]->WriteResample ( fAudioInterface.fInputSoftChannels[i], fAdaptedBufferSize ) < fAdaptedBufferSize )
failure = true;
}
//resample outputs
for ( int i = 0; i < fPlaybackChannels; i++ )
{
fPlaybackRingBuffer[i]->SetRatio ( time2, time1 );
if ( fPlaybackRingBuffer[i]->ReadResample ( fAudioInterface.fOutputSoftChannels[i], fAdaptedBufferSize ) < fAdaptedBufferSize )
failure = true;
}

#ifdef JACK_MONITOR
fTable.Write ( time1, time2, double ( time1 ) / double ( time2 ), double ( time2 ) / double ( time1 ),
fCaptureRingBuffer[0]->ReadSpace(), fPlaybackRingBuffer[0]->WriteSpace() );
#endif
PushAndPull(fAudioInterface.fInputSoftChannels, fAudioInterface.fOutputSoftChannels, fAdaptedBufferSize);

//write data to audio interface
if ( fAudioInterface.write() < 0 )
if (fAudioInterface.write() < 0)
return false;

//reset all ringbuffers in case of failure
if ( failure )
{
jack_error ( "JackAlsaAdapter::Execute ringbuffer failure... reset" );
ResetRingBuffers();
}

return true;
}



+ 6
- 28
solaris/oss/JackOSSAdapter.cpp View File

@@ -506,7 +506,7 @@ error:
int JackOSSAdapter::Close()
{
#ifdef DEBUG
#ifdef JACK_MONITOR
fTable.Save();
#endif

@@ -604,38 +604,16 @@ int JackOSSAdapter::Write()

bool JackOSSAdapter::Execute()
{
//read data from audio interface
if (Read() < 0)
return false;

bool failure = false;
jack_time_t time1, time2;
ResampleFactor(time1, time2);
for (int i = 0; i < fCaptureChannels; i++) {
fCaptureRingBuffer[i]->SetRatio(time1, time2);
if (fCaptureRingBuffer[i]->WriteResample(fInputSampleBuffer[i], fAdaptedBufferSize) < fAdaptedBufferSize)
failure = true;
}
for (int i = 0; i < fPlaybackChannels; i++) {
fPlaybackRingBuffer[i]->SetRatio(time2, time1);
if (fPlaybackRingBuffer[i]->ReadResample(fOutputSampleBuffer[i], fAdaptedBufferSize) < fAdaptedBufferSize)
failure = true;
}

#ifdef DEBUG
fTable.Write(time1, time2, double(time1) / double(time2), double(time2) / double(time1),
fCaptureRingBuffer[0]->ReadSpace(), fPlaybackRingBuffer[0]->WriteSpace());
#endif
PushAndPull(fInputSampleBuffers, fOutputSampleBuffer, fAdaptedBufferSize);
//write data to audio interface
if (Write() < 0)
return false;
// Reset all ringbuffers in case of failure
if (failure) {
jack_error("JackOSSAdapter::Execute ringbuffer failure... reset");
ResetRingBuffers();
}
return true;
}



Loading…
Cancel
Save