From 2757e1efba452b5a2dba8dcde390865e784e72c6 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Tue, 10 Nov 2009 09:18:25 +0100 Subject: [PATCH] include: Add audioclient.idl. --- .gitignore | 1 + include/Makefile.in | 1 + include/audioclient.idl | 326 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 328 insertions(+) create mode 100644 include/audioclient.idl diff --git a/.gitignore b/.gitignore index 77763397213..ead942c76b7 100644 --- a/.gitignore +++ b/.gitignore @@ -125,6 +125,7 @@ include/activdbg.h include/activscp.h include/amstream.h include/amvideo.h +include/audioclient.h include/austream.h include/bits.h include/bits1_5.h diff --git a/include/Makefile.in b/include/Makefile.in index f2cd3be7f76..a4828e113a1 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -14,6 +14,7 @@ PUBLIC_IDL_H_SRCS = \ activscp.idl \ amstream.idl \ amvideo.idl \ + audioclient.idl \ austream.idl \ bits.idl \ bits1_5.idl \ diff --git a/include/audioclient.idl b/include/audioclient.idl new file mode 100644 index 00000000000..cb1880b466e --- /dev/null +++ b/include/audioclient.idl @@ -0,0 +1,326 @@ +/* + * 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 ") +cpp_quote("#endif") + +cpp_quote("#if 0") +typedef LONGLONG /*[hidden,restricted]*/ REFERENCE_TIME; +cpp_quote("#else") +cpp_quote("#define _IKsControl_") +cpp_quote("#include ") +cpp_quote("#include ") +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__*/") -- 2.11.4.GIT