2 * DirectPlay Voice Server 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"
34 WINE_DEFAULT_DEBUG_CHANNEL(dpvoice
);
36 typedef struct IDirectPlayVoiceServerImpl
38 IDirectPlayVoiceServer IDirectPlayVoiceServer_iface
;
40 } IDirectPlayVoiceServerImpl
;
42 HRESULT
DPVOICE_GetCompressionTypes(DVCOMPRESSIONINFO
*pData
, DWORD
*pdwDataSize
, DWORD
*pdwNumElements
, DWORD dwFlags
)
44 static const DVCOMPRESSIONINFO pcm_type
=
45 {80, {0x8de12fd4,0x7cb3,0x48ce,{0xa7,0xe8,0x9c,0x47,0xa2,0x2e,0x8a,0xc5}}, NULL
, NULL
, 0, 64000};
46 static const WCHAR pcm_name
[] =
47 {'M','S','-','P','C','M',' ','6','4',' ','k','b','i','t','/','s',0};
52 if (!pdwDataSize
|| !pdwNumElements
)
53 return DVERR_INVALIDPOINTER
;
56 return DVERR_INVALIDFLAGS
;
60 if (*pdwDataSize
< sizeof(pcm_type
) + sizeof(pcm_name
))
62 ret
= DVERR_BUFFERTOOSMALL
;
66 ret
= DVERR_INVALIDPOINTER
;
70 string_loc
= (LPWSTR
)((char*)pData
+ sizeof(pcm_type
));
71 memcpy(pData
, &pcm_type
, sizeof(pcm_type
));
72 memcpy(string_loc
, pcm_name
, sizeof(pcm_name
));
73 pData
->lpszName
= string_loc
;
77 *pdwDataSize
= sizeof(pcm_type
) + sizeof(pcm_name
);
81 static inline IDirectPlayVoiceServerImpl
*impl_from_IDirectPlayVoiceServer(IDirectPlayVoiceServer
*iface
)
83 return CONTAINING_RECORD(iface
, IDirectPlayVoiceServerImpl
, IDirectPlayVoiceServer_iface
);
86 static HRESULT WINAPI
dpvserver_QueryInterface(IDirectPlayVoiceServer
*iface
, REFIID riid
, void **ppv
)
88 if (IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IDirectPlayVoiceServer
))
90 IUnknown_AddRef(iface
);
95 WARN("(%p)->(%s,%p),not found\n", iface
, debugstr_guid(riid
), ppv
);
99 static ULONG WINAPI
dpvserver_AddRef(IDirectPlayVoiceServer
*iface
)
101 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
102 ULONG ref
= InterlockedIncrement(&This
->ref
);
104 TRACE("(%p) ref=%u\n", This
, ref
);
109 static ULONG WINAPI
dpvserver_Release(IDirectPlayVoiceServer
*iface
)
111 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
112 ULONG ref
= InterlockedDecrement(&This
->ref
);
114 TRACE("(%p) ref=%u\n", This
, ref
);
118 HeapFree(GetProcessHeap(), 0, This
);
123 static HRESULT WINAPI
dpvserver_Initialize(IDirectPlayVoiceServer
*iface
, IUnknown
*lpVoid
, PDVMESSAGEHANDLER pMessageHandler
,
124 void *pUserContext
, DWORD
*lpdwMessageMask
, DWORD dwMessageMaskElements
)
126 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
127 FIXME("%p %p %p %p %p %d\n", This
, lpVoid
, pMessageHandler
, pUserContext
,lpdwMessageMask
, dwMessageMaskElements
);
131 static HRESULT WINAPI
dpvserver_StartSession(IDirectPlayVoiceServer
*iface
, PDVSESSIONDESC pSessionDesc
, DWORD dwFlags
)
133 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
134 FIXME("%p %p %d\n", This
, pSessionDesc
, dwFlags
);
138 static HRESULT WINAPI
dpvserver_StopSession(IDirectPlayVoiceServer
*iface
, DWORD dwFlags
)
140 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
141 FIXME("%p %d\n", This
, dwFlags
);
145 static HRESULT WINAPI
dpvserver_GetSessionDesc(IDirectPlayVoiceServer
*iface
, PDVSESSIONDESC pvSessionDesc
)
147 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
148 FIXME("%p %p\n", This
, pvSessionDesc
);
152 static HRESULT WINAPI
dpvserver_SetSessionDesc(IDirectPlayVoiceServer
*iface
, PDVSESSIONDESC pSessionDesc
)
154 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
155 FIXME("%p %p\n", This
, pSessionDesc
);
159 static HRESULT WINAPI
dpvserver_GetCaps(IDirectPlayVoiceServer
*iface
, PDVCAPS pDVCaps
)
161 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
162 FIXME("%p %p\n", This
, pDVCaps
);
166 static HRESULT WINAPI
dpvserver_GetCompressionTypes(IDirectPlayVoiceServer
*iface
, void *pData
, DWORD
*pdwDataSize
,
167 DWORD
*pdwNumElements
, DWORD dwFlags
)
169 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
170 FIXME("%p %p %p %p %d semi-stub\n", This
, pData
, pdwDataSize
, pdwNumElements
, dwFlags
);
171 return DPVOICE_GetCompressionTypes(pData
, pdwDataSize
, pdwNumElements
, dwFlags
);
174 static HRESULT WINAPI
dpvserver_SetTransmitTargets(IDirectPlayVoiceServer
*iface
, DVID dvSource
, PDVID pdvIDTargets
,
175 DWORD dwNumTargets
, DWORD dwFlags
)
177 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
178 FIXME("%p %d %p %d %d\n", This
, dvSource
, pdvIDTargets
, dwNumTargets
, dwFlags
);
182 static HRESULT WINAPI
dpvserver_GetTransmitTargets(IDirectPlayVoiceServer
*iface
, DVID dvSource
, PDVID pdvIDTargets
,
183 DWORD
*pdwNumTargets
, DWORD dwFlags
)
185 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
186 FIXME("%p %d %p %p %d\n", This
, dvSource
, pdvIDTargets
, pdwNumTargets
, dwFlags
);
190 static HRESULT WINAPI
dpvserver_SetNotifyMask(IDirectPlayVoiceServer
*iface
, DWORD
*pdwMessageMask
, DWORD dwMessageMaskElements
)
192 IDirectPlayVoiceServerImpl
*This
= impl_from_IDirectPlayVoiceServer(iface
);
193 FIXME("%p %p %d\n", This
, pdwMessageMask
, dwMessageMaskElements
);
197 static const IDirectPlayVoiceServerVtbl DirectPlayVoiceServer_Vtbl
=
199 dpvserver_QueryInterface
,
202 dpvserver_Initialize
,
203 dpvserver_StartSession
,
204 dpvserver_StopSession
,
205 dpvserver_GetSessionDesc
,
206 dpvserver_SetSessionDesc
,
208 dpvserver_GetCompressionTypes
,
209 dpvserver_SetTransmitTargets
,
210 dpvserver_GetTransmitTargets
,
211 dpvserver_SetNotifyMask
214 HRESULT
DPVOICE_CreateDirectPlayVoiceServer(IClassFactory
*iface
, IUnknown
*pUnkOuter
, REFIID riid
, void **ppobj
)
216 IDirectPlayVoiceServerImpl
* server
;
219 TRACE("(%p, %s, %p)\n", pUnkOuter
, debugstr_guid(riid
), ppobj
);
223 server
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectPlayVoiceServerImpl
));
225 return E_OUTOFMEMORY
;
227 server
->IDirectPlayVoiceServer_iface
.lpVtbl
= &DirectPlayVoiceServer_Vtbl
;
230 ret
= IDirectPlayVoiceServer_QueryInterface(&server
->IDirectPlayVoiceServer_iface
, riid
, ppobj
);
231 IDirectPlayVoiceServer_Release(&server
->IDirectPlayVoiceServer_iface
);