Updates for SCHED_RR in ALSA API, plus support in configure for powerpc64 (gs).
authorGary Scavone <gary@music.mcgill.ca>
Mon, 10 Dec 2012 19:03:43 +0000 (19:03 +0000)
committerStephen Sinclair <sinclair@music.mcgill.ca>
Thu, 10 Oct 2013 23:38:31 +0000 (01:38 +0200)
RtAudio.cpp
RtAudio.h
config/config.sub

index 8477ef995ad7b9d7a77eb4a13bf16d95da7551cb..68dabff367ccb3c1f8ae1469ca7b96943f580009 100644 (file)
@@ -5881,22 +5881,21 @@ bool RtApiAlsa :: probeDeviceOpen( unsigned int device, StreamMode mode, unsigne
     pthread_attr_t attr;\r
     pthread_attr_init( &attr );\r
     pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );\r
+\r
 #ifdef SCHED_RR // Undefined with some OSes (eg: NetBSD 1.6.x with GNU Pthread)\r
     if ( options && options->flags & RTAUDIO_SCHEDULE_REALTIME ) {\r
-      struct sched_param param;\r
+      // We previously attempted to increase the audio callback priority\r
+      // to SCHED_RR here via the attributes.  However, while no errors\r
+      // were reported in doing so, it did not work.  So, now this is\r
+      // done in the alsaCallbackHandler function.\r
+      stream_.callbackInfo.doRealtime = true;\r
       int priority = options->priority;\r
       int min = sched_get_priority_min( SCHED_RR );\r
       int max = sched_get_priority_max( SCHED_RR );\r
       if ( priority < min ) priority = min;\r
       else if ( priority > max ) priority = max;\r
-      param.sched_priority = priority;\r
-      pthread_attr_setschedpolicy( &attr, SCHED_RR );\r
-      pthread_attr_setschedparam( &attr, &param );\r
+      stream_.callbackInfo.priority = priority;\r
     }\r
-    else\r
-      pthread_attr_setschedpolicy( &attr, SCHED_OTHER );\r
-#else\r
-    pthread_attr_setschedpolicy( &attr, SCHED_OTHER );\r
 #endif\r
 \r
     stream_.callbackInfo.isRunning = true;\r
@@ -6314,6 +6313,14 @@ extern "C" void *alsaCallbackHandler( void *ptr )
   RtApiAlsa *object = (RtApiAlsa *) info->object;\r
   bool *isRunning = &info->isRunning;\r
 \r
+#ifdef SCHED_RR // Undefined with some OSes (eg: NetBSD 1.6.x with GNU Pthread)\r
+  if ( &info->doRealtime ) {\r
+    pthread_t tID = pthread_self();     // ID of this thread\r
+    sched_param prio = { info->priority }; // scheduling priority of thread\r
+    pthread_setschedparam( tID, SCHED_RR, &prio );\r
+  }\r
+#endif\r
+\r
   while ( *isRunning == true ) {\r
     pthread_testcancel();\r
     object->callbackEvent();\r
index f7251245b74828f6bc64d105bfb057c204442d60..4a0b9f330260111d14b83f5ef497c628e1d94298 100644 (file)
--- a/RtAudio.h
+++ b/RtAudio.h
@@ -537,10 +537,12 @@ struct CallbackInfo {
   void *userData;
   void *apiInfo;   // void pointer for API specific callback information
   bool isRunning;
+  bool doRealtime;
+  int priority;
 
   // Default constructor.
   CallbackInfo()
-    :object(0), callback(0), userData(0), apiInfo(0), isRunning(false) {}
+  :object(0), callback(0), userData(0), apiInfo(0), isRunning(false), doRealtime(false) {}
 };
 
 // **************************************************************** //
index 7d3f49f06da815e8a1642338256da047a41ab5d7..9a7d59a69f9a13d88ff71e847b81abc64b6c58bc 100755 (executable)
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
 #   Free Software Foundation, Inc.
 
-timestamp='2004-02-26'
+timestamp='2012-11-19'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -225,7 +225,7 @@ case $basic_machine in
                | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
                | alphaev6[78] \
                | we32k | ns16k | clipper | i370 | sh | sh[34] \
-               | powerpc | powerpcle \
+               | powerpc | powerpc64 | powerpcle \
                | 1750a | dsp16xx | pdp10 | pdp11 \
                | mips16 | mips64 | mipsel | mips64el \
                | mips64orion | mips64orionel | mipstx39 | mipstx39el \
@@ -271,7 +271,7 @@ case $basic_machine in
              | alphaev6[78]-* \
              | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
              | clipper-* | orion-* \
-             | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+             | sparclite-* | pdp10-* | pdp11-* | sh-* | powerpc-* | powerpc64-* | powerpcle-* \
              | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \
              | mips16-* | mips64-* | mipsel-* \
              | mips64el-* | mips64orion-* | mips64orionel-* \
@@ -721,6 +721,10 @@ case $basic_machine in
                ;;
        ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
                ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*)        basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
        ppcle | powerpclittle | ppc-le | powerpc-little)
                basic_machine=powerpcle-unknown
                ;;