this is necessary in order to get Furnace to build using CMake 4.0. you should do: git submodule deinit extern/portaudio
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.7 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);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    // -----------------------------------------------------------------------------------
 | 
						|
}
 |