123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- /* FAudio - XAudio Reimplementation for FNA
- *
- * Copyright (c) 2011-2021 Ethan Lee, Luigi Auriemma, and the MonoGame Team
- *
- * This software is provided 'as-is', without any express or implied warranty.
- * In no event will the authors be held liable for any damages arising from
- * the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software in a
- * product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- *
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- *
- * 3. This notice may not be removed or altered from any source distribution.
- *
- * Ethan "flibitijibibo" Lee <flibitijibibo@flibitijibibo.com>
- *
- */
- /* This file has no documentation since the MSDN docs are still perfectly fine:
- * https://docs.microsoft.com/en-us/windows/desktop/api/xapo/
- *
- * Of course, the APIs aren't exactly the same since XAPO is super dependent on
- * C++. Instead, we use a struct full of functions to mimic a vtable.
- *
- * The only serious difference is that our FAPO (yes, really) always has the
- * Get/SetParameters function pointers, for simplicity. You can ignore these if
- * your effect does not have parameters, as they will never get called unless
- * it is explicitly requested by the application.
- */
- #ifndef FAPO_H
- #define FAPO_H
- #include "FAudio.h"
- #define FAPOAPI FAUDIOAPI
- #define FAPOCALL FAUDIOCALL
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
- /* Enumerations */
- typedef enum FAPOBufferFlags
- {
- FAPO_BUFFER_SILENT,
- FAPO_BUFFER_VALID
- } FAPOBufferFlags;
- /* Structures */
- #pragma pack(push, 1)
- typedef struct FAPORegistrationProperties
- {
- FAudioGUID clsid;
- int16_t FriendlyName[256]; /* Win32 wchar_t */
- int16_t CopyrightInfo[256]; /* Win32 wchar_t */
- uint32_t MajorVersion;
- uint32_t MinorVersion;
- uint32_t Flags;
- uint32_t MinInputBufferCount;
- uint32_t MaxInputBufferCount;
- uint32_t MinOutputBufferCount;
- uint32_t MaxOutputBufferCount;
- } FAPORegistrationProperties;
- typedef struct FAPOLockForProcessBufferParameters
- {
- const FAudioWaveFormatEx *pFormat;
- uint32_t MaxFrameCount;
- } FAPOLockForProcessBufferParameters;
- typedef struct FAPOProcessBufferParameters
- {
- void* pBuffer;
- FAPOBufferFlags BufferFlags;
- uint32_t ValidFrameCount;
- } FAPOProcessBufferParameters;
- #pragma pack(pop)
- /* Constants */
- #define FAPO_MIN_CHANNELS 1
- #define FAPO_MAX_CHANNELS 64
- #define FAPO_MIN_FRAMERATE 1000
- #define FAPO_MAX_FRAMERATE 200000
- #define FAPO_REGISTRATION_STRING_LENGTH 256
- #define FAPO_FLAG_CHANNELS_MUST_MATCH 0x00000001
- #define FAPO_FLAG_FRAMERATE_MUST_MATCH 0x00000002
- #define FAPO_FLAG_BITSPERSAMPLE_MUST_MATCH 0x00000004
- #define FAPO_FLAG_BUFFERCOUNT_MUST_MATCH 0x00000008
- #define FAPO_FLAG_INPLACE_REQUIRED 0x00000020
- #define FAPO_FLAG_INPLACE_SUPPORTED 0x00000010
- /* FAPO Interface */
- #ifndef FAPO_DECL
- #define FAPO_DECL
- typedef struct FAPO FAPO;
- #endif /* FAPO_DECL */
- typedef int32_t (FAPOCALL * AddRefFunc)(
- void *fapo
- );
- typedef int32_t (FAPOCALL * ReleaseFunc)(
- void *fapo
- );
- typedef uint32_t (FAPOCALL * GetRegistrationPropertiesFunc)(
- void* fapo,
- FAPORegistrationProperties **ppRegistrationProperties
- );
- typedef uint32_t (FAPOCALL * IsInputFormatSupportedFunc)(
- void* fapo,
- const FAudioWaveFormatEx *pOutputFormat,
- const FAudioWaveFormatEx *pRequestedInputFormat,
- FAudioWaveFormatEx **ppSupportedInputFormat
- );
- typedef uint32_t (FAPOCALL * IsOutputFormatSupportedFunc)(
- void* fapo,
- const FAudioWaveFormatEx *pInputFormat,
- const FAudioWaveFormatEx *pRequestedOutputFormat,
- FAudioWaveFormatEx **ppSupportedOutputFormat
- );
- typedef uint32_t (FAPOCALL * InitializeFunc)(
- void* fapo,
- const void* pData,
- uint32_t DataByteSize
- );
- typedef void (FAPOCALL * ResetFunc)(
- void* fapo
- );
- typedef uint32_t (FAPOCALL * LockForProcessFunc)(
- void* fapo,
- uint32_t InputLockedParameterCount,
- const FAPOLockForProcessBufferParameters *pInputLockedParameters,
- uint32_t OutputLockedParameterCount,
- const FAPOLockForProcessBufferParameters *pOutputLockedParameters
- );
- typedef void (FAPOCALL * UnlockForProcessFunc)(
- void* fapo
- );
- typedef void (FAPOCALL * ProcessFunc)(
- void* fapo,
- uint32_t InputProcessParameterCount,
- const FAPOProcessBufferParameters* pInputProcessParameters,
- uint32_t OutputProcessParameterCount,
- FAPOProcessBufferParameters* pOutputProcessParameters,
- int32_t IsEnabled
- );
- typedef uint32_t (FAPOCALL * CalcInputFramesFunc)(
- void* fapo,
- uint32_t OutputFrameCount
- );
- typedef uint32_t (FAPOCALL * CalcOutputFramesFunc)(
- void* fapo,
- uint32_t InputFrameCount
- );
- typedef void (FAPOCALL * SetParametersFunc)(
- void* fapo,
- const void* pParameters,
- uint32_t ParameterByteSize
- );
- typedef void (FAPOCALL * GetParametersFunc)(
- void* fapo,
- void* pParameters,
- uint32_t ParameterByteSize
- );
- struct FAPO
- {
- AddRefFunc AddRef;
- ReleaseFunc Release;
- GetRegistrationPropertiesFunc GetRegistrationProperties;
- IsInputFormatSupportedFunc IsInputFormatSupported;
- IsOutputFormatSupportedFunc IsOutputFormatSupported;
- InitializeFunc Initialize;
- ResetFunc Reset;
- LockForProcessFunc LockForProcess;
- UnlockForProcessFunc UnlockForProcess;
- ProcessFunc Process;
- CalcInputFramesFunc CalcInputFrames;
- CalcOutputFramesFunc CalcOutputFrames;
- SetParametersFunc SetParameters;
- GetParametersFunc GetParameters;
- };
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
- #endif /* FAPO_H */
- /* vim: set noexpandtab shiftwidth=8 tabstop=8: */
|