87 lines
2.5 KiB
C++
87 lines
2.5 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
|