#ifndef FACT_CPP_XAPOBASE_H #define FACT_CPP_XAPOBASE_H #include "XAPO.h" #include typedef FAPORegistrationProperties XAPO_REGISTRATION_PROPERTIES; class CXAPOBase : public IXAPO { protected: // for CXAPOParametersBase and other derived classes that wrap FAPO structs CXAPOBase(FAPOBase *base); public: CXAPOBase( const XAPO_REGISTRATION_PROPERTIES* pRegistrationProperties, BYTE* pParameterBlocks = NULL, UINT32 uParameterBlockByteSize = 0, BOOL fProducer = 0); virtual ~CXAPOBase(); COM_METHOD(HRESULT) QueryInterface(REFIID riid, void** ppInterface); COM_METHOD(ULONG) AddRef(); COM_METHOD(ULONG) Release(); COM_METHOD(HRESULT) GetRegistrationProperties (XAPO_REGISTRATION_PROPERTIES** ppRegistrationProperties); COM_METHOD(HRESULT) IsInputFormatSupported ( const WAVEFORMATEX* pOutputFormat, const WAVEFORMATEX* pRequestedInputFormat, WAVEFORMATEX** ppSupportedInputFormat); COM_METHOD(HRESULT) IsOutputFormatSupported ( const WAVEFORMATEX* pInputFormat, const WAVEFORMATEX* pRequestedOutputFormat, WAVEFORMATEX** ppSupportedOutputFormat); COM_METHOD(HRESULT) Initialize(const void*pData, UINT32 DataByteSize); COM_METHOD(void) Reset(); COM_METHOD(HRESULT) LockForProcess ( UINT32 InputLockedParameterCount, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pInputLockedParameters, UINT32 OutputLockedParameterCount, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS* pOutputLockedParameters); COM_METHOD(void) UnlockForProcess (); COM_METHOD(UINT32) CalcInputFrames(UINT32 OutputFrameCount); COM_METHOD(UINT32) CalcOutputFrames(UINT32 InputFrameCount); protected: virtual HRESULT ValidateFormatDefault(WAVEFORMATEX* pFormat, BOOL fOverwrite); HRESULT ValidateFormatPair( const WAVEFORMATEX* pSupportedFormat, WAVEFORMATEX* pRequestedFormat, BOOL fOverwrite); void ProcessThru( void* pInputBuffer, FLOAT32* pOutputBuffer, UINT32 FrameCount, WORD InputChannelCount, WORD OutputChannelCount, BOOL MixWithOutput); const XAPO_REGISTRATION_PROPERTIES* GetRegistrationPropertiesInternal(); BOOL IsLocked(); protected: FAPOBase *fapo_base; bool own_fapo_base; }; class CXAPOParametersBase : public CXAPOBase, public IXAPOParameters { protected: // for derived classes that wrap FAPO structs CXAPOParametersBase(FAPOBase *base); public: CXAPOParametersBase( const XAPO_REGISTRATION_PROPERTIES* pRegistrationProperties, BYTE* pParameterBlocks, UINT32 uParameterBlockByteSize, BOOL fProducer); virtual ~CXAPOParametersBase(); COM_METHOD(HRESULT) QueryInterface(REFIID riid, void** ppInterface); COM_METHOD(ULONG) AddRef(); COM_METHOD(ULONG) Release(); COM_METHOD(void) SetParameters (const void* pParameters, UINT32 ParameterByteSize); COM_METHOD(void) GetParameters (void* pParameters, UINT32 ParameterByteSize); virtual void OnSetParameters(const void*, UINT32); BOOL ParametersChanged(); BYTE* BeginProcess(); void EndProcess(); }; #endif // FACT_CPP_XAPOBASE_H