2018-02-14 06:43:36 +00:00
|
|
|
/*
|
|
|
|
* Structure and enum definitions are from audioclient.h in the Windows 10 SDK
|
|
|
|
*
|
|
|
|
* These should be defined by MinGW, but they aren't yet since they're very new
|
|
|
|
* so we keep a copy in our tree. All definitions are guarded, so it should be
|
|
|
|
* fine to always include this even when building with MSVC.
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#ifndef __IAudioClient3_FWD_DEFINED__
|
|
|
|
#define __IAudioClient3_FWD_DEFINED__
|
|
|
|
typedef interface IAudioClient3 IAudioClient3;
|
|
|
|
|
|
|
|
#endif /* __IAudioClient3_FWD_DEFINED__ */
|
|
|
|
|
|
|
|
#ifndef __IAudioClient3_INTERFACE_DEFINED__
|
|
|
|
#define __IAudioClient3_INTERFACE_DEFINED__
|
|
|
|
|
2018-03-09 16:35:49 +00:00
|
|
|
/* This is only available with IAudioClient3 */
|
|
|
|
typedef enum AUDCLNT_STREAMOPTIONS
|
|
|
|
{
|
|
|
|
AUDCLNT_STREAMOPTIONS_NONE = 0,
|
|
|
|
AUDCLNT_STREAMOPTIONS_RAW = 0x1,
|
|
|
|
AUDCLNT_STREAMOPTIONS_MATCH_FORMAT = 0x2
|
|
|
|
} AUDCLNT_STREAMOPTIONS;
|
|
|
|
|
|
|
|
/* These should be available when the IAudioClient2 interface is defined */
|
|
|
|
#ifndef __IAudioClient2_FWD_DEFINED__
|
2018-02-14 06:43:36 +00:00
|
|
|
typedef enum _AUDIO_STREAM_CATEGORY {
|
|
|
|
AudioCategory_Other = 0,
|
|
|
|
AudioCategory_ForegroundOnlyMedia,
|
|
|
|
AudioCategory_BackgroundCapableMedia,
|
|
|
|
AudioCategory_Communications,
|
|
|
|
AudioCategory_Alerts,
|
|
|
|
AudioCategory_SoundEffects,
|
|
|
|
AudioCategory_GameEffects,
|
|
|
|
AudioCategory_GameMedia,
|
|
|
|
AudioCategory_GameChat,
|
|
|
|
AudioCategory_Speech,
|
|
|
|
AudioCategory_Movie,
|
|
|
|
AudioCategory_Media
|
|
|
|
} AUDIO_STREAM_CATEGORY;
|
|
|
|
|
|
|
|
typedef struct AudioClientProperties
|
|
|
|
{
|
|
|
|
UINT32 cbSize;
|
|
|
|
BOOL bIsOffload;
|
|
|
|
AUDIO_STREAM_CATEGORY eCategory;
|
|
|
|
AUDCLNT_STREAMOPTIONS Options;
|
|
|
|
} AudioClientProperties;
|
2018-03-09 16:35:49 +00:00
|
|
|
#endif /* __IAudioClient2_FWD_DEFINED__ */
|
2018-02-14 06:43:36 +00:00
|
|
|
|
|
|
|
EXTERN_C const IID IID_IAudioClient3;
|
|
|
|
|
|
|
|
typedef struct IAudioClient3Vtbl
|
|
|
|
{
|
|
|
|
BEGIN_INTERFACE
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
REFIID riid,
|
|
|
|
void **ppvObject);
|
|
|
|
|
|
|
|
ULONG ( STDMETHODCALLTYPE *AddRef )(
|
|
|
|
IAudioClient3 * This);
|
|
|
|
|
|
|
|
ULONG ( STDMETHODCALLTYPE *Release )(
|
|
|
|
IAudioClient3 * This);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *Initialize )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
AUDCLNT_SHAREMODE ShareMode,
|
|
|
|
DWORD StreamFlags,
|
|
|
|
REFERENCE_TIME hnsBufferDuration,
|
|
|
|
REFERENCE_TIME hnsPeriodicity,
|
|
|
|
const WAVEFORMATEX *pFormat,
|
|
|
|
LPCGUID AudioSessionGuid);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetBufferSize )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
UINT32 *pNumBufferFrames);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetStreamLatency )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
REFERENCE_TIME *phnsLatency);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetCurrentPadding )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
UINT32 *pNumPaddingFrames);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
AUDCLNT_SHAREMODE ShareMode,
|
|
|
|
const WAVEFORMATEX *pFormat,
|
|
|
|
WAVEFORMATEX **ppClosestMatch);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetMixFormat )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
WAVEFORMATEX **ppDeviceFormat);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetDevicePeriod )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
REFERENCE_TIME *phnsDefaultDevicePeriod,
|
|
|
|
REFERENCE_TIME *phnsMinimumDevicePeriod);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *Start )(
|
|
|
|
IAudioClient3 * This);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *Stop )(
|
|
|
|
IAudioClient3 * This);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *Reset )(
|
|
|
|
IAudioClient3 * This);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *SetEventHandle )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
HANDLE eventHandle);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetService )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
REFIID riid,
|
|
|
|
void **ppv);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *IsOffloadCapable )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
AUDIO_STREAM_CATEGORY Category,
|
|
|
|
BOOL *pbOffloadCapable);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *SetClientProperties )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
const AudioClientProperties *pProperties);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetBufferSizeLimits )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
const WAVEFORMATEX *pFormat,
|
|
|
|
BOOL bEventDriven,
|
|
|
|
REFERENCE_TIME *phnsMinBufferDuration,
|
|
|
|
REFERENCE_TIME *phnsMaxBufferDuration);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetSharedModeEnginePeriod )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
const WAVEFORMATEX *pFormat,
|
|
|
|
UINT32 *pDefaultPeriodInFrames,
|
|
|
|
UINT32 *pFundamentalPeriodInFrames,
|
|
|
|
UINT32 *pMinPeriodInFrames,
|
|
|
|
UINT32 *pMaxPeriodInFrames);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *GetCurrentSharedModeEnginePeriod )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
WAVEFORMATEX **ppFormat,
|
|
|
|
UINT32 *pCurrentPeriodInFrames);
|
|
|
|
|
|
|
|
HRESULT ( STDMETHODCALLTYPE *InitializeSharedAudioStream )(
|
|
|
|
IAudioClient3 * This,
|
|
|
|
DWORD StreamFlags,
|
|
|
|
UINT32 PeriodInFrames,
|
|
|
|
const WAVEFORMATEX *pFormat,
|
|
|
|
LPCGUID AudioSessionGuid);
|
|
|
|
|
|
|
|
END_INTERFACE
|
|
|
|
} IAudioClient3Vtbl;
|
|
|
|
|
|
|
|
interface IAudioClient3
|
|
|
|
{
|
|
|
|
CONST_VTBL struct IAudioClient3Vtbl *lpVtbl;
|
|
|
|
};
|
|
|
|
|
|
|
|
#define IAudioClient3_QueryInterface(This,riid,ppvObject) \
|
|
|
|
( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
|
|
|
|
|
|
|
|
#define IAudioClient3_AddRef(This) \
|
|
|
|
( (This)->lpVtbl -> AddRef(This) )
|
|
|
|
|
|
|
|
#define IAudioClient3_Release(This) \
|
|
|
|
( (This)->lpVtbl -> Release(This) )
|
|
|
|
|
|
|
|
|
|
|
|
#define IAudioClient3_Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) \
|
|
|
|
( (This)->lpVtbl -> Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetBufferSize(This,pNumBufferFrames) \
|
|
|
|
( (This)->lpVtbl -> GetBufferSize(This,pNumBufferFrames) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetStreamLatency(This,phnsLatency) \
|
|
|
|
( (This)->lpVtbl -> GetStreamLatency(This,phnsLatency) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetCurrentPadding(This,pNumPaddingFrames) \
|
|
|
|
( (This)->lpVtbl -> GetCurrentPadding(This,pNumPaddingFrames) )
|
|
|
|
|
|
|
|
#define IAudioClient3_IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) \
|
|
|
|
( (This)->lpVtbl -> IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetMixFormat(This,ppDeviceFormat) \
|
|
|
|
( (This)->lpVtbl -> GetMixFormat(This,ppDeviceFormat) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) \
|
|
|
|
( (This)->lpVtbl -> GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) )
|
|
|
|
|
|
|
|
#define IAudioClient3_Start(This) \
|
|
|
|
( (This)->lpVtbl -> Start(This) )
|
|
|
|
|
|
|
|
#define IAudioClient3_Stop(This) \
|
|
|
|
( (This)->lpVtbl -> Stop(This) )
|
|
|
|
|
|
|
|
#define IAudioClient3_Reset(This) \
|
|
|
|
( (This)->lpVtbl -> Reset(This) )
|
|
|
|
|
|
|
|
#define IAudioClient3_SetEventHandle(This,eventHandle) \
|
|
|
|
( (This)->lpVtbl -> SetEventHandle(This,eventHandle) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetService(This,riid,ppv) \
|
|
|
|
( (This)->lpVtbl -> GetService(This,riid,ppv) )
|
|
|
|
|
|
|
|
|
|
|
|
#define IAudioClient3_IsOffloadCapable(This,Category,pbOffloadCapable) \
|
|
|
|
( (This)->lpVtbl -> IsOffloadCapable(This,Category,pbOffloadCapable) )
|
|
|
|
|
|
|
|
#define IAudioClient3_SetClientProperties(This,pProperties) \
|
|
|
|
( (This)->lpVtbl -> SetClientProperties(This,pProperties) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetBufferSizeLimits(This,pFormat,bEventDriven,phnsMinBufferDuration,phnsMaxBufferDuration) \
|
|
|
|
( (This)->lpVtbl -> GetBufferSizeLimits(This,pFormat,bEventDriven,phnsMinBufferDuration,phnsMaxBufferDuration) )
|
|
|
|
|
|
|
|
|
|
|
|
#define IAudioClient3_GetSharedModeEnginePeriod(This,pFormat,pDefaultPeriodInFrames,pFundamentalPeriodInFrames,pMinPeriodInFrames,pMaxPeriodInFrames) \
|
|
|
|
( (This)->lpVtbl -> GetSharedModeEnginePeriod(This,pFormat,pDefaultPeriodInFrames,pFundamentalPeriodInFrames,pMinPeriodInFrames,pMaxPeriodInFrames) )
|
|
|
|
|
|
|
|
#define IAudioClient3_GetCurrentSharedModeEnginePeriod(This,ppFormat,pCurrentPeriodInFrames) \
|
|
|
|
( (This)->lpVtbl -> GetCurrentSharedModeEnginePeriod(This,ppFormat,pCurrentPeriodInFrames) )
|
|
|
|
|
|
|
|
#define IAudioClient3_InitializeSharedAudioStream(This,StreamFlags,PeriodInFrames,pFormat,AudioSessionGuid) \
|
|
|
|
( (This)->lpVtbl -> InitializeSharedAudioStream(This,StreamFlags,PeriodInFrames,pFormat,AudioSessionGuid) )
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* __IAudioClient3_INTERFACE_DEFINED__ */
|