Add autoconf stuff to git.
[rtaudio-cdist.git] / RtAudio.h
index 207de8cdf8957e1b02f10b827db2e71dd1b0dc08..dad2dff8c9119620bedf5376db5d7915654e51fd 100644 (file)
--- a/RtAudio.h
+++ b/RtAudio.h
@@ -10,7 +10,7 @@
     RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
 
     RtAudio: realtime audio i/o C++ classes
-    Copyright (c) 2001-2016 Gary P. Scavone
+    Copyright (c) 2001-2017 Gary P. Scavone
 
     Permission is hereby granted, free of charge, to any person
     obtaining a copy of this software and associated documentation files
@@ -45,7 +45,7 @@
 #ifndef __RTAUDIO_H
 #define __RTAUDIO_H
 
-#define RTAUDIO_VERSION "4.1.2"
+#define RTAUDIO_VERSION "5.0.0"
 
 #include <string>
 #include <vector>
@@ -86,6 +86,7 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi
     - \e RTAUDIO_MINIMIZE_LATENCY: Attempt to set stream parameters for lowest possible latency.
     - \e RTAUDIO_HOG_DEVICE:       Attempt grab device for exclusive use.
     - \e RTAUDIO_ALSA_USE_DEFAULT: Use the "default" PCM device (ALSA only).
+    - \e RTAUDIO_JACK_DONT_CONNECT: Do not automatically connect ports (JACK only).
 
     By default, RtAudio streams pass and receive audio data from the
     client in an interleaved format.  By passing the
@@ -117,6 +118,9 @@ static const RtAudioFormat RTAUDIO_FLOAT64 = 0x20; // Normalized between plus/mi
     If the RTAUDIO_ALSA_USE_DEFAULT flag is set, RtAudio will attempt to
     open the "default" PCM device when using the ALSA API. Note that this
     will override any specified input or output device id.
+
+    If the RTAUDIO_JACK_DONT_CONNECT flag is set, RtAudio will not attempt
+    to automatically connect the ports of the client to the audio device.
 */
 typedef unsigned int RtAudioStreamFlags;
 static const RtAudioStreamFlags RTAUDIO_NONINTERLEAVED = 0x1;    // Use non-interleaved buffers (default = interleaved).
@@ -124,6 +128,7 @@ static const RtAudioStreamFlags RTAUDIO_MINIMIZE_LATENCY = 0x2;  // Attempt to s
 static const RtAudioStreamFlags RTAUDIO_HOG_DEVICE = 0x4;        // Attempt grab device and prevent use by others.
 static const RtAudioStreamFlags RTAUDIO_SCHEDULE_REALTIME = 0x8; // Try to select realtime scheduling for callback thread.
 static const RtAudioStreamFlags RTAUDIO_ALSA_USE_DEFAULT = 0x10; // Use the "default" PCM device (ALSA only).
+static const RtAudioStreamFlags RTAUDIO_JACK_DONT_CONNECT = 0x20; // Do not automatically connect ports (JACK only).
 
 /*! \typedef typedef unsigned long RtAudioStreamStatus;
     \brief RtAudio stream status (over- or underflow) flags.
@@ -753,6 +758,9 @@ protected:
     double streamTime;         // Number of elapsed seconds since the stream started.
 
 #if defined(HAVE_GETTIMEOFDAY)
+    // The gettimeofday() when tickStreamTime was last called, or both
+    // fields at 0 if tickStreamTime has not been called since the last
+    // startStream().
     struct timeval lastTickTimestamp;
 #endif
 
@@ -909,6 +917,8 @@ public:
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
                         RtAudio::StreamOptions *options );
+
+  bool shouldAutoconnect_;
 };
 
 #endif
@@ -1061,9 +1071,14 @@ public:
 
 #if defined(__LINUX_PULSE__)
 
+struct pa_context;
+struct pa_sink_info;
+struct pa_threaded_mainloop;
+
 class RtApiPulse: public RtApi
 {
 public:
+  RtApiPulse() : mainloop_(0), channels_(2) {}
   ~RtApiPulse();
   RtAudio::Api getCurrentApi() { return RtAudio::LINUX_PULSE; }
   unsigned int getDeviceCount( void );
@@ -1087,6 +1102,11 @@ public:
                         unsigned int firstChannel, unsigned int sampleRate,
                         RtAudioFormat format, unsigned int *bufferSize,
                         RtAudio::StreamOptions *options );
+
+  static void sinkInfoCallback(pa_context* c, const pa_sink_info* info, int eol, void* arg);
+  static void contextStateCallback(pa_context* c, void* arg);
+  pa_threaded_mainloop* mainloop_;
+  int channels_;
 };
 
 #endif