diff options
| author | Gary Scavone <gary@music.mcgill.ca> | 2013-12-27 16:09:21 -0800 |
|---|---|---|
| committer | Gary Scavone <gary@music.mcgill.ca> | 2013-12-27 16:09:21 -0800 |
| commit | a4f8006d958d592cc17ca8b08f5fc2d93ae0e9be (patch) | |
| tree | 702ff2ebd7d1996aee7478d1ed15e8d25f6a0cfd | |
| parent | 952720f173434ffc5ae0614a834fa5cce7c2a005 (diff) | |
Hades and Koegler patches for ALSA and general efficiency.
| -rw-r--r-- | RtAudio.cpp | 14 | ||||
| -rw-r--r-- | RtAudio.h | 8 | ||||
| -rw-r--r-- | doc/release.txt | 3 |
3 files changed, 15 insertions, 10 deletions
diff --git a/RtAudio.cpp b/RtAudio.cpp index baaf24e..1562e85 100644 --- a/RtAudio.cpp +++ b/RtAudio.cpp @@ -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;
}
@@ -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 diff --git a/doc/release.txt b/doc/release.txt index 7cbd9df..839d6ab 100644 --- a/doc/release.txt +++ b/doc/release.txt @@ -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) |
