2 * DirectPlay Voice Client Interface
4 * Copyright (C) 2014 Alistair Leslie-Hughes
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/debug.h"
33 #include "dvoice_private.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(dpvoice
);
37 typedef struct IDirectPlayVoiceClientImpl
39 IDirectPlayVoiceClient IDirectPlayVoiceClient_iface
;
41 } IDirectPlayVoiceClientImpl
;
43 typedef struct IDirectPlayVoiceTestImpl
45 IDirectPlayVoiceTest IDirectPlayVoiceTest_iface
;
47 } IDirectPlayVoiceTestImpl
;
49 static inline IDirectPlayVoiceClientImpl
*impl_from_IDirectPlayVoiceClient(IDirectPlayVoiceClient
*iface
)
51 return CONTAINING_RECORD(iface
, IDirectPlayVoiceClientImpl
, IDirectPlayVoiceClient_iface
);
54 static inline IDirectPlayVoiceTestImpl
*impl_from_IDirectPlayVoiceTest(IDirectPlayVoiceTest
*iface
)
56 return CONTAINING_RECORD(iface
, IDirectPlayVoiceTestImpl
, IDirectPlayVoiceTest_iface
);
59 static HRESULT WINAPI
dpvclient_QueryInterface(IDirectPlayVoiceClient
*iface
, REFIID riid
, void **ppv
)
61 if (IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IDirectPlayVoiceClient
))
63 IUnknown_AddRef(iface
);
68 WARN("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ppv
);
72 static ULONG WINAPI
dpvclient_AddRef(IDirectPlayVoiceClient
*iface
)
74 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
75 ULONG ref
= InterlockedIncrement(&This
->ref
);
77 TRACE("(%p) ref=%u\n", This
, ref
);
82 static ULONG WINAPI
dpvclient_Release(IDirectPlayVoiceClient
*iface
)
84 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
85 ULONG ref
= InterlockedDecrement(&This
->ref
);
87 TRACE("(%p) ref=%u\n", This
, ref
);
91 HeapFree(GetProcessHeap(), 0, This
);
96 static HRESULT WINAPI
dpvclient_Initialize(IDirectPlayVoiceClient
*iface
,LPUNKNOWN pVoid
, PDVMESSAGEHANDLER pMessageHandler
,
97 void *pUserContext
, DWORD
*pdwMessageMask
, DWORD dwMessageMaskElements
)
99 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
100 FIXME("%p %p %p %p %p %d\n", This
, pVoid
, pMessageHandler
, pUserContext
,pdwMessageMask
, dwMessageMaskElements
);
104 static HRESULT WINAPI
dpvclient_Connect(IDirectPlayVoiceClient
*iface
, PDVSOUNDDEVICECONFIG pSoundDeviceConfig
,
105 PDVCLIENTCONFIG pdvClientConfig
, DWORD dwFlags
)
107 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
108 FIXME("%p %p %p %d\n", This
, pSoundDeviceConfig
, pdvClientConfig
, dwFlags
);
112 static HRESULT WINAPI
dpvclient_Disconnect(IDirectPlayVoiceClient
*iface
, DWORD dwFlags
)
114 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
115 FIXME("%p %d\n", This
, dwFlags
);
119 static HRESULT WINAPI
dpvclient_GetSessionDesc(IDirectPlayVoiceClient
*iface
, PDVSESSIONDESC pvSessionDesc
)
121 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
122 FIXME("%p %p\n", This
, pvSessionDesc
);
126 static HRESULT WINAPI
dpvclient_GetClientConfig(IDirectPlayVoiceClient
*iface
, PDVCLIENTCONFIG pClientConfig
)
128 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
129 FIXME("%p %p\n", This
, pClientConfig
);
133 static HRESULT WINAPI
dpvclient_SetClientConfig(IDirectPlayVoiceClient
*iface
, PDVCLIENTCONFIG pClientConfig
)
135 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
136 FIXME("%p %p\n", This
, pClientConfig
);
140 static HRESULT WINAPI
dpvclient_GetCaps(IDirectPlayVoiceClient
*iface
, PDVCAPS pCaps
)
142 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
143 FIXME("%p %p\n", This
, pCaps
);
147 static HRESULT WINAPI
dpvclient_GetCompressionTypes(IDirectPlayVoiceClient
*iface
, void *pData
,
148 DWORD
*pdwDataSize
, DWORD
*pdwNumElements
, DWORD dwFlags
)
150 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
151 FIXME("%p %p %p %p %d semi-stub\n", This
, pData
, pdwDataSize
, pdwNumElements
, dwFlags
);
152 return DPVOICE_GetCompressionTypes(pData
, pdwDataSize
, pdwNumElements
, dwFlags
);
155 static HRESULT WINAPI
dpvclient_SetTransmitTargets(IDirectPlayVoiceClient
*iface
, PDVID pdvIDTargets
,
156 DWORD dwNumTargets
, DWORD dwFlags
)
158 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
159 FIXME("%p %p %d %d\n", This
, pdvIDTargets
, dwNumTargets
, dwFlags
);
163 static HRESULT WINAPI
dpvclient_GetTransmitTargets(IDirectPlayVoiceClient
*iface
, PDVID pdvIDTargets
,
164 DWORD
*pdwNumTargets
, DWORD dwFlags
)
166 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
167 FIXME("%p %p %d\n", This
, pdwNumTargets
, dwFlags
);
171 static HRESULT WINAPI
dpvclient_Create3DSoundBuffer(IDirectPlayVoiceClient
*iface
, DVID dvID
,
172 LPDIRECTSOUNDBUFFER lpdsSourceBuffer
, DWORD dwPriority
, DWORD dwFlags
,
173 LPDIRECTSOUND3DBUFFER
*lpUserBuffer
)
175 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
176 FIXME("%p %d %p %d %d %p\n", This
, dvID
, lpdsSourceBuffer
, dwPriority
, dwFlags
, lpUserBuffer
);
180 static HRESULT WINAPI
dpvclient_Delete3DSoundBuffer(IDirectPlayVoiceClient
*iface
, DVID dvID
, LPDIRECTSOUND3DBUFFER
*lpUserBuffer
)
182 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
183 FIXME("%p %d %p\n", This
, dvID
, lpUserBuffer
);
187 static HRESULT WINAPI
dpvclient_SetNotifyMask(IDirectPlayVoiceClient
*iface
, DWORD
*pdwMessageMask
, DWORD dwMessageMaskElements
)
189 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
190 FIXME("%p %p %d\n", This
, pdwMessageMask
, dwMessageMaskElements
);
194 static HRESULT WINAPI
dpvclient_GetSoundDeviceConfig(IDirectPlayVoiceClient
*iface
, PDVSOUNDDEVICECONFIG pSoundDeviceConfig
,
197 IDirectPlayVoiceClientImpl
*This
= impl_from_IDirectPlayVoiceClient(iface
);
198 FIXME("%p %p %p\n", This
, pSoundDeviceConfig
, pdwSize
);
203 static const IDirectPlayVoiceClientVtbl DirectPlayVoiceClient_Vtbl
=
205 dpvclient_QueryInterface
,
208 dpvclient_Initialize
,
210 dpvclient_Disconnect
,
211 dpvclient_GetSessionDesc
,
212 dpvclient_GetClientConfig
,
213 dpvclient_SetClientConfig
,
215 dpvclient_GetCompressionTypes
,
216 dpvclient_SetTransmitTargets
,
217 dpvclient_GetTransmitTargets
,
218 dpvclient_Create3DSoundBuffer
,
219 dpvclient_Delete3DSoundBuffer
,
220 dpvclient_SetNotifyMask
,
221 dpvclient_GetSoundDeviceConfig
224 HRESULT
DPVOICE_CreateDirectPlayVoiceClient(IClassFactory
*iface
, IUnknown
*pUnkOuter
, REFIID riid
, void **ppobj
)
226 IDirectPlayVoiceClientImpl
* client
;
229 TRACE("(%p, %s, %p)\n", pUnkOuter
, debugstr_guid(riid
), ppobj
);
233 client
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectPlayVoiceClientImpl
));
235 return E_OUTOFMEMORY
;
237 client
->IDirectPlayVoiceClient_iface
.lpVtbl
= &DirectPlayVoiceClient_Vtbl
;
240 ret
= IDirectPlayVoiceClient_QueryInterface(&client
->IDirectPlayVoiceClient_iface
, riid
, ppobj
);
241 IDirectPlayVoiceClient_Release(&client
->IDirectPlayVoiceClient_iface
);
246 static HRESULT WINAPI
dpvtest_QueryInterface(IDirectPlayVoiceTest
*iface
, REFIID riid
, void **ppv
)
248 if (IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IDirectPlayVoiceTest
))
250 IUnknown_AddRef(iface
);
255 WARN("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ppv
);
256 return E_NOINTERFACE
;
259 static ULONG WINAPI
dpvtest_AddRef(IDirectPlayVoiceTest
*iface
)
261 IDirectPlayVoiceTestImpl
*This
= impl_from_IDirectPlayVoiceTest(iface
);
262 ULONG ref
= InterlockedIncrement(&This
->ref
);
264 TRACE("(%p) ref=%u\n", This
, ref
);
269 static ULONG WINAPI
dpvtest_Release(IDirectPlayVoiceTest
*iface
)
271 IDirectPlayVoiceTestImpl
*This
= impl_from_IDirectPlayVoiceTest(iface
);
272 ULONG ref
= InterlockedDecrement(&This
->ref
);
274 TRACE("(%p) ref=%u\n", This
, ref
);
278 HeapFree(GetProcessHeap(), 0, This
);
283 static HRESULT WINAPI
dpvtest_CheckAudioSetup(IDirectPlayVoiceTest
*iface
, const GUID
*pguidPlaybackDevice
, const GUID
*pguidCaptureDevice
,
284 HWND hwndParent
, DWORD dwFlags
)
286 IDirectPlayVoiceTestImpl
*This
= impl_from_IDirectPlayVoiceTest(iface
);
287 FIXME("%p %s %s %p %d\n", This
, debugstr_guid(pguidPlaybackDevice
),
288 debugstr_guid(pguidCaptureDevice
), hwndParent
, dwFlags
);
292 static const IDirectPlayVoiceTestVtbl DirectPlayVoiceTest_Vtbl
=
294 dpvtest_QueryInterface
,
297 dpvtest_CheckAudioSetup
300 HRESULT
DPVOICE_CreateDirectPlayVoiceTest(IClassFactory
*iface
, IUnknown
*pUnkOuter
, REFIID riid
, void **ppobj
)
302 IDirectPlayVoiceTestImpl
* test
;
305 TRACE("(%p, %s, %p)\n", pUnkOuter
, debugstr_guid(riid
), ppobj
);
309 test
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectPlayVoiceTestImpl
));
311 return E_OUTOFMEMORY
;
313 test
->IDirectPlayVoiceTest_iface
.lpVtbl
= &DirectPlayVoiceTest_Vtbl
;
316 ret
= IDirectPlayVoiceTest_QueryInterface(&test
->IDirectPlayVoiceTest_iface
, riid
, ppobj
);
317 IDirectPlayVoiceTest_Release(&test
->IDirectPlayVoiceTest_iface
);