Skip to content

Commit

Permalink
XAPOFX DLL (Wine only for now)
Browse files Browse the repository at this point in the history
  • Loading branch information
flibitijibibo committed Oct 24, 2018
1 parent 70b17bc commit 260dd90
Show file tree
Hide file tree
Showing 6 changed files with 241 additions and 7 deletions.
93 changes: 86 additions & 7 deletions cpp/Makefile.wine
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,14 @@ XAUDIO2_SRC_x28 = \
com_utils.cpp \
xaudio2.cpp \
XAudio2fx.cpp \
X3DAudio.cpp
X3DAudio.cpp \
XAPOFX.cpp

X3DAUDIO_SRC = X3DAudio.cpp
X3DAUDIO_SRC = X3DAudio.cpp

XAPOFX_SRC = \
com_utils_xapofx.cpp \
XAPOFX.cpp

XACT3_SRC = \
com_utils_xact.cpp \
Expand Down Expand Up @@ -105,6 +110,21 @@ X3DAUDIO16_OBJ = $(X3DAUDIO_SRC:%.cpp=$(BUILD_DIR)/%_x16.o)
X3DAUDIO17_TARGET = $(BUILD_DIR)/x3daudio1_7.dll.so
X3DAUDIO17_OBJ = $(X3DAUDIO_SRC:%.cpp=$(BUILD_DIR)/%_x17.o)

XAPOFX11_TARGET = $(BUILD_DIR)/xapofx1_1.dll.so
XAPOFX11_OBJ = $(XAPOFX_SRC:%.cpp=$(BUILD_DIR)/%_fx11.o)

XAPOFX12_TARGET = $(BUILD_DIR)/xapofx1_2.dll.so
XAPOFX12_OBJ = $(XAPOFX_SRC:%.cpp=$(BUILD_DIR)/%_fx12.o)

XAPOFX13_TARGET = $(BUILD_DIR)/xapofx1_3.dll.so
XAPOFX13_OBJ = $(XAPOFX_SRC:%.cpp=$(BUILD_DIR)/%_fx13.o)

XAPOFX14_TARGET = $(BUILD_DIR)/xapofx1_4.dll.so
XAPOFX14_OBJ = $(XAPOFX_SRC:%.cpp=$(BUILD_DIR)/%_fx14.o)

XAPOFX15_TARGET = $(BUILD_DIR)/xapofx1_5.dll.so
XAPOFX15_OBJ = $(XAPOFX_SRC:%.cpp=$(BUILD_DIR)/%_fx15.o)

XACT30_TARGET = $(BUILD_DIR)/xactengine3_0.dll.so
XACT30_OBJ = $(XACT3_SRC:%.cpp=$(BUILD_DIR)/%_x30.o)

Expand Down Expand Up @@ -179,6 +199,21 @@ $(BUILD_DIR)/%_x16.o:%.cpp
$(BUILD_DIR)/%_x17.o:%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%_fx11.o:%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%_fx12.o:%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%_fx13.o:%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%_fx14.o:%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%_fx15.o:%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<

$(BUILD_DIR)/%_x30.o:%.cpp
$(CXX) $(CXXFLAGS) -DXACT3_VERSION=0 -c -o $@ $<

Expand Down Expand Up @@ -208,6 +243,8 @@ all: $(XAUDIO20_TARGET) $(XAUDIO21_TARGET) $(XAUDIO22_TARGET) $(XAUDIO23_TARGET)
$(XAUDIO28_TARGET) $(XAUDIO29_TARGET) \
$(X3DAUDIO13_TARGET) $(X3DAUDIO14_TARGET) $(X3DAUDIO15_TARGET) \
$(X3DAUDIO16_TARGET) $(X3DAUDIO17_TARGET) $(XAPO_TARGET) \
$(XAPOFX11_TARGET) $(XAPOFX12_TARGET) $(XAPOFX13_TARGET) \
$(XAPOFX14_TARGET) $(XAPOFX15_TARGET) \
$(XACT30_TARGET) $(XACT31_TARGET) $(XACT32_TARGET) $(XACT33_TARGET) \
$(XACT34_TARGET) $(XACT35_TARGET) $(XACT36_TARGET) $(XACT37_TARGET)

Expand Down Expand Up @@ -298,42 +335,82 @@ $(X3DAUDIO13_TARGET) : directories $(X3DAUDIO13_OBJ)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/x3daudio1_3_def.o -E x3daudio.def $(X3DAUDIO13_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def
$(CXX) $(LDFLAGS) -shared -o $@ $(X3DAUDIO13_OBJ) $(BUILD_DIR)/x3daudio1_3_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
-lwine -lm -lc -lFAudio
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E x3daudio.def $(X3DAUDIO13_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def

$(X3DAUDIO14_TARGET) : directories $(X3DAUDIO14_OBJ)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/x3daudio1_4_def.o -E x3daudio.def $(X3DAUDIO14_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def
$(CXX) $(LDFLAGS) -shared -o $@ $(X3DAUDIO14_OBJ) $(BUILD_DIR)/x3daudio1_4_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
-lwine -lm -lc -lFAudio
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E x3daudio.def $(X3DAUDIO14_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def

$(X3DAUDIO15_TARGET) : directories $(X3DAUDIO15_OBJ)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/x3daudio1_5_def.o -E x3daudio.def $(X3DAUDIO15_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def
$(CXX) $(LDFLAGS) -shared -o $@ $(X3DAUDIO15_OBJ) $(BUILD_DIR)/x3daudio1_5_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
-lwine -lm -lc -lFAudio
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E x3daudio.def $(X3DAUDIO15_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def

$(X3DAUDIO16_TARGET) : directories $(X3DAUDIO16_OBJ)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/x3daudio1_6_def.o -E x3daudio.def $(X3DAUDIO16_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def
$(CXX) $(LDFLAGS) -shared -o $@ $(X3DAUDIO16_OBJ) $(BUILD_DIR)/x3daudio1_6_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
-lwine -lm -lc -lFAudio
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E x3daudio.def $(X3DAUDIO16_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def

$(X3DAUDIO17_TARGET) : directories $(X3DAUDIO17_OBJ)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/x3daudio1_7_def.o -E x3daudio.def $(X3DAUDIO17_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def
$(CXX) $(LDFLAGS) -shared -o $@ $(X3DAUDIO17_OBJ) $(BUILD_DIR)/x3daudio1_7_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
-lwine -lm -lc -lFAudio
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E x3daudio.def $(X3DAUDIO17_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def

$(XAPOFX11_TARGET) : directories $(XAPOFX11_OBJ) $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/xapofx1_1_def.o -E xapofx.def $(XAPOFX11_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def
$(CXX) $(LDFLAGS) -shared -o $@ $(XAPOFX11_OBJ) $(BUILD_DIR)/xapofx1_1_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E xapofx.def $(XAPOFX11_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def

$(XAPOFX12_TARGET) : directories $(XAPOFX12_OBJ) $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/xapofx1_2_def.o -E xapofx.def $(XAPOFX12_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def
$(CXX) $(LDFLAGS) -shared -o $@ $(XAPOFX12_OBJ) $(BUILD_DIR)/xapofx1_2_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E xapofx.def $(XAPOFX12_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def

$(XAPOFX13_TARGET) : directories $(XAPOFX13_OBJ) $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/xapofx1_3_def.o -E xapofx.def $(XAPOFX13_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def
$(CXX) $(LDFLAGS) -shared -o $@ $(XAPOFX13_OBJ) $(BUILD_DIR)/xapofx1_3_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E xapofx.def $(XAPOFX13_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def

$(XAPOFX14_TARGET) : directories $(XAPOFX14_OBJ) $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/xapofx1_4_def.o -E xapofx.def $(XAPOFX14_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def
$(CXX) $(LDFLAGS) -shared -o $@ $(XAPOFX14_OBJ) $(BUILD_DIR)/xapofx1_4_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E xapofx.def $(XAPOFX14_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def

$(XAPOFX15_TARGET) : directories $(XAPOFX15_OBJ) $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/xapofx1_5_def.o -E xapofx.def $(XAPOFX15_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def
$(CXX) $(LDFLAGS) -shared -o $@ $(XAPOFX15_OBJ) $(BUILD_DIR)/xapofx1_5_def.o $(WINELIBDIR)/wine/libwinecrt0.a \
-lwine -lm -lc -lFAudio $(XAPO_TARGET)
$(WINEBUILD) $(WBFLAGS) --dll --fake-module -o $@.fake -E xapofx.def $(XAPOFX15_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def

$(XACT30_TARGET) : directories $(XACT30_OBJ)
$(WINEBUILD) $(WBFLAGS) --dll -o $(BUILD_DIR)/xact_def.o -E xact3_7.def $(XACT30_OBJ) \
-L$(WINELIBDIR)/wine $(WINELIBDIR)/wine/libwinecrt0.a $(WINELIBDIR)/wine/libkernel32.def $(WINELIBDIR)/wine/libntdll.def $(WINELIBDIR)/wine/libole32.def
Expand Down Expand Up @@ -410,6 +487,8 @@ clean:
$(XAUDIO28_TARGET) $(XAUDIO29_TARGET) \
$(X3DAUDIO13_TARGET) $(X3DAUDIO14_TARGET) $(X3DAUDIO15_TARGET) \
$(X3DAUDIO16_TARGET) $(X3DAUDIO17_TARGET) $(XAPO_TARGET) \
$(XAPOFX11_TARGET) $(XAPOFX12_TARGET) $(XAPOFX13_TARGET) \
$(XAPOFX14_TARGET) $(XAPOFX15_TARGET) \
$(XACT30_TARGET) $(XACT31_TARGET) $(XACT32_TARGET) $(XACT33_TARGET) \
$(XACT34_TARGET) $(XACT35_TARGET) $(XACT36_TARGET) $(XACT37_TARGET) \
$(BUILD_DIR)/*.o $(BUILD_DIR)/*.fake
Expand Down
90 changes: 90 additions & 0 deletions cpp/XAPOFX.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#include "xaudio2.h"
#include "XAPOBase.h"
#include "XAPOFX.h"

class XAPOFXWrapper : public CXAPOParametersBase
{
public:
XAPOFXWrapper(void *object) :
fapo_object(object),
CXAPOParametersBase(reinterpret_cast<FAPOBase*>(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*>(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<IUnknown*>(CreateFXInternal(
clsid,
pInitData,
InitDataByteSize
));
return S_OK;
}
#else
FAPOFXCPP_API CreateFX(REFCLSID clsid, IUnknown **pEffect)
{
*pEffect = reinterpret_cast<IUnknown*>(CreateFXInternal(
clsid,
NULL,
0
));
return S_OK;
}
#endif // XAUDIO2_VERSION >=8
48 changes: 48 additions & 0 deletions cpp/XAPOFX.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#ifndef FAUDIO_CPP_XAPOFX_H
#define FAUDIO_CPP_XAPOFX_H

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#if defined _WIN32 || defined __CYGWIN__
#define DLLIMPORT __declspec(dllimport)
#define DLLEXPORT __declspec(dllexport)
#else
#if __GNUC__ >= 4
#define DLLIMPORT __attribute__((visibility ("default")))
#define DLLEXPORT __attribute__((visibility ("default")))
#else
#define DLLIMPORT
#define DLLEXPORT
#endif
#endif

#ifdef FAUDIOCPP_EXPORTS
#define FAPOFXCPP_API extern "C" DLLEXPORT HRESULT __cdecl
#else
#define FAPOFXCPP_API extern "C" DLLIMPORT HRESULT __cdecl
#endif

#ifndef XAPOFX_VERSION
#define XAPOFX_VERSION 5
#endif

#include <FAPOFX.h>

#if XAUDIO2_VERSION >=8
FAPOFXCPP_API CreateFX(
REFCLSID clsid,
IUnknown **pEffect,
const void *pInitData,
UINT32 InitDataByteSize
);
#else
FAPOFXCPP_API CreateFX(REFCLSID clsid, IUnknown **pEffect);
#endif // XAUDIO2_VERSION >=8

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* FAUDIO_CPP_XAPOFX_H */
14 changes: 14 additions & 0 deletions cpp/com_utils_xapofx.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include "com_utils.h"
#include <string.h> /* memcmp */

/* GUIDs */
const IID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 00, 00, 00, 00, 00, 00, 0x46}};

const IID IID_IXAudio2 = {0x8bcf1f58, 0x9fe7, 0x4583, {0x8a, 0xc6, 0xe2, 0xad, 0xc4, 0x65, 0xc8, 0xbb}};
const IID IID_IXAPO = {0xA90BC001, 0xE897, 0xE897, {0x55, 0xE4, 0x9E, 0x47, 0x00, 0x00, 0x00, 0x00}};
const IID IID_IXAPOParameters = {0xA90BC001, 0xE897, 0xE897, {0x55, 0xE4, 0x9E, 0x47, 0x00, 0x00, 0x00, 0x01}};

bool guid_equals(REFIID a, REFIID b)
{
return memcmp(&a, &b, sizeof(IID)) == 0;
}
2 changes: 2 additions & 0 deletions cpp/xapofx.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
EXPORTS
CreateFX @1
1 change: 1 addition & 0 deletions cpp/xaudio2_9.def
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ EXPORTS
CreateAudioVolumeMeter @3
X3DAudioCalculate @5
X3DAudioInitialize @6
CreateFX @7

0 comments on commit 260dd90

Please sign in to comment.