annotate src/portaudio/bindings/cpp/source/portaudiocpp/CppFunCallbackStream.cxx @ 138:eb184393b244

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