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