| /* | 
 |  * Copyright 2020 Nikolay Sivov 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"; | 
 | import "audioclient.idl"; | 
 | import "propsys.idl"; | 
 |  | 
 | typedef [v1_enum] enum AudioObjectType | 
 | { | 
 |     AudioObjectType_None             = 0, | 
 |     AudioObjectType_Dynamic          = 0x00000001, | 
 |     AudioObjectType_FrontLeft        = 0x00000002, | 
 |     AudioObjectType_FrontRight       = 0x00000004, | 
 |     AudioObjectType_FrontCenter      = 0x00000008, | 
 |     AudioObjectType_LowFrequency     = 0x00000010, | 
 |     AudioObjectType_SideLeft         = 0x00000020, | 
 |     AudioObjectType_SideRight        = 0x00000040, | 
 |     AudioObjectType_BackLeft         = 0x00000080, | 
 |     AudioObjectType_BackRight        = 0x00000100, | 
 |     AudioObjectType_TopFrontLeft     = 0x00000200, | 
 |     AudioObjectType_TopFrontRight    = 0x00000400, | 
 |     AudioObjectType_TopBackLeft      = 0x00000800, | 
 |     AudioObjectType_TopBackRight     = 0x00001000, | 
 |     AudioObjectType_BottomFrontLeft  = 0x00002000, | 
 |     AudioObjectType_BottomFrontRight = 0x00004000, | 
 |     AudioObjectType_BottomBackLeft   = 0x00008000, | 
 |     AudioObjectType_BottomBackRight  = 0x00010000, | 
 |     AudioObjectType_BackCenter       = 0x00020000, | 
 | } AudioObjectType; | 
 |  | 
 | cpp_quote("#define SPTLAUDCLNT_E_DESTROYED                     AUDCLNT_ERR(0x100)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_OUT_OF_ORDER                  AUDCLNT_ERR(0x101)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_RESOURCES_INVALIDATED         AUDCLNT_ERR(0x102)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_NO_MORE_OBJECTS               AUDCLNT_ERR(0x103)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_PROPERTY_NOT_SUPPORTED        AUDCLNT_ERR(0x104)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_ERRORS_IN_OBJECT_CALLS        AUDCLNT_ERR(0x105)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_METADATA_FORMAT_NOT_SUPPORTED AUDCLNT_ERR(0x106)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_STREAM_NOT_AVAILABLE          AUDCLNT_ERR(0x107)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_INVALID_LICENSE               AUDCLNT_ERR(0x108)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_STREAM_NOT_STOPPED            AUDCLNT_ERR(0x10a)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_STATIC_OBJECT_NOT_AVAILABLE   AUDCLNT_ERR(0x10b)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_OBJECT_ALREADY_ACTIVE         AUDCLNT_ERR(0x10c)") | 
 | cpp_quote("#define SPTLAUDCLNT_E_INTERNAL                      AUDCLNT_ERR(0x10d)") | 
 |  | 
 | interface ISpatialAudioObjectRenderStreamBase; | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(dddf83e6-68d7-4c70-883f-a1836afb4a50), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface ISpatialAudioObjectRenderStreamNotify : IUnknown | 
 | { | 
 |     HRESULT OnAvailableDynamicObjectCountChange( | 
 |         [in] ISpatialAudioObjectRenderStreamBase *stream, | 
 |         [in] LONGLONG deadline, | 
 |         [in] UINT32 object_count); | 
 | } | 
 |  | 
 | typedef struct tagSpatialAudioObjectRenderStreamActivationParams | 
 | { | 
 |     const WAVEFORMATEX *ObjectFormat; | 
 |     AudioObjectType StaticObjectTypeMask; | 
 |     UINT32 MinDynamicObjectCount; | 
 |     UINT32 MaxDynamicObjectCount; | 
 |     AUDIO_STREAM_CATEGORY Category; | 
 |     HANDLE EventHandle; | 
 |     ISpatialAudioObjectRenderStreamNotify *NotifyObject; | 
 | } SpatialAudioObjectRenderStreamActivationParams; | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(dcdaa858-895a-4a22-a5eb-67bda506096d), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface IAudioFormatEnumerator : IUnknown | 
 | { | 
 |     HRESULT GetCount( | 
 |         [out] UINT32 *count); | 
 |  | 
 |     HRESULT GetFormat( | 
 |         [in] UINT32 index, | 
 |         [out] WAVEFORMATEX **format); | 
 | } | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(bbf8e066-aaaa-49be-9a4d-fd2a858ea27f), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface ISpatialAudioClient : IUnknown | 
 | { | 
 |     HRESULT GetStaticObjectPosition( | 
 |         [in] AudioObjectType type, | 
 |         [out] float *x, | 
 |         [out] float *y, | 
 |         [out] float *z); | 
 |  | 
 |     HRESULT GetNativeStaticObjectTypeMask( | 
 |         [out] AudioObjectType *mask); | 
 |  | 
 |     HRESULT GetMaxDynamicObjectCount( | 
 |         [out] UINT32 *value); | 
 |  | 
 |     HRESULT GetSupportedAudioObjectFormatEnumerator( | 
 |         [out] IAudioFormatEnumerator **enumerator); | 
 |  | 
 |     HRESULT GetMaxFrameCount( | 
 |         [in] WAVEFORMATEX const *format, | 
 |         [out] UINT32 *count); | 
 |  | 
 |     HRESULT IsAudioObjectFormatSupported( | 
 |         [in] WAVEFORMATEX const *format); | 
 |  | 
 |     HRESULT IsSpatialAudioStreamAvailable( | 
 |         [in] REFIID stream_uuid, | 
 |         [in] PROPVARIANT const *info); | 
 |  | 
 |     HRESULT ActivateSpatialAudioStream( | 
 |         [in] PROPVARIANT const *params, | 
 |         [in] REFIID riid, | 
 |         [out, iid_is(riid)] void **stream); | 
 | } | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(cce0b8f2-8d4d-4efb-a8cf-3d6ecf1c30e0), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface ISpatialAudioObjectBase : IUnknown | 
 | { | 
 |     HRESULT GetBuffer( | 
 |         [out] BYTE **buffer, | 
 |         [out] UINT32 *bytes); | 
 |  | 
 |     HRESULT SetEndOfStream( | 
 |         [in] UINT32 frames); | 
 |  | 
 |     HRESULT IsActive( | 
 |         [out] BOOL *active); | 
 |  | 
 |     HRESULT GetAudioObjectType( | 
 |         [out] AudioObjectType *type); | 
 | } | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(dde28967-521b-46e5-8f00-bd6f2bc8ab1d), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface ISpatialAudioObject : ISpatialAudioObjectBase | 
 | { | 
 |     HRESULT SetPosition( | 
 |         [in] float x, | 
 |         [in] float y, | 
 |         [in] float z); | 
 |  | 
 |     HRESULT SetVolume( | 
 |         [in] float vol); | 
 | } | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(feaaf403-c1d8-450d-aa05-e0ccee7502a8), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface ISpatialAudioObjectRenderStreamBase : IUnknown | 
 | { | 
 |     HRESULT GetAvailableDynamicObjectCount( | 
 |         [out] UINT32 *count); | 
 |  | 
 |     HRESULT GetService( | 
 |         [in] REFIID riid, | 
 |         [out] void **service); | 
 |  | 
 |     HRESULT Start(); | 
 |  | 
 |     HRESULT Stop(); | 
 |  | 
 |     HRESULT Reset(); | 
 |  | 
 |     HRESULT BeginUpdatingAudioObjects( | 
 |         [out] UINT32 *count, | 
 |         [out] UINT32 *frames); | 
 |  | 
 |     HRESULT EndUpdatingAudioObjects(); | 
 | } | 
 |  | 
 | [ | 
 |     object, | 
 |     uuid(bab5f473-b423-477b-85f5-b5a332a04153), | 
 |     pointer_default(unique), | 
 |     local | 
 | ] | 
 | interface ISpatialAudioObjectRenderStream : ISpatialAudioObjectRenderStreamBase | 
 | { | 
 |     HRESULT ActivateSpatialAudioObject( | 
 |         [in] AudioObjectType type, | 
 |         [out] ISpatialAudioObject **object); | 
 | } |