| /* | |
| * 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 | |
| * | |
| */ | |
| cpp_quote("#ifndef __audioclient_h__") | |
| cpp_quote("#define __audioclient_h__") | |
| 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_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)") | |
| cpp_quote("#endif /*__audioclient_h__*/") |