mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-06 14:52:34 +02:00
Ensures that all files that Git considers to be text will have normalized (LF) line endings in the repository. When core.eol is set to native (which is the default), Git will convert the line endings of normalized files in your working directory back to your platform's native line ending. See also https://git-scm.com/docs/gitattributes
82 lines
2.4 KiB
C++
82 lines
2.4 KiB
C++
#include "portaudiocpp/CppFunCallbackStream.hxx"
|
|
|
|
#include "portaudiocpp/StreamParameters.hxx"
|
|
#include "portaudiocpp/Exception.hxx"
|
|
|
|
namespace portaudio
|
|
{
|
|
namespace impl
|
|
{
|
|
//////
|
|
/// Adapts any a C++ callback to a C-callable function (ie this function). A
|
|
/// pointer to a struct with the C++ function pointer and the actual user data should be
|
|
/// passed as the ``userData'' parameter when setting up the callback.
|
|
//////
|
|
int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
|
|
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
|
|
{
|
|
FunCallbackStream::CppToCCallbackData *data = static_cast<FunCallbackStream::CppToCCallbackData *>(userData);
|
|
return data->funPtr(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags, data->userData);
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------
|
|
|
|
FunCallbackStream::CppToCCallbackData::CppToCCallbackData()
|
|
{
|
|
}
|
|
|
|
FunCallbackStream::CppToCCallbackData::CppToCCallbackData(CallbackFunPtr funPtr, void *userData) : funPtr(funPtr), userData(userData)
|
|
{
|
|
}
|
|
|
|
void FunCallbackStream::CppToCCallbackData::init(CallbackFunPtr funPtr, void *userData)
|
|
{
|
|
this->funPtr = funPtr;
|
|
this->userData = userData;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------
|
|
|
|
FunCallbackStream::FunCallbackStream()
|
|
{
|
|
}
|
|
|
|
FunCallbackStream::FunCallbackStream(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData) : adapterData_(funPtr, userData)
|
|
{
|
|
open(parameters);
|
|
}
|
|
|
|
FunCallbackStream::~FunCallbackStream()
|
|
{
|
|
try
|
|
{
|
|
close();
|
|
}
|
|
catch (...)
|
|
{
|
|
// ignore all errors
|
|
}
|
|
}
|
|
|
|
void FunCallbackStream::open(const StreamParameters ¶meters, CallbackFunPtr funPtr, void *userData)
|
|
{
|
|
adapterData_.init(funPtr, userData);
|
|
open(parameters);
|
|
}
|
|
|
|
void FunCallbackStream::open(const StreamParameters ¶meters)
|
|
{
|
|
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
|
|
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::cppCallbackToPaCallbackAdapter,
|
|
static_cast<void *>(&adapterData_));
|
|
|
|
if (err != paNoError)
|
|
{
|
|
throw PaException(err);
|
|
}
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------
|
|
}
|