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