/* * Copyright (c) 2015 Andrew Eikum for CodeWeavers * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ import "unknwn.idl"; #define XAPO_REGISTRATION_STRING_LENGTH 256 cpp_quote("#define XAPO_FLAG_CHANNELS_MUST_MATCH 0x1") cpp_quote("#define XAPO_FLAG_FRAMERATE_MUST_MATCH 0x2") cpp_quote("#define XAPO_FLAG_BITSPERSAMPLE_MUST_MATCH 0x4") cpp_quote("#define XAPO_FLAG_BUFFERCOUNT_MUST_MATCH 0x8") cpp_quote("#define XAPO_FLAG_INPLACE_SUPPORTED 0x10") cpp_quote("#define XAPO_FLAG_INPLACE_REQUIRED 0x20") cpp_quote("#if 0") typedef struct WAVEFORMATEX { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { WAVEFORMATEX Format; union { WORD wValidBitsPerSample; WORD wSamplesPerBlock; WORD wReserved; } Samples; DWORD dwChannelMask; GUID SubFormat; } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; cpp_quote("#else") cpp_quote("#include <mmreg.h>") cpp_quote("#endif") typedef struct XAPO_REGISTRATION_PROPERTIES { CLSID clsid; WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH]; WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH]; UINT32 MajorVersion; UINT32 MinorVersion; UINT32 Flags; UINT32 MinInputBufferCount; UINT32 MaxInputBufferCount; UINT32 MinOutputBufferCount; UINT32 MaxOutputBufferCount; } XAPO_REGISTRATION_PROPERTIES; typedef struct XAPO20_REGISTRATION_PROPERTIES { CLSID clsid; WCHAR FriendlyName[XAPO_REGISTRATION_STRING_LENGTH]; WCHAR CopyrightInfo[XAPO_REGISTRATION_STRING_LENGTH]; UINT32 MajorVersion; UINT32 MinorVersion; UINT32 Flags; UINT32 MinInputBufferCount; UINT32 MaxInputBufferCount; UINT32 MinOutputBufferCount; UINT32 MaxOutputBufferCount; UINT32 InterfaceCount; IID InterfaceArray[1]; } XAPO20_REGISTRATION_PROPERTIES; typedef struct XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS { const WAVEFORMATEX *pFormat; UINT32 MaxFrameCount; } XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS; typedef enum XAPO_BUFFER_FLAGS { XAPO_BUFFER_SILENT, XAPO_BUFFER_VALID } XAPO_BUFFER_FLAGS; typedef struct XAPO_PROCESS_BUFFER_PARAMETERS { void *pBuffer; XAPO_BUFFER_FLAGS BufferFlags; UINT32 ValidFrameCount; } XAPO_PROCESS_BUFFER_PARAMETERS; /* XAudio2 2.8 version of IXAPO */ [ object, local, uuid(a410b984-9839-4819-a0be-2856ae6b3adb) ] interface IXAPO : IUnknown { HRESULT GetRegistrationProperties([out] XAPO_REGISTRATION_PROPERTIES **props); HRESULT IsInputFormatSupported(const WAVEFORMATEX *output_fmt, const WAVEFORMATEX *input_fmt, WAVEFORMATEX **supported_fmt); HRESULT IsOutputFormatSupported(const WAVEFORMATEX *input_fmt, const WAVEFORMATEX *output_fmt, WAVEFORMATEX **supported_fmt); HRESULT Initialize(const void *data, UINT32 data_len); void Reset(void); HRESULT LockForProcess(UINT32 in_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params, UINT32 out_params_count, const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params); void UnlockForProcess(void); void Process(UINT32 in_params_count, const XAPO_PROCESS_BUFFER_PARAMETERS *in_params, UINT32 out_params_count, XAPO_PROCESS_BUFFER_PARAMETERS *out_params, BOOL enabled); UINT32 CalcInputFrames(UINT32 output_frames); UINT32 CalcOutputFrames(UINT32 input_frames); } /* XAudio2 2.7 version of IXAPO is identical to 2.8 */ cpp_quote("DEFINE_GUID(IID_IXAPO27, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x00);") /* XAudio2 2.8 version of IXAPOParameters */ [ object, local, uuid(26d95c66-80f2-499a-ad54-5ae7f01c6d98) ] interface IXAPOParameters : IUnknown { void SetParameters(const void *params, UINT32 params_len); void GetParameters(void *params, UINT32 params_len); } /* XAudio2 2.7 version of IXAPOParameters is identical to 2.8 */ cpp_quote("DEFINE_GUID(IID_IXAPO27Parameters, 0xa90bc001, 0xe897, 0xe897, 0x55, 0xe4, 0x9e, 0x47, 0x00, 0x00, 0x00, 0x01);")