Mercurial > hg > sv-dependency-builds
comparison src/portaudio/bindings/cpp/source/portaudiocpp/CppFunCallbackStream.cxx @ 4:e13257ea84a4
Add bzip2, zlib, liblo, portaudio sources
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 13:59:52 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:6c505a35919a | 4:e13257ea84a4 |
---|---|
1 #include "portaudiocpp/CppFunCallbackStream.hxx" | |
2 | |
3 #include "portaudiocpp/StreamParameters.hxx" | |
4 #include "portaudiocpp/Exception.hxx" | |
5 | |
6 namespace portaudio | |
7 { | |
8 namespace impl | |
9 { | |
10 ////// | |
11 /// Adapts any a C++ callback to a C-callable function (ie this function). A | |
12 /// pointer to a struct with the C++ function pointer and the actual user data should be | |
13 /// passed as the ``userData'' parameter when setting up the callback. | |
14 ////// | |
15 int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, | |
16 const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData) | |
17 { | |
18 FunCallbackStream::CppToCCallbackData *data = static_cast<FunCallbackStream::CppToCCallbackData *>(userData); | |
19 return data->funPtr(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags, data->userData); | |
20 } | |
21 } | |
22 | |
23 // ----------------------------------------------------------------------------------- | |
24 | |
25 FunCallbackStream::CppToCCallbackData::CppToCCallbackData() | |
26 { | |
27 } | |
28 | |
29 FunCallbackStream::CppToCCallbackData::CppToCCallbackData(CallbackFunPtr funPtr, void *userData) : funPtr(funPtr), userData(userData) | |
30 { | |
31 } | |
32 | |
33 void FunCallbackStream::CppToCCallbackData::init(CallbackFunPtr funPtr, void *userData) | |
34 { | |
35 this->funPtr = funPtr; | |
36 this->userData = userData; | |
37 } | |
38 | |
39 // ----------------------------------------------------------------------------------- | |
40 | |
41 FunCallbackStream::FunCallbackStream() | |
42 { | |
43 } | |
44 | |
45 FunCallbackStream::FunCallbackStream(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData) : adapterData_(funPtr, userData) | |
46 { | |
47 open(parameters); | |
48 } | |
49 | |
50 FunCallbackStream::~FunCallbackStream() | |
51 { | |
52 try | |
53 { | |
54 close(); | |
55 } | |
56 catch (...) | |
57 { | |
58 // ignore all errors | |
59 } | |
60 } | |
61 | |
62 void FunCallbackStream::open(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData) | |
63 { | |
64 adapterData_.init(funPtr, userData); | |
65 open(parameters); | |
66 } | |
67 | |
68 void FunCallbackStream::open(const StreamParameters ¶meters) | |
69 { | |
70 PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(), | |
71 parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::cppCallbackToPaCallbackAdapter, | |
72 static_cast<void *>(&adapterData_)); | |
73 | |
74 if (err != paNoError) | |
75 { | |
76 throw PaException(err); | |
77 } | |
78 } | |
79 | |
80 // ----------------------------------------------------------------------------------- | |
81 } |