1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef __INC_AUDIOENGINEENDPOINT__
7 #define __INC_AUDIOENGINEENDPOINT__
8 
9 #include <endpointvolume.h>
10 #include <audioapotypes.h>
11 
12 #if (_WIN32_WINNT >= 0x0601)
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 typedef LONGLONG HNSTIME;
18 
19 typedef enum AE_POSITION_FLAGS {
20   POSITION_INVALID         = 0,
21   POSITION_DISCONTINUOUS   = 1,
22   POSITION_CONTINUOUS      = 2,
23   POSITION_QPC_ERROR       = 4
24 } AE_POSITION_FLAGS;
25 
26 typedef struct AE_CURRENT_POSITION {
27   UINT64            u64DevicePosition;
28   UINT64            u64StreamPosition;
29   UINT64            u64PaddingFrames;
30   HNSTIME           hnsQPCPosition;
31   FLOAT32           f32FramesPerSecond;
32   AE_POSITION_FLAGS Flag;
33 } AE_CURRENT_POSITION, *PAE_CURRENT_POSITION;
34 
35 typedef struct _AUDIO_ENDPOINT_EXCLUSIVE_CREATE_PARAMS {
36   UINT32       u32Size;
37   LONGLONG     hConnection;
38   WINBOOL      bIsRtCapable;
39   HNSTIME      hnsBufferDuration;
40   HNSTIME      hnsPeriod;
41   UINT32       u32LatencyCoefficient;
42   WAVEFORMATEX wfxDeviceFormat;
43 } AUDIO_ENDPOINT_EXCLUSIVE_CREATE_PARAMS, *PAUDIO_ENDPOINT_EXCLUSIVE_CREATE_PARAMS;
44 
45 typedef struct _AUDIO_ENDPOINT_SHARED_CREATE_PARAMS {
46   UINT32 u32Size;
47   UINT32 u32TSSessionId;
48 } AUDIO_ENDPOINT_SHARED_CREATE_PARAMS, *PAUDIO_ENDPOINT_SHARED_CREATE_PARAMS;
49 
50 #ifdef __cplusplus
51 }
52 #endif
53 
54 #ifndef __IAudioDeviceEndpoint_FWD_DEFINED__
55 #define __IAudioDeviceEndpoint_FWD_DEFINED__
56 typedef struct IAudioDeviceEndpoint IAudioDeviceEndpoint;
57 #endif
58 
59 #ifndef __IAudioEndpoint_FWD_DEFINED__
60 #define __IAudioEndpoint_FWD_DEFINED__
61 typedef struct IAudioEndpoint IAudioEndpoint;
62 #endif
63 
64 #ifndef __IAudioEndpointControl_FWD_DEFINED__
65 #define __IAudioEndpointControl_FWD_DEFINED__
66 typedef struct IAudioEndpointControl IAudioEndpointControl;
67 #endif
68 
69 #ifndef __IAudioEndpointRT_FWD_DEFINED__
70 #define __IAudioEndpointRT_FWD_DEFINED__
71 typedef struct IAudioEndpointRT IAudioEndpointRT;
72 #endif
73 
74 #ifndef __IAudioEndpointVolumeEx_FWD_DEFINED__
75 #define __IAudioEndpointVolumeEx_FWD_DEFINED__
76 typedef struct IAudioEndpointVolumeEx IAudioEndpointVolumeEx;
77 #endif
78 
79 #ifndef __IAudioInputEndpointRT_FWD_DEFINED__
80 #define __IAudioInputEndpointRT_FWD_DEFINED__
81 typedef struct IAudioInputEndpointRT IAudioInputEndpointRT;
82 #endif
83 
84 #ifndef __IAudioInputEndpointRT_FWD_DEFINED__
85 #define __IAudioInputEndpointRT_FWD_DEFINED__
86 typedef struct IAudioOutputEndpointRT IAudioOutputEndpointRT;
87 #endif
88 
89 #undef  INTERFACE
90 #define INTERFACE IAudioDeviceEndpoint
91 #ifdef __GNUC__
92 #warning COM interfaces layout in this header has not been verified.
93 #warning COM interfaces with incorrect layout may not work at all.
94 __MINGW_BROKEN_INTERFACE(INTERFACE)
95 #endif
DECLARE_INTERFACE_(IAudioDeviceEndpoint,IUnknown)96 DECLARE_INTERFACE_(IAudioDeviceEndpoint,IUnknown)
97 {
98     BEGIN_INTERFACE
99 
100     /* IUnknown methods */
101     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
102     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
103     STDMETHOD_(ULONG, Release)(THIS) PURE;
104 
105     /* IAudioDeviceEndpoint methods */
106     STDMETHOD_(HRESULT,GetEventDrivenCapable)(THIS_ WINBOOL *pbIsEventCapable) PURE;
107     STDMETHOD_(HRESULT,GetRTCaps)(THIS_ WINBOOL *pbIsRTCapable) PURE;
108     STDMETHOD_(HRESULT,SetBuffer)(THIS_ HNSTIME MaxPeriod,UINT32 u32LatencyCoefficient) PURE;
109     STDMETHOD_(HRESULT,WriteExclusiveModeParametersToSharedMemory)(THIS_ UINT_PTR hTargetProcess,HNSTIME hnsPeriod,HNSTIME hnsBufferDuration,UINT32 u32LatencyCoefficient,UINT32 *pu32SharedMemorySize,UINT_PTR *phSharedMemory) PURE;
110 
111     END_INTERFACE
112 };
113 #ifdef COBJMACROS
114 #define IAudioDeviceEndpoint_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
115 #define IAudioDeviceEndpoint_AddRef(This) (This)->lpVtbl->AddRef(This)
116 #define IAudioDeviceEndpoint_Release(This) (This)->lpVtbl->Release(This)
117 #define IAudioDeviceEndpoint_GetEventDrivenCapable(This,pbIsEventCapable) (This)->lpVtbl->GetEventDrivenCapable(This,pbIsEventCapable)
118 #define IAudioDeviceEndpoint_GetRTCaps(This,pbIsRTCapable) (This)->lpVtbl->GetRTCaps(This,pbIsRTCapable)
119 #define IAudioDeviceEndpoint_SetBuffer(This,MaxPeriod,u32LatencyCoefficient) (This)->lpVtbl->SetBuffer(This,MaxPeriod,u32LatencyCoefficient)
120 #define IAudioDeviceEndpoint_WriteExclusiveModeParametersToSharedMemory(This,hTargetProcess,hnsPeriod,hnsBufferDuration,u32LatencyCoefficient,pu32SharedMemorySize,phSharedMemory) (This)->lpVtbl->WriteExclusiveModeParametersToSharedMemory(This,hTargetProcess,hnsPeriod,hnsBufferDuration,u32LatencyCoefficient,pu32SharedMemorySize,phSharedMemory)
121 #endif /*COBJMACROS*/
122 
123 #undef  INTERFACE
124 #define INTERFACE IAudioEndpoint
125 #ifdef __GNUC__
126 #warning COM interfaces layout in this header has not been verified.
127 #warning COM interfaces with incorrect layout may not work at all.
128 __MINGW_BROKEN_INTERFACE(INTERFACE)
129 #endif
DECLARE_INTERFACE_(IAudioEndpoint,IUnknown)130 DECLARE_INTERFACE_(IAudioEndpoint,IUnknown)
131 {
132     BEGIN_INTERFACE
133 
134     /* IUnknown methods */
135     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
136     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
137     STDMETHOD_(ULONG, Release)(THIS) PURE;
138 
139     /* IAudioEndpoint methods */
140     STDMETHOD_(HRESULT,GetFrameFormat)(THIS_ WAVEFORMATEX **ppFormat) PURE;
141     STDMETHOD_(HRESULT,GetFramesPerPacket)(THIS_ UINT32 *pFramesPerPacket) PURE;
142     STDMETHOD_(HRESULT,GetLatency)(THIS_ HNSTIME *pLatency) PURE;
143     STDMETHOD_(HRESULT,SetEventHandle)(THIS_ HANDLE eventHandle) PURE;
144     STDMETHOD_(HRESULT,SetStreamFlags)(THIS_ DWORD streamFlags) PURE;
145 
146     END_INTERFACE
147 };
148 #ifdef COBJMACROS
149 #define IAudioEndpoint_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
150 #define IAudioEndpoint_AddRef(This) (This)->lpVtbl->AddRef(This)
151 #define IAudioEndpoint_Release(This) (This)->lpVtbl->Release(This)
152 #define IAudioEndpoint_GetFrameFormat(This,ppFormat) (This)->lpVtbl->GetFrameFormat(This,ppFormat)
153 #define IAudioEndpoint_GetFramesPerPacket(This,pFramesPerPacket) (This)->lpVtbl->GetFramesPerPacket(This,pFramesPerPacket)
154 #define IAudioEndpoint_GetLatency(This,pLatency) (This)->lpVtbl->GetLatency(This,pLatency)
155 #define IAudioEndpoint_SetEventHandle(This,eventHandle) (This)->lpVtbl->SetEventHandle(This,eventHandle)
156 #define IAudioEndpoint_SetStreamFlags(This,streamFlags) (This)->lpVtbl->SetStreamFlags(This,streamFlags)
157 #endif /*COBJMACROS*/
158 
159 #undef  INTERFACE
160 #define INTERFACE IAudioEndpointControl
161 #ifdef __GNUC__
162 #warning COM interfaces layout in this header has not been verified.
163 #warning COM interfaces with incorrect layout may not work at all.
164 __MINGW_BROKEN_INTERFACE(INTERFACE)
165 #endif
DECLARE_INTERFACE_(IAudioEndpointControl,IUnknown)166 DECLARE_INTERFACE_(IAudioEndpointControl,IUnknown)
167 {
168     BEGIN_INTERFACE
169 
170     /* IUnknown methods */
171     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
172     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
173     STDMETHOD_(ULONG, Release)(THIS) PURE;
174 
175     /* IAudioEndpointControl methods */
176     STDMETHOD_(HRESULT,Reset)(THIS) PURE;
177     STDMETHOD_(HRESULT,Start)(THIS) PURE;
178     STDMETHOD_(HRESULT,Stop)(THIS) PURE;
179 
180     END_INTERFACE
181 };
182 #ifdef COBJMACROS
183 #define IAudioEndpointControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
184 #define IAudioEndpointControl_AddRef(This) (This)->lpVtbl->AddRef(This)
185 #define IAudioEndpointControl_Release(This) (This)->lpVtbl->Release(This)
186 #define IAudioEndpointControl_Reset() (This)->lpVtbl->Reset(This)
187 #define IAudioEndpointControl_Start() (This)->lpVtbl->Start(This)
188 #define IAudioEndpointControl_Stop() (This)->lpVtbl->Stop(This)
189 #endif /*COBJMACROS*/
190 
191 #undef  INTERFACE
192 #define INTERFACE IAudioEndpointRT
193 #ifdef __GNUC__
194 #warning COM interfaces layout in this header has not been verified.
195 #warning COM interfaces with incorrect layout may not work at all.
196 __MINGW_BROKEN_INTERFACE(INTERFACE)
197 #endif
DECLARE_INTERFACE_(IAudioEndpointRT,IUnknown)198 DECLARE_INTERFACE_(IAudioEndpointRT,IUnknown)
199 {
200     BEGIN_INTERFACE
201 
202     /* IUnknown methods */
203     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
204     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
205     STDMETHOD_(ULONG, Release)(THIS) PURE;
206 
207     /* IAudioEndpointRT methods */
208     STDMETHOD(GetCurrentPadding)(THIS_ HNSTIME *pPadding,AE_CURRENT_POSITION *pAeCurrentPosition) PURE;
209     STDMETHOD(ProcessingComplete)(THIS) PURE;
210     STDMETHOD_(HRESULT,SetPinActive)(THIS) PURE;
211     STDMETHOD_(HRESULT,SetPinInactive)(THIS) PURE;
212 
213     END_INTERFACE
214 };
215 #ifdef COBJMACROS
216 #define IAudioEndpointRT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
217 #define IAudioEndpointRT_AddRef(This) (This)->lpVtbl->AddRef(This)
218 #define IAudioEndpointRT_Release(This) (This)->lpVtbl->Release(This)
219 #define IAudioEndpointRT_GetCurrentPadding(This,pPadding,pAeCurrentPosition) (This)->lpVtbl->GetCurrentPadding(This,pPadding,pAeCurrentPosition)
220 #define IAudioEndpointRT_ProcessingComplete() (This)->lpVtbl->ProcessingComplete(This)
221 #define IAudioEndpointRT_SetPinActive() (This)->lpVtbl->SetPinActive(This)
222 #define IAudioEndpointRT_SetPinInactive() (This)->lpVtbl->SetPinInactive(This)
223 #endif /*COBJMACROS*/
224 
225 #undef  INTERFACE
226 #define INTERFACE IAudioEndpointVolumeEx
227 #ifdef __GNUC__
228 #warning COM interfaces layout in this header has not been verified.
229 #warning COM interfaces with incorrect layout may not work at all.
230 __MINGW_BROKEN_INTERFACE(INTERFACE)
231 #endif
DECLARE_INTERFACE_(IAudioEndpointVolumeEx,IAudioEndpointVolume)232 DECLARE_INTERFACE_(IAudioEndpointVolumeEx,IAudioEndpointVolume)
233 {
234     BEGIN_INTERFACE
235 
236     /* IUnknown methods */
237     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
238     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
239     STDMETHOD_(ULONG, Release)(THIS) PURE;
240 
241     /* IAudioEndpointVolume methods */
242     STDMETHOD_(HRESULT,GetChannelCount)(THIS_ UINT *pnChannelCount) PURE;
243     STDMETHOD_(HRESULT,GetChannelVolumeLevel)(THIS_ UINT nChannel,float *pfLevelDB) PURE;
244     STDMETHOD_(HRESULT,GetChannelVolumeLevelScalar)(THIS_ UINT nChannel,float *pfLevel) PURE;
245     STDMETHOD_(HRESULT,GetMasterVolumeLevel)(THIS_ float *pfLevelDB) PURE;
246     STDMETHOD_(HRESULT,GetMasterVolumeLevelScalar)(THIS_ float *pfLevel) PURE;
247     STDMETHOD_(HRESULT,GetMute)(THIS_ WINBOOL *pbMute) PURE;
248     STDMETHOD_(HRESULT,GetVolumeRange)(THIS_ float *pfLevelMinDB,float *pfLevelMaxDB,float *pfVolumeIncrementDB) PURE;
249     STDMETHOD_(HRESULT,GetVolumeStepInfo)(THIS_ UINT *pnStep,UINT *pnStepCount) PURE;
250     STDMETHOD_(HRESULT,QueryHardwareSupport)(THIS_ DWORD *pdwHardwareSupportMask) PURE;
251     STDMETHOD_(HRESULT,RegisterControlChangeNotify)(THIS_ IAudioEndpointVolumeCallback *pNotify) PURE;
252     STDMETHOD_(HRESULT,SetChannelVolumeLevel)(THIS_ UINT nChannel,float fLevelDB,LPCGUID pguidEventContext) PURE;
253     STDMETHOD_(HRESULT,SetChannelVolumeLevelScalar)(THIS_ UINT nChannel,float fLevel,LPCGUID pguidEventContext) PURE;
254     STDMETHOD_(HRESULT,SetMasterVolumeLevel)(THIS_ float fLevelDB,LPCGUID pguidEventContext) PURE;
255     STDMETHOD_(HRESULT,SetMasterVolumeLevelScalar)(THIS_ float fLevel,LPCGUID pguidEventContext) PURE;
256     STDMETHOD_(HRESULT,SetMute)(THIS_ WINBOOL bMute,LPCGUID pguidEventContext) PURE;
257     STDMETHOD_(HRESULT,UnregisterControlChangeNotify)(THIS_ IAudioEndpointVolumeCallback *pNotify) PURE;
258     STDMETHOD_(HRESULT,VolumeStepDown)(THIS_ LPCGUID pguidEventContext) PURE;
259     STDMETHOD_(HRESULT,VolumeStepUp)(THIS_ LPCGUID pguidEventContext) PURE;
260 
261     /* IAudioEndpointVolumeEx methods */
262     STDMETHOD_(HRESULT,GetVolumeRangeChannel)(THIS_ UINT iChannel,float *pflVolumeMinDB,float *pflVolumeMaxDB,float *pflVolumeIncrementDB) PURE;
263 
264     END_INTERFACE
265 };
266 #ifdef COBJMACROS
267 #define IAudioEndpointVolumeEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
268 #define IAudioEndpointVolumeEx_AddRef(This) (This)->lpVtbl->AddRef(This)
269 #define IAudioEndpointVolumeEx_Release(This) (This)->lpVtbl->Release(This)
270 #define IAudioEndpointVolumeEx_GetChannelCount(This,pnChannelCount) (This)->lpVtbl->GetChannelCount(This,pnChannelCount)
271 #define IAudioEndpointVolumeEx_GetChannelVolumeLevel(This,nChannel,pfLevelDB) (This)->lpVtbl->GetChannelVolumeLevel(This,nChannel,pfLevelDB)
272 #define IAudioEndpointVolumeEx_GetChannelVolumeLevelScalar(This,nChannel,pfLevel) (This)->lpVtbl->GetChannelVolumeLevelScalar(This,nChannel,pfLevel)
273 #define IAudioEndpointVolumeEx_GetMasterVolumeLevel(This,pfLevelDB) (This)->lpVtbl->GetMasterVolumeLevel(This,pfLevelDB)
274 #define IAudioEndpointVolumeEx_GetMasterVolumeLevelScalar(This,pfLevel) (This)->lpVtbl->GetMasterVolumeLevelScalar(This,pfLevel)
275 #define IAudioEndpointVolumeEx_GetMute(This,pbMute) (This)->lpVtbl->GetMute(This,pbMute)
276 #define IAudioEndpointVolumeEx_GetVolumeRange(This,pfLevelMinDB,pfLevelMaxDB,pfVolumeIncrementDB) (This)->lpVtbl->GetVolumeRange(This,pfLevelMinDB,pfLevelMaxDB,pfVolumeIncrementDB)
277 #define IAudioEndpointVolumeEx_GetVolumeStepInfo(This,pnStep,pnStepCount) (This)->lpVtbl->GetVolumeStepInfo(This,pnStep,pnStepCount)
278 #define IAudioEndpointVolumeEx_QueryHardwareSupport(This,pdwHardwareSupportMask) (This)->lpVtbl->QueryHardwareSupport(This,pdwHardwareSupportMask)
279 #define IAudioEndpointVolumeEx_RegisterControlChangeNotify(This,pNotify) (This)->lpVtbl->RegisterControlChangeNotify(This,pNotify)
280 #define IAudioEndpointVolumeEx_SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) (This)->lpVtbl->SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext)
281 #define IAudioEndpointVolumeEx_SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) (This)->lpVtbl->SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext)
282 #define IAudioEndpointVolumeEx_SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) (This)->lpVtbl->SetMasterVolumeLevel(This,fLevelDB,pguidEventContext)
283 #define IAudioEndpointVolumeEx_SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) (This)->lpVtbl->SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext)
284 #define IAudioEndpointVolumeEx_SetMute(This,bMute,pguidEventContext) (This)->lpVtbl->SetMute(This,bMute,pguidEventContext)
285 #define IAudioEndpointVolumeEx_UnregisterControlChangeNotify(This,pNotify) (This)->lpVtbl->UnregisterControlChangeNotify(This,pNotify)
286 #define IAudioEndpointVolumeEx_VolumeStepDown(This,pguidEventContext) (This)->lpVtbl->VolumeStepDown(This,pguidEventContext)
287 #define IAudioEndpointVolumeEx_VolumeStepUp(This,pguidEventContext) (This)->lpVtbl->VolumeStepUp(This,pguidEventContext)
288 #define IAudioEndpointVolumeEx_GetVolumeRangeChannel(This,iChannel,pflVolumeMinDB,pflVolumeMaxDB,pflVolumeIncrementDB) (This)->lpVtbl->GetVolumeRangeChannel(This,iChannel,pflVolumeMinDB,pflVolumeMaxDB,pflVolumeIncrementDB)
289 #endif /*COBJMACROS*/
290 
291 #undef  INTERFACE
292 #define INTERFACE IAudioInputEndpointRT
293 #ifdef __GNUC__
294 #warning COM interfaces layout in this header has not been verified.
295 #warning COM interfaces with incorrect layout may not work at all.
296 __MINGW_BROKEN_INTERFACE(INTERFACE)
297 #endif
DECLARE_INTERFACE_(IAudioInputEndpointRT,IUnknown)298 DECLARE_INTERFACE_(IAudioInputEndpointRT,IUnknown)
299 {
300     BEGIN_INTERFACE
301 
302     /* IUnknown methods */
303     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
304     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
305     STDMETHOD_(ULONG, Release)(THIS) PURE;
306 
307     /* IAudioInputEndpointRT methods */
308     STDMETHOD(GetInputDataPointer)(THIS_ AE_CURRENT_POSITION *pAeTimeStamp) PURE;
309     STDMETHOD(PulseEndpoint)(THIS) PURE;
310     STDMETHOD(ReleaseInputDataPointer)(THIS_ UINT32 u32FrameCount,UINT_PTR pDataPointer) PURE;
311 
312     END_INTERFACE
313 };
314 #ifdef COBJMACROS
315 #define IAudioInputEndpointRT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
316 #define IAudioInputEndpointRT_AddRef(This) (This)->lpVtbl->AddRef(This)
317 #define IAudioInputEndpointRT_Release(This) (This)->lpVtbl->Release(This)
318 #define IAudioInputEndpointRT_GetInputDataPointer(This,pAeTimeStamp) (This)->lpVtbl->GetInputDataPointer(This,pAeTimeStamp)
319 #define IAudioInputEndpointRT_PulseEndpoint() (This)->lpVtbl->PulseEndpoint(This)
320 #define IAudioInputEndpointRT_ReleaseInputDataPointer(This,u32FrameCount,pDataPointer) (This)->lpVtbl->ReleaseInputDataPointer(This,u32FrameCount,pDataPointer)
321 #endif /*COBJMACROS*/
322 
323 #undef  INTERFACE
324 #define INTERFACE IAudioOutputEndpointRT
325 #ifdef __GNUC__
326 #warning COM interfaces layout in this header has not been verified.
327 #warning COM interfaces with incorrect layout may not work at all.
328 __MINGW_BROKEN_INTERFACE(INTERFACE)
329 #endif
DECLARE_INTERFACE_(IAudioOutputEndpointRT,IUnknown)330 DECLARE_INTERFACE_(IAudioOutputEndpointRT,IUnknown)
331 {
332     BEGIN_INTERFACE
333 
334     /* IUnknown methods */
335     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
336     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
337     STDMETHOD_(ULONG, Release)(THIS) PURE;
338 
339     /* IAudioOutputEndpointRT methods */
340     STDMETHOD_(UINT_PTR,GetOutputDataPointer)(THIS_ UINT32 u32FrameCount,AE_CURRENT_POSITION *pAeTimeStamp) PURE;
341     STDMETHOD(PulseEndpoint)(THIS) PURE;
342     STDMETHOD(ReleaseOutputDataPointer)(THIS_ const APO_CONNECTION_PROPERTY *pConnectionProperty) PURE;
343 
344     END_INTERFACE
345 };
346 #ifdef COBJMACROS
347 #define IAudioOutputEndpointRT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
348 #define IAudioOutputEndpointRT_AddRef(This) (This)->lpVtbl->AddRef(This)
349 #define IAudioOutputEndpointRT_Release(This) (This)->lpVtbl->Release(This)
350 #define IAudioOutputEndpointRT_GetOutputDataPointer(This,u32FrameCount,pAeTimeStamp) (This)->lpVtbl->GetOutputDataPointer(This,u32FrameCount,pAeTimeStamp)
351 #define IAudioOutputEndpointRT_PulseEndpoint() (This)->lpVtbl->PulseEndpoint(This)
352 #define IAudioOutputEndpointRT_ReleaseOutputDataPointer(This,pConnectionProperty) (This)->lpVtbl->ReleaseOutputDataPointer(This,pConnectionProperty)
353 #endif /*COBJMACROS*/
354 
355 #endif /*(_WIN32_WINNT >= 0x0601)*/
356 #endif /*_INC_AUDIOENGINEENDPOINT*/
357