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