Browse Source

Add XRun detection in PortAudio driver.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4332 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 14 years ago
parent
commit
b4a0c1e95a
3 changed files with 31 additions and 6 deletions
  1. +4
    -0
      ChangeLog
  2. +8
    -6
      common/JackNetTool.h
  3. +19
    -0
      windows/portaudio/JackPortAudioDriver.cpp

+ 4
- 0
ChangeLog View File

@@ -34,6 +34,10 @@ Valerio Pilo
Jackdmp changes log
---------------------------

2011-04-20 Stephane Letz <letz@grame.fr>

* Add XRun detection in PortAudio driver.

2011-04-18 Stephane Letz <letz@grame.fr>

* JackWeakAPI.cpp renamed in JackWeakAPI.c.


+ 8
- 6
common/JackNetTool.h View File

@@ -417,21 +417,23 @@ namespace Jack
//network<->buffer
int RenderFromNetwork(char* net_buffer, int cycle, int subcycle, size_t copy_size)
{
for ( int port_index = 0; port_index < fNPorts; port_index++ ) {
for (int port_index = 0; port_index < fNPorts; port_index++) {
float* src = (float*)(net_buffer + port_index * fSubPeriodBytesSize);
float* dst = (float*)(fPortBuffer[port_index] + subcycle * fSubPeriodSize);
for (unsigned int sample = 0; sample < fSubPeriodBytesSize / sizeof(float); sample++) {
dst[sample] = SwapFloat(src[sample]);
}
}

if (subcycle != fLastSubCycle + 1) {
jack_error("Packet(s) missing from... %d %d", fLastSubCycle, subcycle);
}
fLastSubCycle = subcycle;
return copy_size;
}

int RenderToNetwork(char* net_buffer, int subcycle, size_t total_size)
{

for ( int port_index = 0; port_index < fNPorts; port_index++ ) {
for (int port_index = 0; port_index < fNPorts; port_index++) {
float* src = (float*)(fPortBuffer[port_index] + subcycle * fSubPeriodSize);
float* dst = (float*)(net_buffer + port_index * fSubPeriodBytesSize);
for (unsigned int sample = 0; sample < fSubPeriodBytesSize / sizeof(float); sample++) {
@@ -444,12 +446,12 @@ namespace Jack

#else

int RenderFromJackPorts ()
int RenderFromJackPorts()
{
return fNPorts * fSubPeriodBytesSize; // in bytes
}

int RenderToJackPorts ()
int RenderToJackPorts()
{
fLastSubCycle = -1;
return fPeriodSize * sizeof(sample_t); // in bytes; TODO


+ 19
- 0
windows/portaudio/JackPortAudioDriver.cpp View File

@@ -40,6 +40,25 @@ namespace Jack
JackPortAudioDriver* driver = (JackPortAudioDriver*)userData;
driver->fInputBuffer = (jack_default_audio_sample_t**)inputBuffer;
driver->fOutputBuffer = (jack_default_audio_sample_t**)outputBuffer;

if (statusFlags) {
if (statusFlags & paOutputUnderflow)
jack_error("JackPortAudioDriver::Render paOutputUnderflow");
if (statusFlags & paInputUnderflow)
jack_error("JackPortAudioDriver::Render paInputUnderflow");
if (statusFlags & paOutputOverflow)
jack_error("JackPortAudioDriver::Render paOutputOverflow");
if (statusFlags & paInputOverflow)
jack_error("JackPortAudioDriver::Render paInputOverflow");
if (statusFlags & paPrimingOutput)
jack_error("JackPortAudioDriver::Render paOutputUnderflow");

if (statusFlags != paPrimingOutput) {
jack_time_t cur_time = GetMicroSeconds();
driver->NotifyXRun(cur_time, float(cur_time - driver->fBeginDateUst)); // Better this value than nothing...
}
}

// Setup threadded based log function
set_threaded_log_function();
driver->CycleTakeBeginTime();


Loading…
Cancel
Save