87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|   | #ifndef INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
 | ||
|  | #define INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
 | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | #include "portaudio.h"
 | ||
|  | 
 | ||
|  | #include "portaudiocpp/CallbackStream.hxx"
 | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | // Forward declaration(s):
 | ||
|  | namespace portaudio | ||
|  | { | ||
|  |     class StreamParameters; | ||
|  | } | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | // Declaration(s):
 | ||
|  | namespace portaudio | ||
|  | { | ||
|  | 
 | ||
|  | 
 | ||
|  |     namespace impl | ||
|  |     { | ||
|  |         extern "C" | ||
|  |         { | ||
|  |             int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, | ||
|  |                 const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, | ||
|  |                 void *userData); | ||
|  |         } // extern "C"
 | ||
|  |     } | ||
|  | 
 | ||
|  |     // -----------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |     //////
 | ||
|  |     /// @brief Callback stream using a C++ function (either a free function or a static function)
 | ||
|  |     /// callback.
 | ||
|  |     //////
 | ||
|  |     class FunCallbackStream : public CallbackStream | ||
|  |     { | ||
|  |     public: | ||
|  |         typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, | ||
|  |             const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, | ||
|  |             void *userData); | ||
|  | 
 | ||
|  |         // -------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |         //////
 | ||
|  |         /// @brief Simple structure containing a function pointer to the C++ callback function and a
 | ||
|  |         /// (void) pointer to the user supplied data.
 | ||
|  |         //////
 | ||
|  |         struct CppToCCallbackData | ||
|  |         { | ||
|  |             CppToCCallbackData(); | ||
|  |             CppToCCallbackData(CallbackFunPtr funPtr, void *userData); | ||
|  |             void init(CallbackFunPtr funPtr, void *userData); | ||
|  | 
 | ||
|  |             CallbackFunPtr funPtr; | ||
|  |             void *userData; | ||
|  |         }; | ||
|  | 
 | ||
|  |         // -------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  |         FunCallbackStream(); | ||
|  |         FunCallbackStream(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData); | ||
|  |         ~FunCallbackStream(); | ||
|  | 
 | ||
|  |         void open(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData); | ||
|  | 
 | ||
|  |     private: | ||
|  |         FunCallbackStream(const FunCallbackStream &); // non-copyable
 | ||
|  |         FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
 | ||
|  | 
 | ||
|  |         CppToCCallbackData adapterData_; | ||
|  | 
 | ||
|  |         void open(const StreamParameters ¶meters); | ||
|  |     }; | ||
|  | 
 | ||
|  | 
 | ||
|  | } // portaudio
 | ||
|  | 
 | ||
|  | // ---------------------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | #endif // INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
 |