Browse Source

Hades and Koegler patches for ALSA and general efficiency.

tags/4.1.0
Gary Scavone 12 years ago
parent
commit
a4f8006d95
3 changed files with 15 additions and 10 deletions
  1. +8
    -6
      RtAudio.cpp
  2. +4
    -4
      RtAudio.h
  3. +3
    -0
      doc/release.txt

+ 8
- 6
RtAudio.cpp View File

@@ -213,6 +213,7 @@ RtApi :: RtApi()
stream_.userBuffer[1] = 0;
MUTEX_INITIALIZE( &stream_.mutex );
showWarnings_ = true;
firstErrorOccurred = false;
}
RtApi :: ~RtApi()
@@ -6089,6 +6090,7 @@ void RtApiAlsa :: startStream()
}
if ( ( stream_.mode == INPUT || stream_.mode == DUPLEX ) && !apiInfo->synchronized ) {
result = snd_pcm_drop(handle[1]); // fix to remove stale data received since device has been open
state = snd_pcm_state( handle[1] );
if ( state != SND_PCM_STATE_PREPARED ) {
result = snd_pcm_prepare( handle[1] );
@@ -6103,7 +6105,7 @@ void RtApiAlsa :: startStream()
stream_.state = STREAM_RUNNING;
unlock:
apiInfo->runnable = true;
apiInfo->runnable = false; // fixes high CPU usage when stopped
pthread_cond_signal( &apiInfo->runnable_cv );
MUTEX_UNLOCK( &stream_.mutex );
@@ -6148,6 +6150,7 @@ void RtApiAlsa :: stopStream()
}
unlock:
apiInfo->runnable = false; // fixes high CPU usage when stopped
MUTEX_UNLOCK( &stream_.mutex );
if ( result >= 0 ) return;
@@ -6891,7 +6894,7 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include "soundcard.h"
#include <sys/soundcard.h>
#include <errno.h>
#include <math.h>
@@ -7837,12 +7840,11 @@ void RtApi :: error( RtAudioError::Type type )
RtAudioErrorCallback errorCallback = (RtAudioErrorCallback) stream_.callbackInfo.errorCallback;
if ( errorCallback ) {
// abortStream() can generate new error messages. Ignore them. Just keep original one.
static bool firstErrorOccured = false;
if ( firstErrorOccured )
if ( firstErrorOccurred )
return;
firstErrorOccured = true;
firstErrorOccurred = true;
const std::string errorMessage = errorText_;
if ( type != RtAudioError::WARNING && stream_.state != STREAM_STOPPED) {
@@ -7851,7 +7853,7 @@ void RtApi :: error( RtAudioError::Type type )
}
errorCallback( type, errorMessage );
firstErrorOccured = false;
firstErrorOccurred = false;
return;
}


+ 4
- 4
RtAudio.h View File

@@ -50,8 +50,7 @@
#include <exception>
#include <iostream>

// RtAudio version
static const std::string RTAUDIO_VERSION( "4.1.0pre" );
// RtAudio version: 4.1.0pre

/*! \typedef typedef unsigned long RtAudioFormat;
\brief RtAudio data format type.
@@ -375,7 +374,7 @@ class RtAudio
};

//! A static function to determine the current RtAudio version.
static std::string getVersion( void ) { return RTAUDIO_VERSION; }
static std::string getVersion( void ) { return "4.1.0"; }

//! A static function to determine the available compiled audio APIs.
/*!
@@ -572,7 +571,7 @@ class RtAudio
#include <windows.h>
#include <process.h>

typedef unsigned long ThreadHandle;
typedef ULONG_PTR ThreadHandle;
typedef CRITICAL_SECTION StreamMutex;

#elif defined(__LINUX_ALSA__) || defined(__LINUX_PULSE__) || defined(__UNIX_JACK__) || defined(__LINUX_OSS__) || defined(__MACOSX_CORE__)
@@ -762,6 +761,7 @@ protected:
std::string errorText_;
bool showWarnings_;
RtApiStream stream_;
bool firstErrorOccurred;

/*!
Protected, api-specific method that attempts to open a device


+ 3
- 0
doc/release.txt View File

@@ -4,6 +4,9 @@ By Gary P. Scavone, 2001-2014.

v4.1.0: (?? 2014)
- RtError class renamed RtAudioError and embedded in RtAudio.h (RtError.h deleted)
- pulse audio update to support bufferFrames argument with audio input (thanks to Jonatan Wallmander)
- fixes for ALSA API to avoid high CPU usage during stops and to clear stale data before input (thanks to Pluto Hades)
- miscellaneous efficiency updates suggested by Martin Koegler

v4.0.12: (16 April 2013)
- new functionality to allow error reporting via a client-supplied function (thanks to Pavel Mogilevskiy)


Loading…
Cancel
Save