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
							 |