ReactOS 0.4.15-dev-5672-gf73ac17
dmusic.c
Go to the documentation of this file.
1/*
2 * IDirectMusic8 Implementation
3 *
4 * Copyright (C) 2003-2004 Rok Mandeljc
5 * Copyright (C) 2012 Christian Costa
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#include <stdio.h>
23
24#include "dmusic_private.h"
25#include "wine/heap.h"
26
28
32 double freq;
34};
35
37{
39}
40
42 void **ret_iface)
43{
44 TRACE("(%p, %s, %p)\n", iface, debugstr_dmguid(riid), ret_iface);
45
46 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IReferenceClock))
47 *ret_iface = iface;
48 else {
49 WARN("no interface for %s\n", debugstr_dmguid(riid));
50 *ret_iface = NULL;
51 return E_NOINTERFACE;
52 }
53
55
56 return S_OK;
57}
58
60{
63
64 TRACE("(%p) ref = %u\n", iface, ref);
65
66 return ref;
67}
68
70{
73
74 TRACE("(%p) ref = %u\n", iface, ref);
75
76 if (!ref)
78
79 return ref;
80}
81
84{
87 HRESULT hr;
88
89 TRACE("(%p, %p)\n", iface, time);
90
92 *time = counter.QuadPart * This->freq;
93 hr = (*time == This->last_time) ? S_FALSE : S_OK;
94 This->last_time = *time;
95
96 return hr;
97}
98
101{
102 TRACE("(%p, %s, %s, %p, %p): method not implemented\n", iface, wine_dbgstr_longlong(base),
104 return E_NOTIMPL;
105}
106
109{
110 TRACE("(%p, %s, %s, %p, %p): method not implemented\n", iface, wine_dbgstr_longlong(start),
112 return E_NOTIMPL;
113}
114
116{
117 TRACE("(%p, %#x): method not implemented\n", iface, cookie);
118 return E_NOTIMPL;
119}
120
121static const IReferenceClockVtbl master_clock_vtbl = {
129};
130
132{
133 struct master_clock *obj;
135
136 TRACE("(%p)\n", clock);
137
138 if (!(obj = heap_alloc_zero(sizeof(*obj))))
139 return E_OUTOFMEMORY;
140
141 obj->IReferenceClock_iface.lpVtbl = &master_clock_vtbl;
142 obj->ref = 1;
144 obj->freq = 10000000.0 / freq.QuadPart;
145
146 *clock = &obj->IReferenceClock_iface;
147
148 return S_OK;
149}
150
151static inline IDirectMusic8Impl *impl_from_IDirectMusic8(IDirectMusic8 *iface)
152{
153 return CONTAINING_RECORD(iface, IDirectMusic8Impl, IDirectMusic8_iface);
154}
155
156/* IDirectMusic8Impl IUnknown part: */
158{
160
161 TRACE("(%p)->(%s, %p)\n", iface, debugstr_dmguid(riid), ret_iface);
162
163 if (IsEqualIID (riid, &IID_IUnknown) ||
164 IsEqualIID (riid, &IID_IDirectMusic) ||
165 IsEqualIID (riid, &IID_IDirectMusic2) ||
166 IsEqualIID (riid, &IID_IDirectMusic8))
167 {
169 *ret_iface = iface;
170 return S_OK;
171 }
172
173 *ret_iface = NULL;
174
175 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
176
177 return E_NOINTERFACE;
178}
179
181{
184
185 TRACE("(%p)->(): new ref = %u\n", This, ref);
186
187 return ref;
188}
189
191{
194
195 TRACE("(%p)->(): new ref = %u\n", This, ref);
196
197 if (!ref) {
198 IReferenceClock_Release(This->master_clock);
199 if (This->dsound)
200 IDirectSound_Release(This->dsound);
201 HeapFree(GetProcessHeap(), 0, This->system_ports);
202 HeapFree(GetProcessHeap(), 0, This->ports);
205 }
206
207 return ref;
208}
209
210/* IDirectMusic8Impl IDirectMusic part: */
212{
214
215 TRACE("(%p, %d, %p)\n", This, index, port_caps);
216
217 if (!port_caps)
218 return E_POINTER;
219
220 if (index >= This->num_system_ports)
221 return S_FALSE;
222
223 *port_caps = This->system_ports[index].caps;
224
225 return S_OK;
226}
227
229{
231
232 TRACE("(%p)->(%p, %p, %p)\n", This, buffer_desc, buffer, unkouter);
233
234 if (unkouter)
236
237 if (!buffer_desc || !buffer)
238 return E_POINTER;
239
241}
242
244{
246 int i;
247 DMUS_PORTCAPS port_caps;
248 IDirectMusicPort* new_port = NULL;
249 HRESULT hr;
250 GUID default_port;
251 const GUID *request_port = rclsid_port;
252
253 TRACE("(%p)->(%s, %p, %p, %p)\n", This, debugstr_dmguid(rclsid_port), port_params, port, unkouter);
254
255 if (!rclsid_port || !port)
256 return E_POINTER;
257 if (!port_params)
258 return E_INVALIDARG;
259 if (unkouter)
261 if (!This->dsound)
263
264 if (TRACE_ON(dmusic))
265 dump_DMUS_PORTPARAMS(port_params);
266
267 ZeroMemory(&port_caps, sizeof(DMUS_PORTCAPS));
268 port_caps.dwSize = sizeof(DMUS_PORTCAPS);
269
270 if (IsEqualGUID(request_port, &GUID_NULL)) {
271 hr = IDirectMusic8_GetDefaultPort(iface, &default_port);
272 if(FAILED(hr))
273 return hr;
274 request_port = &default_port;
275 }
276
277 for (i = 0; S_FALSE != IDirectMusic8Impl_EnumPort(iface, i, &port_caps); i++) {
278 if (IsEqualCLSID(request_port, &port_caps.guidPort)) {
279 hr = This->system_ports[i].create(This, port_params, &port_caps, &new_port);
280 if (FAILED(hr)) {
281 *port = NULL;
282 return hr;
283 }
284 This->num_ports++;
285 if (!This->ports)
286 This->ports = HeapAlloc(GetProcessHeap(), 0,
287 sizeof(*This->ports) * This->num_ports);
288 else
289 This->ports = HeapReAlloc(GetProcessHeap(), 0, This->ports,
290 sizeof(*This->ports) * This->num_ports);
291 This->ports[This->num_ports - 1] = new_port;
292 *port = new_port;
293 return S_OK;
294 }
295 }
296
297 return E_NOINTERFACE;
298}
299
300void dmusic_remove_port(IDirectMusic8Impl *dmusic, IDirectMusicPort *port)
301{
302 BOOL found = FALSE;
303 int i;
304
305 TRACE("Removing port %p.\n", port);
306
307 for (i = 0; i < dmusic->num_ports; i++)
308 {
309 if (dmusic->ports[i] == port) {
310 found = TRUE;
311 break;
312 }
313 }
314
315 if (!found)
316 {
317 ERR("Port %p not found in ports array.\n", port);
318 return;
319 }
320
321 if (!--dmusic->num_ports) {
322 HeapFree(GetProcessHeap(), 0, dmusic->ports);
323 dmusic->ports = NULL;
324 return;
325 }
326
327 memmove(&dmusic->ports[i], &dmusic->ports[i + 1],
328 (dmusic->num_ports - i) * sizeof(*dmusic->ports));
329 dmusic->ports = HeapReAlloc(GetProcessHeap(), 0, dmusic->ports,
330 sizeof(*dmusic->ports) * dmusic->num_ports);
331}
332
334{
335 TRACE("(%p)->(%d, %p)\n", iface, index, clock_info);
336
337 if (!clock_info)
338 return E_POINTER;
339
340 if (index > 1)
341 return S_FALSE;
342
343 if (!index)
344 {
345 static const GUID guid_system_clock = { 0x58d58419, 0x71b4, 0x11d1, { 0xa7, 0x4c, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12 } };
346 static const WCHAR name_system_clock[] = { 'S','y','s','t','e','m',' ','C','l','o','c','k',0 };
347
348 clock_info->ctType = 0;
349 clock_info->guidClock = guid_system_clock;
350 lstrcpyW(clock_info->wszDescription, name_system_clock);
351 }
352 else
353 {
354 static const GUID guid_dsound_clock = { 0x58d58420, 0x71b4, 0x11d1, { 0xa7, 0x4c, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12 } };
355 static const WCHAR name_dsound_clock[] = { 'D','i','r','e','c','t','S','o','u','n','d',' ','C','l','o','c','k',0 };
356
357 clock_info->ctType = 0;
358 clock_info->guidClock = guid_dsound_clock;
359 lstrcpyW(clock_info->wszDescription, name_dsound_clock);
360 }
361
362 return S_OK;
363}
364
366{
368
369 TRACE("(%p)->(%p, %p)\n", This, guid_clock, reference_clock);
370
371 if (guid_clock)
372 *guid_clock = GUID_NULL;
373 if (reference_clock) {
374 *reference_clock = This->master_clock;
375 IReferenceClock_AddRef(*reference_clock);
376 }
377
378 return S_OK;
379}
380
382{
384
385 FIXME("(%p)->(%s): stub\n", This, debugstr_dmguid(rguidClock));
386
387 return S_OK;
388}
389
391{
393 int i;
394 HRESULT hr;
395
396 TRACE("(%p)->(%u)\n", This, enable);
397
398 for (i = 0; i < This->num_ports; i++)
399 {
401 if (FAILED(hr))
402 return hr;
403 }
404
405 return S_OK;
406}
407
409{
411 HKEY hkGUID;
412 DWORD returnTypeGUID, sizeOfReturnBuffer = 50;
413 char returnBuffer[51];
414 GUID defaultPortGUID;
415 WCHAR buff[51];
416
417 TRACE("(%p)->(%p)\n", This, guid_port);
418
419 if ((RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\DirectMusic\\Defaults" , 0, KEY_READ, &hkGUID) != ERROR_SUCCESS) ||
420 (RegQueryValueExA(hkGUID, "DefaultOutputPort", NULL, &returnTypeGUID, (LPBYTE)returnBuffer, &sizeOfReturnBuffer) != ERROR_SUCCESS))
421 {
422 WARN(": registry entry missing\n" );
423 *guid_port = CLSID_DirectMusicSynth;
424 return S_OK;
425 }
426 /* FIXME: Check return types to ensure we're interpreting data right */
427 MultiByteToWideChar(CP_ACP, 0, returnBuffer, -1, buff, ARRAY_SIZE(buff));
428 CLSIDFromString(buff, &defaultPortGUID);
429 *guid_port = defaultPortGUID;
430
431 return S_OK;
432}
433
434static HRESULT WINAPI IDirectMusic8Impl_SetDirectSound(IDirectMusic8 *iface, IDirectSound *dsound,
435 HWND hwnd)
436{
438 HRESULT hr;
439 int i;
440
441 TRACE("(%p)->(%p, %p)\n", This, dsound, hwnd);
442
443 for (i = 0; i < This->num_ports; i++)
444 {
446 if (FAILED(hr))
447 return hr;
448 }
449
450 if (This->dsound)
451 IDirectSound_Release(This->dsound);
452
453 if (!dsound) {
454 hr = DirectSoundCreate8(NULL, (IDirectSound8 **)&This->dsound, NULL);
455 if (FAILED(hr))
456 return hr;
459 if (FAILED(hr)) {
460 IDirectSound_Release(This->dsound);
461 This->dsound = NULL;
462 }
463 return hr;
464 }
465
466 IDirectSound_AddRef(dsound);
467 This->dsound = dsound;
468
469 return S_OK;
470}
471
473{
475
476 FIXME("(%p)->(%p): stub\n", This, clock);
477
478 return S_OK;
479}
480
481static const IDirectMusic8Vtbl DirectMusic8_Vtbl = {
495};
496
498{
499 static const WCHAR emulated[] = {' ','[','E','m','u','l','a','t','e','d',']',0};
500 port_info * port;
501 ULONG nb_ports;
502 ULONG nb_midi_out;
503 ULONG nb_midi_in;
504 MIDIOUTCAPSW caps_out;
505 MIDIINCAPSW caps_in;
506 IDirectMusicSynth8* synth;
507 HRESULT hr;
508 ULONG i;
509
510 TRACE("(%p)\n", object);
511
512 /* NOTE:
513 - it seems some native versions get the rest of devices through dmusic32.EnumLegacyDevices...*sigh*...which is undocumented
514 - should we enum wave devices ? Native does not seem to
515 */
516
517 nb_midi_out = midiOutGetNumDevs();
518 nb_midi_in = midiInGetNumDevs();
519 nb_ports = 1 /* midi mapper */ + nb_midi_out + nb_midi_in + 1 /* synth port */;
520
521 port = object->system_ports = HeapAlloc(GetProcessHeap(), 0, nb_ports * sizeof(port_info));
522 if (!object->system_ports)
523 return;
524
525 /* Fill common port caps for all winmm ports */
526 for (i = 0; i < (nb_ports - 1 /* synth port*/); i++)
527 {
528 object->system_ports[i].caps.dwSize = sizeof(DMUS_PORTCAPS);
529 object->system_ports[i].caps.dwType = DMUS_PORT_WINMM_DRIVER;
530 object->system_ports[i].caps.dwMemorySize = 0;
531 object->system_ports[i].caps.dwMaxChannelGroups = 1;
532 object->system_ports[i].caps.dwMaxVoices = 0;
533 object->system_ports[i].caps.dwMaxAudioChannels = 0;
534 object->system_ports[i].caps.dwEffectFlags = DMUS_EFFECT_NONE;
535 /* Fake port GUID */
536 object->system_ports[i].caps.guidPort = IID_IUnknown;
537 object->system_ports[i].caps.guidPort.Data1 = i + 1;
538 }
539
540 /* Fill midi mapper port info */
541 port->device = MIDI_MAPPER;
542 port->create = midi_out_port_create;
543 midiOutGetDevCapsW(MIDI_MAPPER, &caps_out, sizeof(caps_out));
544 lstrcpyW(port->caps.wszDescription, caps_out.szPname);
545 lstrcatW(port->caps.wszDescription, emulated);
546 port->caps.dwFlags = DMUS_PC_SHAREABLE;
547 port->caps.dwClass = DMUS_PC_OUTPUTCLASS;
548 port++;
549
550 /* Fill midi out port info */
551 for (i = 0; i < nb_midi_out; i++)
552 {
553 port->device = i;
554 port->create = midi_out_port_create;
555 midiOutGetDevCapsW(i, &caps_out, sizeof(caps_out));
556 lstrcpyW(port->caps.wszDescription, caps_out.szPname);
557 lstrcatW(port->caps.wszDescription, emulated);
558 port->caps.dwFlags = DMUS_PC_SHAREABLE | DMUS_PC_EXTERNAL;
559 port->caps.dwClass = DMUS_PC_OUTPUTCLASS;
560 port++;
561 }
562
563 /* Fill midi in port info */
564 for (i = 0; i < nb_midi_in; i++)
565 {
566 port->device = i;
567 port->create = midi_in_port_create;
568 midiInGetDevCapsW(i, &caps_in, sizeof(caps_in));
569 lstrcpyW(port->caps.wszDescription, caps_in.szPname);
570 lstrcatW(port->caps.wszDescription, emulated);
571 port->caps.dwFlags = DMUS_PC_EXTERNAL;
572 port->caps.dwClass = DMUS_PC_INPUTCLASS;
573 port++;
574 }
575
576 /* Fill synth port info */
577 port->create = synth_port_create;
578 hr = CoCreateInstance(&CLSID_DirectMusicSynth, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicSynth8, (void**)&synth);
579 if (SUCCEEDED(hr))
580 {
581 port->caps.dwSize = sizeof(port->caps);
582 hr = IDirectMusicSynth8_GetPortCaps(synth, &port->caps);
584 }
585 if (FAILED(hr))
586 nb_ports--;
587
588 object->num_system_ports = nb_ports;
589}
590
591/* For ClassFactory */
593{
594 IDirectMusic8Impl *dmusic;
595 HRESULT ret;
596
597 TRACE("(%s, %p, %p)\n", debugstr_guid(riid), ret_iface, unkouter);
598
599 *ret_iface = NULL;
600 if (unkouter)
602
604 if (!dmusic)
605 return E_OUTOFMEMORY;
606
607 dmusic->IDirectMusic8_iface.lpVtbl = &DirectMusic8_Vtbl;
608 dmusic->ref = 1;
610 if (FAILED(ret)) {
611 HeapFree(GetProcessHeap(), 0, dmusic);
612 return ret;
613 }
614
616
620
621 return ret;
622}
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
#define ARRAY_SIZE(a)
Definition: main.h:24
const GUID IID_IUnknown
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT WINAPI DirectSoundCreate8(LPCGUID lpcGUID, LPDIRECTSOUND8 *ppDS, IUnknown *pUnkOuter)
Definition: directsound.c:504
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HRESULT DMUSIC_CreateDirectMusicBufferImpl(LPDMUS_BUFFERDESC desc, LPVOID *ret_iface)
Definition: buffer.c:294
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3321
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4027
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapReAlloc
Definition: compat.h:734
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
#define TRACE_ON(x)
Definition: compat.h:75
#define HeapFree(x, y, z)
Definition: compat.h:735
#define lstrcpyW
Definition: compat.h:749
#define MultiByteToWideChar
Definition: compat.h:110
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
BOOL WINAPI QueryPerformanceFrequency(OUT PLARGE_INTEGER lpFrequency)
Definition: perfcnt.c:45
BOOL WINAPI QueryPerformanceCounter(OUT PLARGE_INTEGER lpPerformanceCount)
Definition: perfcnt.c:23
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
USHORT port
Definition: uri.c:228
#define DMUS_E_DSOUND_NOT_SET
Definition: dmerror.h:94
static HRESULT WINAPI master_IReferenceClock_Unadvise(IReferenceClock *iface, DWORD cookie)
Definition: dmusic.c:115
static HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer(LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC buffer_desc, LPDIRECTMUSICBUFFER *buffer, LPUNKNOWN unkouter)
Definition: dmusic.c:228
static HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock(LPDIRECTMUSIC8 iface, DWORD index, LPDMUS_CLOCKINFO clock_info)
Definition: dmusic.c:333
static const IDirectMusic8Vtbl DirectMusic8_Vtbl
Definition: dmusic.c:481
static IDirectMusic8Impl * impl_from_IDirectMusic8(IDirectMusic8 *iface)
Definition: dmusic.c:151
static HRESULT WINAPI IDirectMusic8Impl_GetMasterClock(LPDIRECTMUSIC8 iface, LPGUID guid_clock, IReferenceClock **reference_clock)
Definition: dmusic.c:365
HRESULT WINAPI DMUSIC_CreateDirectMusicImpl(LPCGUID riid, LPVOID *ret_iface, LPUNKNOWN unkouter)
Definition: dmusic.c:592
static HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort(LPDIRECTMUSIC8 iface, LPGUID guid_port)
Definition: dmusic.c:408
static ULONG WINAPI IDirectMusic8Impl_AddRef(LPDIRECTMUSIC8 iface)
Definition: dmusic.c:180
static HRESULT WINAPI master_IReferenceClock_GetTime(IReferenceClock *iface, REFERENCE_TIME *time)
Definition: dmusic.c:82
static HRESULT WINAPI master_IReferenceClock_AdvisePeriodic(IReferenceClock *iface, REFERENCE_TIME start, REFERENCE_TIME period, HANDLE semaphore, DWORD *cookie)
Definition: dmusic.c:107
static HRESULT WINAPI IDirectMusic8Impl_SetDirectSound(IDirectMusic8 *iface, IDirectSound *dsound, HWND hwnd)
Definition: dmusic.c:434
static ULONG WINAPI master_IReferenceClock_Release(IReferenceClock *iface)
Definition: dmusic.c:69
static HRESULT WINAPI IDirectMusic8Impl_QueryInterface(LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ret_iface)
Definition: dmusic.c:157
static HRESULT WINAPI master_IReferenceClock_QueryInterface(IReferenceClock *iface, REFIID riid, void **ret_iface)
Definition: dmusic.c:41
static HRESULT WINAPI IDirectMusic8Impl_SetMasterClock(LPDIRECTMUSIC8 iface, REFGUID rguidClock)
Definition: dmusic.c:381
static ULONG WINAPI master_IReferenceClock_AddRef(IReferenceClock *iface)
Definition: dmusic.c:59
static HRESULT WINAPI IDirectMusic8Impl_Activate(LPDIRECTMUSIC8 iface, BOOL enable)
Definition: dmusic.c:390
static const IReferenceClockVtbl master_clock_vtbl
Definition: dmusic.c:121
static HRESULT WINAPI master_IReferenceClock_AdviseTime(IReferenceClock *iface, REFERENCE_TIME base, REFERENCE_TIME offset, HANDLE event, DWORD *cookie)
Definition: dmusic.c:99
static HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock(LPDIRECTMUSIC8 iface, IReferenceClock *clock)
Definition: dmusic.c:472
void dmusic_remove_port(IDirectMusic8Impl *dmusic, IDirectMusicPort *port)
Definition: dmusic.c:300
static struct master_clock * impl_from_IReferenceClock(IReferenceClock *iface)
Definition: dmusic.c:36
static HRESULT WINAPI IDirectMusic8Impl_EnumPort(LPDIRECTMUSIC8 iface, DWORD index, LPDMUS_PORTCAPS port_caps)
Definition: dmusic.c:211
static HRESULT master_clock_create(IReferenceClock **clock)
Definition: dmusic.c:131
static HRESULT WINAPI IDirectMusic8Impl_CreatePort(LPDIRECTMUSIC8 iface, REFCLSID rclsid_port, LPDMUS_PORTPARAMS port_params, LPDIRECTMUSICPORT *port, LPUNKNOWN unkouter)
Definition: dmusic.c:243
static ULONG WINAPI IDirectMusic8Impl_Release(LPDIRECTMUSIC8 iface)
Definition: dmusic.c:190
static void create_system_ports_list(IDirectMusic8Impl *object)
Definition: dmusic.c:497
void dump_DMUS_PORTPARAMS(LPDMUS_PORTPARAMS params)
Definition: dmusic_main.c:491
const char * debugstr_dmguid(const GUID *id)
Definition: dmusic_main.c:237
static void DMUSIC_UnlockModule(void)
static void DMUSIC_LockModule(void)
HRESULT midi_in_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *port_params, DMUS_PORTCAPS *port_caps, IDirectMusicPort **port) DECLSPEC_HIDDEN
Definition: port.c:1209
HRESULT midi_out_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *port_params, DMUS_PORTCAPS *port_caps, IDirectMusicPort **port) DECLSPEC_HIDDEN
Definition: port.c:1201
HRESULT synth_port_create(IDirectMusic8Impl *parent, DMUS_PORTPARAMS *port_params, DMUS_PORTCAPS *port_caps, IDirectMusicPort **port) DECLSPEC_HIDDEN
Definition: port.c:814
#define DMUS_EFFECT_NONE
Definition: dmusicc.h:172
#define IDirectMusicPort_SetDirectSound(p, a, b)
Definition: dmusicc.h:696
#define DMUS_PC_INPUTCLASS
Definition: dmusicc.h:180
struct IDirectMusicPort * LPDIRECTMUSICPORT
Definition: dmusicc.h:109
#define DMUS_PC_EXTERNAL
Definition: dmusicc.h:184
#define IReferenceClock_AddRef(p)
Definition: dmusicc.h:751
#define DMUS_PORT_WINMM_DRIVER
Definition: dmusicc.h:197
#define IDirectMusic8_Release(p)
Definition: dmusicc.h:441
#define DMUS_PC_SHAREABLE
Definition: dmusicc.h:191
#define IDirectMusic8_GetDefaultPort(p, a)
Definition: dmusicc.h:450
#define DMUS_PC_OUTPUTCLASS
Definition: dmusicc.h:181
#define IReferenceClock_Release(p)
Definition: dmusicc.h:752
struct IDirectMusic8 * LPDIRECTMUSIC8
Definition: dmusicc.h:96
struct _DMUS_PORTCAPS DMUS_PORTCAPS
Definition: dmusicc.h:268
#define IDirectMusicPort_Activate(p, a)
Definition: dmusicc.h:693
#define IDirectMusic8_AddRef(p)
Definition: dmusicc.h:440
struct IDirectMusicBuffer * LPDIRECTMUSICBUFFER
Definition: dmusicc.h:97
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
#define IDirectMusicSynth8_Release(p)
Definition: dmusics.h:171
#define IDirectMusicSynth8_GetPortCaps(p, a)
Definition: dmusics.h:180
#define IDirectSound_AddRef(p)
Definition: dsound.h:452
#define DSSCL_PRIORITY
Definition: dsound.h:248
#define IDirectSound_Release(p)
Definition: dsound.h:453
#define IDirectSound_SetCooperativeLevel(p, a, b)
Definition: dsound.h:458
static unsigned char buff[32768]
Definition: fatten.c:17
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint start
Definition: gl.h:1545
struct _cl_event * event
Definition: glext.h:7739
GLuint buffer
Definition: glext.h:5915
GLuint index
Definition: glext.h:6031
GLboolean enable
Definition: glext.h:11120
GLintptr offset
Definition: glext.h:5920
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define GUID_NULL
Definition: ks.h:106
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
__u16 time
Definition: mkdosfs.c:8
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
#define MIDI_MAPPER
Definition: mmsystem.h:253
HANDLE semaphore
Definition: loader.c:2140
static LPUNKNOWN
Definition: ndr_ole.c:49
#define KEY_READ
Definition: nt_native.h:1023
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
#define REFCLSID
Definition: guiddef.h:117
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
_Check_return_ _CRTIMP clock_t __cdecl clock(void)
Definition: clock.c:23
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
IReferenceClock * master_clock
IDirectMusicPort ** ports
IDirectMusic8 IDirectMusic8_iface
WCHAR wszDescription[DMUS_MAX_DESCRIPTION]
Definition: dmusicc.h:366
DMUS_CLOCKTYPE ctType
Definition: dmusicc.h:364
GUID guidPort
Definition: dmusicc.h:291
DWORD dwSize
Definition: dmusicc.h:289
Definition: scsiwmi.h:51
Definition: cookie.c:34
LONG ref
Definition: dmusic.c:31
double freq
Definition: dmusic.c:32
IReferenceClock IReferenceClock_iface
Definition: dmusic.c:30
REFERENCE_TIME last_time
Definition: dmusic.c:33
Definition: send.c:48
WCHAR szPname[MAXPNAMELEN]
Definition: mmsystem.h:1146
WCHAR szPname[MAXPNAMELEN]
Definition: mmsystem.h:1126
unsigned char * LPBYTE
Definition: typedefs.h:53
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
int ret
#define ZeroMemory
Definition: winbase.h:1670
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:2662
#define E_POINTER
Definition: winerror.h:2365
UINT WINAPI midiInGetNumDevs(void)
Definition: winmm.c:1187
UINT WINAPI midiOutGetNumDevs(void)
Definition: winmm.c:809
UINT WINAPI midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpCaps, UINT uSize)
Definition: winmm.c:817
UINT WINAPI midiInGetDevCapsW(UINT_PTR uDeviceID, LPMIDIINCAPSW lpCaps, UINT uSize)
Definition: winmm.c:1195
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
HWND WINAPI GetForegroundWindow(void)
Definition: ntwrapper.h:392
__wchar_t WCHAR
Definition: xmlstorage.h:180