ReactOS 0.4.15-dev-7842-g558ab78
property.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Configuration of network devices
4 * FILE: dll/directx/dsound_new/property.c
5 * PURPOSE: Secondary IDirectSoundBuffer8 implementation
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9
10
11#include "precomp.h"
12
13typedef struct
14{
15 IKsPropertySetVtbl *lpVtbl;
17
19
23 LPKSPROPERTYSET iface,
25 LPVOID * ppobj)
26{
27 LPOLESTR pStr;
29
30
33 {
34 *ppobj = (LPVOID)&This->lpVtbl;
36 return S_OK;
37 }
38
39 if (SUCCEEDED(StringFromIID(riid, &pStr)))
40 {
41 DPRINT("No Interface for riid %s\n", pStr);
42 CoTaskMemFree(pStr);
43 }
44 return E_NOINTERFACE;
45}
46
50 LPKSPROPERTYSET iface)
51{
52 ULONG ref;
54
56
57 return ref;
58}
59
63 LPKSPROPERTYSET iface)
64{
65 ULONG ref;
67
68 ref = InterlockedDecrement(&(This->ref));
69
70 if (!ref)
71 {
73 }
74
75 return ref;
76}
77
78
82 LPKSPROPERTYSET iface,
83 REFGUID guidPropSet,
84 ULONG dwPropID,
85 LPVOID pInstanceData,
86 ULONG cbInstanceData,
87 LPVOID pPropData,
88 ULONG cbPropData,
89 PULONG pcbReturned )
90{
91 LPOLESTR pStr;
92 //HRESULT hr;
94 WAVEINCAPSW CapsIn;
95 WAVEOUTCAPSW CapsOut;
96
97 GUID DeviceGuid;
100
101 StringFromIID(guidPropSet, &pStr);
102
103 //DPRINT("Requested Property %ws dwPropID %u pInstanceData %p cbInstanceData %u pPropData %p cbPropData %u pcbReturned %p\n",
104 // pStr, dwPropID, pInstanceData, cbInstanceData, pPropData, cbPropData, pcbReturned);
105 CoTaskMemFree(pStr);
106
107 if (!IsEqualGUID(guidPropSet, &DSPROPSETID_DirectSoundDevice))
108 {
109 /* unsupported property set */
111 }
112
114 {
116 {
117 /* invalid parameter */
118 return DSERR_INVALIDPARAM;
119 }
120
122
123 if (IsEqualGUID(&Desc->DeviceId, &GUID_NULL))
124 {
126 {
127 DPRINT("Using default capture guid\n");
128 CopyMemory(&DeviceGuid, &DSDEVID_DefaultCapture, sizeof(GUID));
129 }
130 else
131 {
132 DPRINT("Using default playback guid\n");
133 CopyMemory(&DeviceGuid, &DSDEVID_DefaultPlayback, sizeof(GUID));
134 }
135 }
136 else
137 {
138 /* use provided guid */
139 CopyMemory(&DeviceGuid, &Desc->DeviceId, sizeof(GUID));
140 }
141
142 if (GetDeviceID(&DeviceGuid, &Desc->DeviceId) != DS_OK)
143 {
144 DPRINT("Unknown device guid\n");
145 return DSERR_INVALIDPARAM;
146 }
147
148 /* sanity check */
150 ASSERT(Filter != NULL);
151
152 /* fill in description */
153 if (IsEqualGUID(&Desc->DeviceId, &Filter->DeviceGuid[0]))
154 {
155 /* capture device */
157 Desc->WaveDeviceId = Filter->MappedId[0];
158
159 Result = waveInGetDevCapsW(Filter->MappedId[0], &CapsIn, sizeof(WAVEINCAPSW));
161 {
162 CapsIn.szPname[0] = 0;
163 DPRINT("waveInGetDevCaps Device %u failed with %x\n", Filter->MappedId[0], Result);
164 }
165
166 CapsIn.szPname[MAXPNAMELEN-1] = 0;
167 wcscpy(Desc->DescriptionW, CapsIn.szPname);
168 WideCharToMultiByte(CP_ACP, 0, CapsIn.szPname, -1, Desc->DescriptionA, sizeof(Desc->DescriptionA), NULL, NULL);
169
170 }
171 else
172 {
173 /* render device */
175 Desc->WaveDeviceId = Filter->MappedId[1];
176
177 Result = waveOutGetDevCapsW(Filter->MappedId[1], &CapsOut, sizeof(WAVEOUTCAPSW));
179 {
180 CapsOut.szPname[0] = 0;
181 DPRINT("waveOutGetDevCaps Device %u failed with %x\n", Filter->MappedId[1], Result);
182 }
183
184 CapsOut.szPname[MAXPNAMELEN-1] = 0;
185 wcscpy(Desc->DescriptionW, CapsOut.szPname);
186 WideCharToMultiByte(CP_ACP, 0, CapsOut.szPname, -1, Desc->DescriptionA, sizeof(Desc->DescriptionA), NULL, NULL);
187 }
188
189 /* ReactOS doesnt support vxd or emulated */
191 Desc->ModuleA[0] = 0;
192 Desc->ModuleW[0] = 0;
193
195 return S_OK;
196 }
197
198
201}
202
204WINAPI
206 LPKSPROPERTYSET iface,
207 REFGUID guidPropSet,
208 ULONG dwPropID,
209 LPVOID pInstanceData,
210 ULONG cbInstanceData,
211 LPVOID pPropData,
212 ULONG cbPropData )
213{
216}
217
219WINAPI
221 LPKSPROPERTYSET iface,
222 REFGUID guidPropSet,
223 ULONG dwPropID,
224 PULONG pTypeSupport )
225{
228}
229
230static IKsPropertySetVtbl vt_KsPropertySet =
231{
232 /* IUnknown methods */
236 /* IKsPropertySet methods */
240};
241
245 IUnknown* pUnkOuter,
246 REFIID riid,
248{
249 LPOLESTR pStr;
251
252 /* check requested interface */
254 {
255 *ppvObject = 0;
256 StringFromIID(riid, &pStr);
257 DPRINT("KsPropertySet does not support Interface %ws\n", pStr);
258 CoTaskMemFree(pStr);
259 return E_NOINTERFACE;
260 }
261
262 /* allocate object */
264 if (!This)
265 return E_OUTOFMEMORY;
266
267 /* initialize object */
268 This->ref = 1;
269 This->lpVtbl = &vt_KsPropertySet;
270 *ppvObject = (LPVOID)&This->lpVtbl;
271
272 return S_OK;
273}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
const GUID IID_IUnknown
#define UNIMPLEMENTED
Definition: debug.h:115
const GUID IID_IKsPropertySet
Definition: controlnode.cpp:13
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define NULL
Definition: types.h:112
BOOL FindDeviceByGuid(LPCGUID pGuidSrc, LPFILTERINFO *Filter)
Definition: devicelist.c:470
HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest)
Definition: dsound.c:53
struct CKsPropertySetImpl * LPCKsPropertySetImpl
HRESULT WINAPI KSPropertySetImpl_fnQueryInterface(LPKSPROPERTYSET iface, REFIID riid, LPVOID *ppobj)
Definition: property.c:22
HRESULT WINAPI KSPropertySetImpl_QuerySupport(LPKSPROPERTYSET iface, REFGUID guidPropSet, ULONG dwPropID, PULONG pTypeSupport)
Definition: property.c:220
HRESULT WINAPI KSPropertySetImpl_Get(LPKSPROPERTYSET iface, REFGUID guidPropSet, ULONG dwPropID, LPVOID pInstanceData, ULONG cbInstanceData, LPVOID pPropData, ULONG cbPropData, PULONG pcbReturned)
Definition: property.c:81
ULONG WINAPI KSPropertySetImpl_fnAddRef(LPKSPROPERTYSET iface)
Definition: property.c:49
static IKsPropertySetVtbl vt_KsPropertySet
Definition: property.c:230
HRESULT CALLBACK NewKsPropertySet(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: property.c:244
HRESULT WINAPI KSPropertySetImpl_Set(LPKSPROPERTYSET iface, REFGUID guidPropSet, ULONG dwPropID, LPVOID pInstanceData, ULONG cbInstanceData, LPVOID pPropData, ULONG cbPropData)
Definition: property.c:205
ULONG WINAPI KSPropertySetImpl_fnRelease(LPKSPROPERTYSET iface)
Definition: property.c:62
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define WideCharToMultiByte
Definition: compat.h:111
struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA
@ DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1
Definition: dsconf.h:18
@ DIRECTSOUNDDEVICE_TYPE_WDM
Definition: dsconf.h:31
struct _DSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA * PDSPROPERTY_DIRECTSOUNDDEVICE_DESCRIPTION_1_DATA
@ DIRECTSOUNDDEVICE_DATAFLOW_RENDER
Definition: dsconf.h:36
@ DIRECTSOUNDDEVICE_DATAFLOW_CAPTURE
Definition: dsconf.h:37
#define DS_OK
Definition: dsound.h:116
#define DSERR_INVALIDPARAM
Definition: dsound.h:121
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1801
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define GUID_NULL
Definition: ks.h:106
UINT MMRESULT
Definition: mmsystem.h:962
#define MMSYSERR_NOERROR
Definition: mmsystem.h:96
#define MAXPNAMELEN
Definition: mmsystem.h:24
#define ASSERT(a)
Definition: mode.c:44
static LPOLESTR
Definition: stg_prop.c:27
#define LPVOID
Definition: nt_native.h:45
_Check_return_ HRESULT WINAPI StringFromIID(_In_ REFIID rclsid, _Outptr_ LPOLESTR *lplpsz)
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define DPRINT
Definition: sndvol32.h:71
IKsPropertySetVtbl * lpVtbl
Definition: property.c:15
DIRECTSOUNDDEVICE_DATAFLOW DataFlow
Definition: dsconf.h:62
Definition: scsiwmi.h:51
Definition: send.c:48
WCHAR szPname[MAXPNAMELEN]
Definition: mmsystem.h:1060
WCHAR szPname[MAXPNAMELEN]
Definition: mmsystem.h:1039
uint32_t * PULONG
Definition: typedefs.h:59
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define E_PROP_ID_UNSUPPORTED
Definition: vfwmsgs.h:173
#define CopyMemory
Definition: winbase.h:1710
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364
UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps, UINT uSize)
Definition: winmm.c:2173
UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSize)
Definition: winmm.c:2573
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409