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