gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

CppFunCallbackStream.hxx (2515B)


      1 #ifndef INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
      2 #define INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
      3 
      4 // ---------------------------------------------------------------------------------------
      5 
      6 #include "portaudio.h"
      7 
      8 #include "portaudiocpp/CallbackStream.hxx"
      9 
     10 // ---------------------------------------------------------------------------------------
     11 
     12 // Forward declaration(s):
     13 namespace portaudio
     14 {
     15 	class StreamParameters;
     16 }
     17 
     18 // ---------------------------------------------------------------------------------------
     19 
     20 // Declaration(s):
     21 namespace portaudio
     22 {
     23 
     24 
     25 	namespace impl
     26 	{
     27 		extern "C"
     28 		{
     29 			int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, 
     30 				const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, 
     31 				void *userData);
     32 		} // extern "C"
     33 	}
     34 
     35 	// -----------------------------------------------------------------------------------
     36 
     37 	//////
     38 	/// @brief Callback stream using a C++ function (either a free function or a static function) 
     39 	/// callback.
     40 	//////
     41 	class FunCallbackStream : public CallbackStream
     42 	{
     43 	public:
     44 		typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, 
     45 			const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, 
     46 			void *userData);
     47 
     48 		// -------------------------------------------------------------------------------
     49 
     50 		//////
     51 		/// @brief Simple structure containing a function pointer to the C++ callback function and a 
     52 		/// (void) pointer to the user supplied data.
     53 		//////
     54 		struct CppToCCallbackData
     55 		{
     56 			CppToCCallbackData();
     57 			CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
     58 			void init(CallbackFunPtr funPtr, void *userData);
     59 
     60 			CallbackFunPtr funPtr;
     61 			void *userData;
     62 		};
     63 
     64 		// -------------------------------------------------------------------------------
     65 
     66 		FunCallbackStream();
     67 		FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
     68 		~FunCallbackStream();
     69 
     70 		void open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
     71 
     72 	private:
     73 		FunCallbackStream(const FunCallbackStream &); // non-copyable
     74 		FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
     75 
     76 		CppToCCallbackData adapterData_;
     77 
     78 		void open(const StreamParameters &parameters);
     79 	};
     80 
     81 
     82 } // portaudio
     83 
     84 // ---------------------------------------------------------------------------------------
     85 
     86 #endif // INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX