| /* |
| * Core Audio audioclient definitions |
| * |
| * Copyright 2009 Maarten Lankhorst |
| * |
| * 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 "wtypes.idl"; |
| import "unknwn.idl"; |
| import "audiosessiontypes.h"; |
| |
| /* Forward declarations */ |
| interface IAudioClient; |
| interface IAudioRenderClient; |
| interface IAudioCaptureClient; |
| interface IAudioClock; |
| interface IAudioClock2; |
| interface IAudioClockAdjustment; |
| interface ISimpleAudioVolume; |
| interface IAudioStreamVolume; |
| interface IChannelAudioVolume; |
| |
| cpp_quote("#if 0") |
| typedef struct WAVEFORMATEX /*[hidden,restricted]*/ |
| { |
| WORD wFormatTag; |
| WORD nChannels; |
| DWORD nSamplesPerSec; |
| DWORD nAvgBytesPerSec; |
| WORD nBlockAlign; |
| WORD wBitsPerSample; |
| WORD cbSize; |
| } WAVEFORMATEX; |
| cpp_quote("#else") |
| cpp_quote("#include <mmreg.h>") |
| cpp_quote("#endif") |
| |
| cpp_quote("#if 0") |
| typedef LONGLONG /*[hidden,restricted]*/ REFERENCE_TIME; |
| cpp_quote("#else") |
| cpp_quote("#define _IKsControl_") |
| cpp_quote("#include <ks.h>") |
| cpp_quote("#include <ksmedia.h>") |
| cpp_quote("#endif") |
| |
| enum _AUDCLNT_BUFFERFLAGS |
| { |
| AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY = 0x1, |
| AUDCLNT_BUFFERFLAGS_SILENT = 0x2, |
| AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR = 0x4 |
| }; |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid(1cb9ad4c-dbfa-4c32-b178-c2f568a703b2), |
| object, |
| ] |
| interface IAudioClient : IUnknown |
| { |
| HRESULT Initialize( |
| [in] AUDCLNT_SHAREMODE ShareMode, |
| [in] DWORD StreamFlags, |
| [in] REFERENCE_TIME hnsBufferDuration, |
| [in] REFERENCE_TIME hnsPeriodicity, |
| [in] const WAVEFORMATEX *pFormat, |
| [in] LPCGUID AudioSessionGuid |
| ); |
| HRESULT GetBufferSize( |
| [out] UINT32 *pNumBufferFrames |
| ); |
| HRESULT GetStreamLatency( |
| [out] REFERENCE_TIME *phnsLatency |
| ); |
| HRESULT GetCurrentPadding( |
| [out] UINT32 *pNumPaddingFrames |
| ); |
| HRESULT IsFormatSupported( |
| [in] AUDCLNT_SHAREMODE ShareMode, |
| [in] const WAVEFORMATEX *pFormat, |
| [out,unique] WAVEFORMATEX **ppClosestMatch |
| ); |
| HRESULT GetMixFormat( |
| [out] WAVEFORMATEX **ppDeviceFormat |
| ); |
| HRESULT GetDevicePeriod( |
| [out] REFERENCE_TIME *phnsDefaultDevicePeriod, |
| [out] REFERENCE_TIME *phnsMinimumDevicePeriod |
| ); |
| HRESULT Start(void); |
| HRESULT Stop(void); |
| HRESULT Reset(void); |
| HRESULT SetEventHandle([in] HANDLE eventHandle); |
| HRESULT GetService( |
| [in] REFIID riid, |
| [iid_is(riid),out] void **ppv |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid(f294acfc-3146-4483-a7bf-addca7c260e2), |
| object, |
| ] |
| interface IAudioRenderClient : IUnknown |
| { |
| HRESULT GetBuffer( |
| [in] UINT32 NumFramesRequested, |
| [out] BYTE **ppData |
| ); |
| HRESULT ReleaseBuffer( |
| [in] UINT32 NumFramesWritten, |
| [in] DWORD dwFlags |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid(c8adbd64-e71e-48a0-a4de-185c395cd317), |
| object, |
| ] |
| interface IAudioCaptureClient : IUnknown |
| { |
| HRESULT GetBuffer( |
| [out] BYTE **ppData, |
| [out] UINT32 *pNumFramesToRead, |
| [out] DWORD *pdwFlags, |
| [unique,out] UINT64 *pu64DevicePosition, |
| [unique,out] UINT64 *pu64QPCPosition |
| ); |
| HRESULT ReleaseBuffer( |
| [in] UINT32 NumFramesRead |
| ); |
| HRESULT GetNextPacketSize( |
| [out] UINT32 *pNumFramesInNextPacket |
| ); |
| } |
| |
| cpp_quote("#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ 0x00000001") |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid("cd63314f-3fba-4a1b-812c-ef96358728e7"), |
| object, |
| ] |
| interface IAudioClock : IUnknown |
| { |
| HRESULT GetFrequency( |
| [out] UINT64 *pu64Frequency |
| ); |
| HRESULT GetPosition( |
| [out] UINT64 *pu64Position, |
| [out,unique] UINT64 *pu64QPCPosition |
| ); |
| HRESULT GetCharacteristics( |
| [out] DWORD *pdwCharacteristics |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid("6f49ff73-6727-49ac-a008-d98cf5e70048"), |
| object, |
| ] |
| interface IAudioClock2 : IUnknown |
| { |
| HRESULT GetPosition( |
| [out] UINT64 *DevicePosition, |
| [out,unique] UINT64 *QPCPosition |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid("f6e4c0a0-46d9-4fb9-be21-57a3ef2b626c"), |
| object, |
| ] |
| interface IAudioClockAdjustment : IUnknown |
| { |
| HRESULT SetSampleRate( |
| [in] float flSampleRate |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid("87ce5498-68d6-44e5-9215-6da47ef883d8"), |
| object, |
| ] |
| interface ISimpleAudioVolume : IUnknown |
| { |
| HRESULT SetMasterVolume( |
| [in] float fLevel, |
| [unique,in] LPCGUID EventContext |
| ); |
| HRESULT GetMasterVolume( |
| [out] float *pfLevel |
| ); |
| HRESULT SetMute( |
| [in] const BOOL bMute, |
| [unique,in] LPCGUID EventContext |
| ); |
| HRESULT GetMute( |
| [out] BOOL *pbMute |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid("93014887-242d-4068-8a15-cf5e93b90fe3"), |
| object, |
| ] |
| interface IAudioStreamVolume : IUnknown |
| { |
| HRESULT GetChannelCount( |
| [out] UINT32 *pdwCount |
| ); |
| HRESULT SetChannelVolume( |
| [in] UINT32 dwIndex, |
| [in] const float fLevel |
| ); |
| HRESULT GetChannelVolume( |
| [in] UINT32 dwIndex, |
| [out] float *pfLevel |
| ); |
| HRESULT SetAllVolumes( |
| [in] UINT32 dwCount, |
| [size_is(dwCount),in] const float *pfVolumes |
| ); |
| HRESULT GetAllVolumes( |
| [in] UINT32 dwCount, |
| [size_is(dwCount),out] float *pfVolumes |
| ); |
| } |
| |
| [ |
| local, |
| pointer_default(unique), |
| uuid("1c158861-b533-4b30-b1cf-e853e51c59b8"), |
| object, |
| ] |
| interface IChannelAudioVolume : IUnknown |
| { |
| HRESULT GetChannelCount( |
| [out] UINT32 *pdwCount |
| ); |
| HRESULT SetChannelVolume( |
| [in] UINT32 dwIndex, |
| [in] const float fLevel, |
| [unique,in] LPCGUID EventContext |
| ); |
| HRESULT GetChannelVolume( |
| [in] UINT32 dwIndex, |
| [out] float *pfLevel |
| ); |
| HRESULT SetAllVolumes( |
| [in] UINT32 dwCount, |
| [size_is(dwCount),in] const float *pfVolumes, |
| [unique,in] LPCGUID EventContext |
| ); |
| HRESULT GetAllVolumes( |
| [in] UINT32 dwCount, |
| [size_is(dwCount),out] float *pfVolumes |
| ); |
| } |
| |
| cpp_quote("#define FACILIY_AUDCLNT 0x889") |
| cpp_quote("#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILIY_AUDCLNT, n)") |
| cpp_quote("#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILIY_AUDCLNT, n)") |
| cpp_quote("#define AUDCLNT_E_NOT_INITIALIZED AUDCLNT_ERR(1)") |
| cpp_quote("#define AUDCLNT_E_ALREADY_INITIALIZED AUDCLNT_ERR(2)") |
| cpp_quote("#define AUDCLNT_E_WRONG_ENDPOINT_TYPE AUDCLNT_ERR(3)") |
| cpp_quote("#define AUDCLNT_E_DEVICE_INVALIDATED AUDCLNT_ERR(4)") |
| cpp_quote("#define AUDCLNT_E_NOT_STOPPED AUDCLNT_ERR(5)") |
| cpp_quote("#define AUDCLNT_E_BUFFER_TOO_LARGE AUDCLNT_ERR(6)") |
| cpp_quote("#define AUDCLNT_E_OUT_OF_ORDER AUDCLNT_ERR(7)") |
| cpp_quote("#define AUDCLNT_E_UNSUPPORTED_FORMAT AUDCLNT_ERR(8)") |
| cpp_quote("#define AUDCLNT_E_INVALID_SIZE AUDCLNT_ERR(9)") |
| cpp_quote("#define AUDCLNT_E_DEVICE_IN_USE AUDCLNT_ERR(0x0a)") |
| cpp_quote("#define AUDCLNT_E_BUFFER_OPERATION_PENDING AUDCLNT_ERR(0x0b)") |
| cpp_quote("#define AUDCLNT_E_THREAD_NOT_REGISTERED AUDCLNT_ERR(0x0c)") |
| /* Not defined? cpp_quote("#define AUDCLNT_E_UNKNOWN_XXX1 AUDCLNT_ERR(0x0d)") */ |
| cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x0e)") |
| cpp_quote("#define AUDCLNT_E_ENDPOINT_CREATE_FAILED AUDCLNT_ERR(0x0f)") |
| cpp_quote("#define AUDCLNT_E_SERVICE_NOT_RUNNING AUDCLNT_ERR(0x10)") |
| cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED AUDCLNT_ERR(0x11)") |
| cpp_quote("#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY AUDCLNT_ERR(0x12)") |
| cpp_quote("#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x13)") |
| cpp_quote("#define AUDCLNT_E_EVENTHANDLE_NOT_SET AUDCLNT_ERR(0x14)") |
| cpp_quote("#define AUDCLNT_E_INCORRECT_BUFFER_SIZE AUDCLNT_ERR(0x15)") |
| cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_ERROR AUDCLNT_ERR(0x16)") |
| cpp_quote("#define AUDCLNT_E_CPUUSAGE_EXCEEDED AUDCLNT_ERR(0x17)") |
| cpp_quote("#define AUDCLNT_E_BUFFER_ERROR AUDCLNT_ERR(0x18)") |
| cpp_quote("#define AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED AUDCLNT_ERR(0x19)") |
| /* Hex fail */ |
| cpp_quote("#define AUDCLNT_E_INVALID_DEVICE_PERIOD AUDCLNT_ERR(0x20)") |
| cpp_quote("#define AUDCLNT_E_INVALID_STREAM_FLAG AUDCLNT_ERR(0x021)") |
| cpp_quote("#define AUDCLNT_E_ENDPOINT_OFFLOAD_NOT_CAPABLE AUDCLNT_ERR(0x022)") |
| cpp_quote("#define AUDCLNT_E_OUT_OF_OFFLOAD_RESOURCES AUDCLNT_ERR(0x023)") |
| cpp_quote("#define AUDCLNT_E_OFFLOAD_MODE_ONLY AUDCLNT_ERR(0x024)") |
| cpp_quote("#define AUDCLNT_E_NONOFFLOAD_MODE_ONLY AUDCLNT_ERR(0x025)") |
| cpp_quote("#define AUDCLNT_E_RESOURCES_INVALIDATED AUDCLNT_ERR(0x026)") |
| |
| cpp_quote("#define AUDCLNT_S_BUFFER_EMPTY AUDCLNT_SUCCESS(0x1)") |
| cpp_quote("#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x2)") |
| cpp_quote("#define AUDCLNT_S_POSITION_STALLED AUDCLNT_SUCCESS(0x3)") |