view src/portaudio_20140130/bindings/cpp/include/portaudiocpp/CppFunCallbackStream.hxx @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 7ddb4fc30dac
children
line wrap: on
line source
#ifndef INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX
#define INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX

// ---------------------------------------------------------------------------------------

#include "portaudio.h"

#include "portaudiocpp/CallbackStream.hxx"

// ---------------------------------------------------------------------------------------

// Forward declaration(s):
namespace portaudio
{
	class StreamParameters;
}

// ---------------------------------------------------------------------------------------

// Declaration(s):
namespace portaudio
{


	namespace impl
	{
		extern "C"
		{
			int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, 
				const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, 
				void *userData);
		} // extern "C"
	}

	// -----------------------------------------------------------------------------------

	//////
	/// @brief Callback stream using a C++ function (either a free function or a static function) 
	/// callback.
	//////
	class FunCallbackStream : public CallbackStream
	{
	public:
		typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames, 
			const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, 
			void *userData);

		// -------------------------------------------------------------------------------

		//////
		/// @brief Simple structure containing a function pointer to the C++ callback function and a 
		/// (void) pointer to the user supplied data.
		//////
		struct CppToCCallbackData
		{
			CppToCCallbackData();
			CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
			void init(CallbackFunPtr funPtr, void *userData);

			CallbackFunPtr funPtr;
			void *userData;
		};

		// -------------------------------------------------------------------------------

		FunCallbackStream();
		FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
		~FunCallbackStream();

		void open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);

	private:
		FunCallbackStream(const FunCallbackStream &); // non-copyable
		FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable

		CppToCCallbackData adapterData_;

		void open(const StreamParameters &parameters);
	};


} // portaudio

// ---------------------------------------------------------------------------------------

#endif // INCLUDED_PORTAUDIO_CPPFUNCALLBACKSTREAM_HXX