#include "FAPOFX.h"
#include "FAudio_internal.h"
const FAudioGUID FAPOFX_CLSID_FXEQ =
{
0xF5E01117,
0xD6C4,
0x485A,
{
0xA3,
0xF5,
0x69,
0x51,
0x96,
0xF3,
0xDB,
0xFA
}
};
static FAPORegistrationProperties FXEQProperties =
{
{0},
{
'F', 'X', 'E', 'Q', '\0'
},
{
'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', ' ', '(', 'c', ')',
'E', 't', 'h', 'a', 'n', ' ', 'L', 'e', 'e', '\0'
},
0,
0,
(
FAPO_FLAG_FRAMERATE_MUST_MATCH |
FAPO_FLAG_BITSPERSAMPLE_MUST_MATCH |
FAPO_FLAG_BUFFERCOUNT_MUST_MATCH |
FAPO_FLAG_INPLACE_SUPPORTED |
FAPO_FLAG_INPLACE_REQUIRED
),
1,
1,
1,
1
};
const FAudioGUID FAPOFX_CLSID_FXEQ_LEGACY =
{
0xA90BC001,
0xE897,
0xE897,
{
0x74,
0x39,
0x43,
0x55,
0x00,
0x00,
0x00,
0x00
}
};
static FAPORegistrationProperties FXEQProperties_LEGACY =
{
{0},
{
'F', 'X', 'E', 'Q', '\0'
},
{
'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', ' ', '(', 'c', ')',
'E', 't', 'h', 'a', 'n', ' ', 'L', 'e', 'e', '\0'
},
0,
0,
(
FAPO_FLAG_FRAMERATE_MUST_MATCH |
FAPO_FLAG_BITSPERSAMPLE_MUST_MATCH |
FAPO_FLAG_BUFFERCOUNT_MUST_MATCH |
FAPO_FLAG_INPLACE_SUPPORTED |
FAPO_FLAG_INPLACE_REQUIRED
),
1,
1,
1,
1
};
typedef struct FAPOFXEQ
{
FAPOBase base;
} FAPOFXEQ;
uint32_t FAPOFXEQ_Initialize(
FAPOFXEQ *fapo,
const void* pData,
uint32_t DataByteSize
) {
#define INITPARAMS(offset) \
FAudio_memcpy( \
fapo->base.m_pParameterBlocks + DataByteSize * offset, \
pData, \
DataByteSize \
);
INITPARAMS(0)
INITPARAMS(1)
INITPARAMS(2)
#undef INITPARAMS
return 0;
}
void FAPOFXEQ_Process(
FAPOFXEQ *fapo,
uint32_t InputProcessParameterCount,
const FAPOProcessBufferParameters* pInputProcessParameters,
uint32_t OutputProcessParameterCount,
FAPOProcessBufferParameters* pOutputProcessParameters,
int32_t IsEnabled
) {
FAPOBase_BeginProcess(&fapo->base);
FAPOBase_EndProcess(&fapo->base);
}
void FAPOFXEQ_Free(void* fapo)
{
FAPOFXEQ *eq = (FAPOFXEQ*) fapo;
eq->base.pFree(eq->base.m_pParameterBlocks);
eq->base.pFree(fapo);
}
uint32_t FAPOFXCreateEQ(
FAPO **pEffect,
const void *pInitData,
uint32_t InitDataByteSize,
FAudioMallocFunc customMalloc,
FAudioFreeFunc customFree,
FAudioReallocFunc customRealloc,
uint8_t legacy
) {
const FAPOFXEQParameters fxdefault =
{
FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_0,
FAPOFXEQ_DEFAULT_GAIN,
FAPOFXEQ_DEFAULT_BANDWIDTH,
FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_1,
FAPOFXEQ_DEFAULT_GAIN,
FAPOFXEQ_DEFAULT_BANDWIDTH,
FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_2,
FAPOFXEQ_DEFAULT_GAIN,
FAPOFXEQ_DEFAULT_BANDWIDTH,
FAPOFXEQ_DEFAULT_FREQUENCY_CENTER_3,
FAPOFXEQ_DEFAULT_GAIN,
FAPOFXEQ_DEFAULT_BANDWIDTH
};
FAPOFXEQ *result = (FAPOFXEQ*) customMalloc(
sizeof(FAPOFXEQ)
);
uint8_t *params = (uint8_t*) customMalloc(
sizeof(FAPOFXEQParameters) * 3
);
if (pInitData == NULL)
{
FAudio_zero(params, sizeof(FAPOFXEQParameters) * 3);
#define INITPARAMS(offset) \
FAudio_memcpy( \
params + sizeof(FAPOFXEQParameters) * offset, \
&fxdefault, \
sizeof(FAPOFXEQParameters) \
);
INITPARAMS(0)
INITPARAMS(1)
INITPARAMS(2)
#undef INITPARAMS
}
else
{
FAudio_assert(InitDataByteSize == sizeof(FAPOFXEQParameters));
FAudio_memcpy(params, pInitData, InitDataByteSize);
FAudio_memcpy(params + InitDataByteSize, pInitData, InitDataByteSize);
FAudio_memcpy(params + (InitDataByteSize * 2), pInitData, InitDataByteSize);
}
FAudio_memcpy(
&FXEQProperties_LEGACY.clsid,
&FAPOFX_CLSID_FXEQ_LEGACY,
sizeof(FAudioGUID)
);
FAudio_memcpy(
&FXEQProperties.clsid,
&FAPOFX_CLSID_FXEQ,
sizeof(FAudioGUID)
);
CreateFAPOBaseWithCustomAllocatorEXT(
&result->base,
legacy ? &FXEQProperties_LEGACY : &FXEQProperties,
params,
sizeof(FAPOFXEQParameters),
0,
customMalloc,
customFree,
customRealloc
);
result->base.base.Initialize = (InitializeFunc)
FAPOFXEQ_Initialize;
result->base.base.Process = (ProcessFunc)
FAPOFXEQ_Process;
result->base.Destructor = FAPOFXEQ_Free;
*pEffect = &result->base.base;
return 0;
}