#include "xaudio2.h" #include "XAPOBase.h" #include "XAPOFX.h" class XAPOFXWrapper : public CXAPOParametersBase { public: XAPOFXWrapper(void *object) : fapo_object(object), CXAPOParametersBase(reinterpret_cast(object)) { } COM_METHOD(void) Process( UINT32 InputProcessParameterCount, const XAPO_PROCESS_BUFFER_PARAMETERS *pInputProcessParameters, UINT32 OutputProcessParameterCount, XAPO_PROCESS_BUFFER_PARAMETERS *pOutputProcessParameters, BOOL IsEnabled ) { reinterpret_cast(fapo_object)->Process( fapo_object, InputProcessParameterCount, pInputProcessParameters, OutputProcessParameterCount, pOutputProcessParameters, IsEnabled ); } private: void *fapo_object; }; void* CDECL XAPOFX_INTERNAL_Malloc(size_t size) { return CoTaskMemAlloc(size); } void CDECL XAPOFX_INTERNAL_Free(void* ptr) { CoTaskMemFree(ptr); } void* CDECL XAPOFX_INTERNAL_Realloc(void* ptr, size_t size) { return CoTaskMemRealloc(ptr, size); } void* CreateFXInternal( REFCLSID clsid, const void *pInitData, uint32_t InitDataByteSize ) { FAPO *fapo_object = NULL; FAPOFX_CreateFXWithCustomAllocatorEXT( &clsid, &fapo_object, pInitData, InitDataByteSize, XAPOFX_INTERNAL_Malloc, XAPOFX_INTERNAL_Free, XAPOFX_INTERNAL_Realloc ); return new XAPOFXWrapper(fapo_object); } #if XAUDIO2_VERSION >=8 FAPOFXCPP_API CreateFX( REFCLSID clsid, IUnknown **pEffect, const void *pInitData, UINT32 InitDataByteSize ) { *pEffect = reinterpret_cast(CreateFXInternal( clsid, pInitData, InitDataByteSize )); return S_OK; } #else FAPOFXCPP_API CreateFX(REFCLSID clsid, IUnknown **pEffect) { *pEffect = reinterpret_cast(CreateFXInternal( clsid, NULL, 0 )); return S_OK; } #endif // XAUDIO2_VERSION >=8