23#include "wine/rbtree.h"
103 IDirectMusicPerformance *
performance = (IDirectMusicPerformance *)&
This->IDirectMusicPerformance8_iface;
115 switch (
message->
msg.dwFlags & delivery_flags)
137 IDirectMusicPerformance *
performance = (IDirectMusicPerformance *)&
This->IDirectMusicPerformance8_iface;
138 IDirectMusicTool *tool;
141 if (!(tool =
msg->pTool)) tool = &
This->IDirectMusicTool_iface;
165 if (&prev->
entry == &
This->messages)
break;
179 TRACE(
"performance %p message thread\n",
This);
184 while (
This->message_thread)
211 IDirectMusicPerformance8 *
performance = &
This->IDirectMusicPerformance8_iface;
212 IDirectMusicGraph *
graph = &
This->IDirectMusicGraph_iface;
219 msg->mtTime = music_time;
222 if ((
msg->punkUser =
object)) IUnknown_AddRef(
object);
234 IDirectMusicPerformance8 *
performance = &
This->IDirectMusicPerformance8_iface;
235 IDirectMusicGraph *
graph = &
This->IDirectMusicGraph_iface;
242 msg->mtTime = music_time;
245 if ((
msg->punkUser =
object)) IUnknown_AddRef(
object);
246 msg->guidNotificationType =
type;
279 DWORD block_num = channel_num / 16;
286 IDirectMusicPort *
port,
DWORD midi_group)
297 block->block_num = block_num;
319 IDirectMusicSegmentState *
state)
338 IDirectMusicSegmentState *
state)
409 IUnknown_AddRef(iface);
415 *ret_iface = &
This->IDirectMusicGraph_iface;
422 *ret_iface = &
This->IDirectMusicTool_iface;
451 This->safe.DebugInfo->Spare[0] = 0;
481 &IID_IDirectMusic8, (
void **)&
dmusic)))
495 IDirectMusicPerformance8 *
performance = &
This->IDirectMusicPerformance8_iface;
505 midi->dwFlags =
flags;
506 midi->dwPChannel =
msg->dwPChannel;
507 midi->dwVirtualTrackID =
msg->dwVirtualTrackID;
508 midi->dwVoiceID =
msg->dwVoiceID;
509 midi->dwGroupID =
msg->dwGroupID;
550 ERR(
"Failed to start performance message thread, error %lu\n",
GetLastError());
564 DWORD segment_flags,
INT64 start_time, IDirectMusicSegmentState **ret_state)
568 TRACE(
"(%p, %p, %ld, %I64d, %p)\n",
This,
segment, segment_flags, start_time, ret_state);
571 segment_flags, start_time, ret_state,
NULL,
NULL);
647 IDirectMusicPerformance *iface = (IDirectMusicPerformance *)&
This->IDirectMusicPerformance8_iface;
659 ERR(
"Failed to free message %p, hr %#lx\n",
message,
hr);
670 ERR(
"Failed to free message %p, hr %#lx\n",
message,
hr);
685 if (music_time)
FIXME(
"time parameter %lu not implemented\n", music_time);
711 ERR(
"Failed to send DMUS_NOTIFICATION_SEGABORT, hr %#lx\n",
hr);
713 ERR(
"Failed to stop segment state, hr %#lx\n",
hr);
724 ERR(
"Failed to send MIDI_SYSTEM_RESET message, hr %#lx\n",
hr);
769 TRACE(
"(%p, %ld)\n",
This, dwMilliSeconds);
770 This->dwPrepareTime = dwMilliSeconds;
778 TRACE(
"(%p, %p)\n",
This, pdwMilliSeconds);
779 if (
NULL == pdwMilliSeconds) {
782 *pdwMilliSeconds =
This->dwPrepareTime;
790 TRACE(
"(%p, %ld)\n",
This, dwMilliSeconds);
791 This->dwBumperLength = dwMilliSeconds;
799 TRACE(
"(%p, %p)\n",
This, pdwMilliSeconds);
800 if (
NULL == pdwMilliSeconds) {
803 *pdwMilliSeconds =
This->dwBumperLength;
830 msg->rtTime, &
msg->mtTime)))
837 msg->mtTime == -1 ? 0 :
msg->mtTime, &
msg->rtTime)))
858 double tempo, duration;
870 for (tempo = 120.0, duration = tempo_time = 0; music_time > 0; tempo_time +=
next)
879 if (
param.mtTime <= 0) tempo =
param.dblTempo;
884 duration += (600000000.0 * music_time) / (tempo *
DMUS_PPQ);
897 double tempo, duration, step;
912 for (tempo = 120.0, tempo_time = 0; duration > 0; tempo_time +=
next, duration -= step)
918 if (
param.mtTime <= 0) tempo =
param.dblTempo;
920 if (!
next || duration < step)
break;
921 *music_time = *music_time +
next;
924 *music_time = *music_time +
round((duration * tempo *
DMUS_PPQ) / 600000000.0);
932 IDirectMusicSegment *pSegment, IDirectMusicSegmentState *pSegState)
936 FIXME(
"(%p, %p, %p): stub\n",
This, pSegment, pSegState);
946 TRACE(
"(%p, %p, %p)\n", iface,
time, music_time);
993 if (
msg->punkUser) IUnknown_Release(
msg->punkUser);
1010 if (
This->pToolGraph) {
1021 FIXME(
"(%p, %p): to check\n",
This, pGraph);
1027 This->pToolGraph = pGraph;
1043 This->notification_timeout = minimum_time;
1044 else if (!
This->notification_timeout)
1045 This->notification_timeout = 20000000;
1083 This->notification_performance =
TRUE;
1118 IDirectMusicPerformance8 *iface = &
This->IDirectMusicPerformance8_iface;
1123 if (!ret_time) ret_time = &latency_time;
1126 hr = IReferenceClock_GetTime(latency_clock, ret_time);
1128 if (
SUCCEEDED(
hr) &&
This->latency_offset < (*ret_time - current_time))
1130 TRACE(
"Updating performance %p latency %I64d -> %I64d\n",
This,
1131 This->latency_offset, *ret_time - current_time);
1132 This->latency_offset = *ret_time - current_time;
1134 IReferenceClock_Release(latency_clock);
1137 if (
FAILED(
hr))
ERR(
"Failed to update performance %p latency, hr %#lx\n",
This,
hr);
1142 IDirectMusicPort *
port;
1162 for (
i = 0;
i <
params->dwChannelGroups;
i++)
1165 ERR(
"Failed to init channel block, hr %#lx\n",
hr);
1186 .dwChannelGroups = 1
1218 FIXME(
"(%p, %ld, %p, %ld): semi-stub\n",
This, block_num,
port, midi_group);
1242 channel_num / 16,
port, 0)))
1278 IDirectMusicDownloadedInstrument **downloaded,
DMUS_NOTERANGE *note_ranges,
1282 IDirectMusicPort *tmp_port =
NULL;
1285 TRACE(
"(%p, %p, %ld, %p, %p, %ld, %p, %p, %p)\n",
This,
instrument, port_channel, downloaded,
1286 note_ranges, note_range_count,
port,
group, music_channel);
1311 TRACE(
"(%p, %s, %ld, %ld, %ld, %p, %p)\n",
This,
debugstr_dmguid(
type),
group,
index, music_time, next_time,
param);
1313 if (next_time) *next_time = 0;
1332 FIXME(
"(%p, %s, %ld, %ld, %ld, %p): stub\n",
This,
debugstr_dmguid(rguidType), dwGroupBits, dwIndex, mtTime, pParam);
1343 if (
IsEqualGUID (rguidType, &GUID_PerfAutoDownload))
1344 memcpy(pParam, &
This->fAutoDownload,
sizeof(
This->fAutoDownload));
1345 if (
IsEqualGUID (rguidType, &GUID_PerfMasterGrooveLevel))
1346 memcpy(pParam, &
This->cMasterGrooveLevel,
sizeof(
This->cMasterGrooveLevel));
1347 if (
IsEqualGUID (rguidType, &GUID_PerfMasterTempo))
1349 if (
IsEqualGUID (rguidType, &GUID_PerfMasterVolume))
1350 memcpy(pParam, &
This->lMasterVolume,
sizeof(
This->lMasterVolume));
1362 if (
IsEqualGUID (rguidType, &GUID_PerfAutoDownload)) {
1364 TRACE(
"=> AutoDownload set to %d\n",
This->fAutoDownload);
1366 if (
IsEqualGUID (rguidType, &GUID_PerfMasterGrooveLevel)) {
1368 TRACE(
"=> MasterGrooveLevel set to %i\n",
This->cMasterGrooveLevel);
1370 if (
IsEqualGUID (rguidType, &GUID_PerfMasterTempo)) {
1372 TRACE(
"=> MasterTempo set to %f\n",
This->fMasterTempo);
1374 if (
IsEqualGUID (rguidType, &GUID_PerfMasterVolume)) {
1376 TRACE(
"=> MasterVolume set to %li\n",
This->lMasterVolume);
1391 *ret_time = current_time +
This->latency_offset;
1401 FIXME(
"(%p, %p): stub\n",
This, prtTime);
1444 ERR(
"Failed to stop segment state, hr %#lx\n",
hr);
1453 ERR(
"Failed to send MIDI_SYSTEM_RESET message, hr %#lx\n",
hr);
1458 if (
This->master_clock)
1460 IReferenceClock_Release(
This->master_clock);
1483 prtResolved, dwTimeResolveFlags);
1492 FIXME(
"(%p, %d, %p, %d, %d, %p): stub\n",
This, bMIDIValue, pChord, bPlayMode, bChordLevel, pwMusicValue);
1501 FIXME(
"(%p, %d, %p, %d, %d, %p): stub\n",
This, wMusicValue, pChord, bPlayMode, bChordLevel, pbMIDIValue);
1510 FIXME(
"(%p, %ld, %p, %p, %p, %p, %p): stub\n",
This, mtTime, pTimeSig, pwMeasure, pbBeat, pbGrid, pnOffset);
1519 FIXME(
"(%p, %d, %d, %d, %i, %p, %p): stub\n",
This, wMeasure, bBeat, bGrid, nOffset, pTimeSig, pmtTime);
1531 TRACE(
"(%p, %p, %p, %p, %lx, %lu, %lx, %p)\n",
This,
dmusic,
dsound,
hwnd, default_path_type,
1534 if (
flags)
FIXME(
"flags parameter not used\n");
1542 if (default_path_type)
1545 num_channels,
FALSE, &
This->pDefaultPath);
1571 IDirectMusicSegmentState *
state;
1576 FIXME(
"(%p, %p, %s, %p, %#lx, %I64d, %p, %p, %p): stub\n",
This,
source,
debugstr_w(segment_name),
1580 if (segment_flags)
FIXME(
"flags %#lx not implemented\n", segment_flags);
1581 if (start_time)
FIXME(
"start_time %I64d not implemented\n", start_time);
1604 ERR(
"Failed to play segment state, hr %#lx\n",
hr);
1626 FIXME(
"(%p, %p, 0x%s, %ld): stub\n",
This, pObjectToStop,
1644 if (
msg->punkUser) IUnknown_AddRef(
msg->punkUser);
1650 IUnknown *pSourceConfig,
BOOL fActivate, IDirectMusicAudioPath **ret_iface)
1653 IDirectMusicAudioPath *pPath;
1654 IDirectMusicObject *dmo;
1655 IDirectSoundBuffer *
buffer, *primary_buffer;
1662 FIXME(
"(%p, %p, %d, %p): semi-stub\n",
This, pSourceConfig, fActivate, ret_iface);
1664 if (!ret_iface || !pSourceConfig)
return E_POINTER;
1667 hr = IUnknown_QueryInterface(pSourceConfig, &IID_IDirectMusicObject, (
void **)&dmo);
1696 desc.dwFlags &= ~DSBCAPS_CTRLFX;
1697 desc.dwBufferBytes = 0;
1711 TRACE(
" returning IDirectMusicAudioPath interface at %p.\n", *ret_iface);
1718 DWORD dwType,
DWORD pchannel_count,
BOOL fActivate, IDirectMusicAudioPath **ret_iface)
1721 IDirectMusicAudioPath *pPath;
1725 IDirectSoundBuffer *
buffer, *primary_buffer;
1728 FIXME(
"(%p)->(%ld, %ld, %d, %p): semi-stub\n",
This, dwType, pchannel_count, fActivate, ret_iface);
1739 format.nSamplesPerSec = 44000;
1740 format.nAvgBytesPerSec = 44000*2;
1742 format.wBitsPerSample = 16;
1749 desc.dwReserved = 0;
1768 format.nAvgBytesPerSec *=2;
1777 params.dwChannelGroups = (pchannel_count + 15) / 16;
1788 desc.dwFlags &= ~DSBCAPS_CTRLFX;
1789 desc.dwBufferBytes = 0;
1804 TRACE(
" returning IDirectMusicAudioPath interface at %p.\n", *ret_iface);
1812 FIXME(
"(%p, %p): semi-stub\n",
This, audio_path);
1817 if ((
This->pDefaultPath = audio_path))
1827 IDirectMusicAudioPath **ret_iface)
1831 FIXME(
"(%p, %p): semi-stub (%p)\n",
This, ret_iface,
This->pDefaultPath);
1846 FIXME(
"(%p, %s, %ld, %ld, %ld, %ld, %p, %p): stub\n",
This,
debugstr_dmguid(rguidType), dwTrackID, dwGroupBits, dwIndex, mtTime, pmtNext, pParam);
1953 msg->dwFlags &= ~delivery_flags;
1957 msg->pTool = &
This->IDirectMusicTool_iface;
1964 msg->pGraph = &
This->IDirectMusicGraph_iface;
2066 switch (
msg->dwType)
2074 IDirectMusicBuffer *
buffer;
2075 IDirectMusicPort *
port;
2082 WARN(
"Failed to get message port, hr %#lx\n",
hr);
2094 if (
msg->rtTime == -1)
msg->rtTime = latency_time;
2114 WARN(
"Failed to translate message to MIDI, hr %#lx\n",
hr);
2116 if (
note->mtDuration)
2122 note->bFlags &= ~DMUS_NOTEF_NOTEON;
2129 WARN(
"Failed to translate message to MIDI, hr %#lx\n",
hr);
2139 switch (curve->
bType)
2144 WARN(
"Failed to translate message to MIDI, hr %#lx\n",
hr);
2151 FIXME(
"Unhandled curve type %#x\n", curve->
bType);
2154 WARN(
"Invalid curve type %#x\n", curve->
bType);
2167 WARN(
"Failed to translate message to MIDI, hr %#lx\n",
hr);
2171 WARN(
"Failed to translate message to MIDI, hr %#lx\n",
hr);
2175 WARN(
"Failed to translate message to MIDI, hr %#lx\n",
hr);
2186 if (
IsEqualGUID(&
notif->guidNotificationType, &GUID_NOTIFICATION_PERFORMANCE))
2195 msg->dwFlags &= ~DMUS_PMSGF_TOOL_IMMEDIATE;
2200 ERR(
"Failed to send notification message, hr %#lx\n",
hr);
2213 if (
This->notification_timeout <= 0)
break;
2214 if (
message->
msg.rtTime - previous->
msg.rtTime <=
This->notification_timeout)
break;
2225 WARN(
"Failed to play wave buffer, hr %#lx\n",
hr);
2229 msg->rtTime += 10000000;
2230 msg->dwFlags &= ~DMUS_PMSGF_MUSICTIME;
2235 ERR(
"Failed to tick segment state %p, hr %#lx\n",
msg->punkUser,
hr);
2239 ERR(
"Failed to queue tick for segment state %p, hr %#lx\n",
msg->punkUser,
hr);
2246 WARN(
"Failed to end segment state %p, hr %#lx\n",
msg->punkUser,
hr);
2250 FIXME(
"Unhandled message type %#lx\n",
msg->dwType);
2295 obj->safe.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": performance->safe");
2301 obj->latency_offset = 50;
2302 obj->dwBumperLength = 50;
2303 obj->dwPrepareTime = 1000;
HRESULT WINAPI DECLSPEC_HOTPATCH SetThreadDescription(_In_ HANDLE hThread, _In_ PCWSTR lpThreadDescription)
COMPILER_DEPENDENT_INT64 INT64
#define InterlockedIncrement
#define InterlockedDecrement
HRESULT create_dmaudiopath(REFIID riid, void **ppobj)
void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath *iface, IDirectSoundBuffer *buffer)
void set_audiopath_dsound_buffer(IDirectMusicAudioPath *iface, IDirectSoundBuffer *buffer)
HRESULT path_config_get_audio_path_params(IUnknown *iface, WAVEFORMATEX *format, DSBUFFERDESC *desc, DMUS_PORTPARAMS *params)
void set_audiopath_perf_pointer(IDirectMusicAudioPath *iface, IDirectMusicPerformance8 *performance)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
int note(char *format,...)
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
#define MIDI_CONTROL_CHANGE
HRESULT WINAPI DirectSoundCreate(LPCGUID lpcGUID, LPDIRECTSOUND *ppDS, IUnknown *pUnkOuter)
static HANDLE message_thread
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
BOOL WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD Timeout)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable)
#define DMUS_E_CANNOT_FREE
#define DMUS_E_AUDIOPATH_INACTIVE
#define DMUS_E_NO_MASTER_CLOCK
#define DMUS_E_AUDIOPATHS_IN_USE
#define DMUS_E_ALREADY_INITED
#define DMUS_E_ALREADY_SENT
HRESULT segment_state_create(IDirectMusicSegment *segment, MUSIC_TIME start_time, IDirectMusicPerformance8 *performance, IDirectMusicSegmentState **ret_iface)
HRESULT segment_state_stop(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
BOOL segment_state_has_track(IDirectMusicSegmentState *iface, DWORD track_id)
HRESULT segment_state_end_play(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
BOOL segment_state_has_segment(IDirectMusicSegmentState *iface, IDirectMusicSegment *segment)
HRESULT segment_state_tick(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
HRESULT segment_state_play(IDirectMusicSegmentState *iface, IDirectMusicPerformance8 *performance)
const char * debugstr_dmguid(const GUID *id)
#define IDirectMusicTool_ProcessPMsg(p, a, b)
#define IDirectMusicTool_AddRef(p)
#define IDirectMusicTool_Release(p)
struct _DMUS_EVENTHEADER DMUS_EVENTHEADER
#define DMUS_PORTPARAMS_CHANNELGROUPS
#define IDirectMusicPort_SetDirectSound(p, a, b)
#define IDirectMusicPort_Release(p)
#define IDirectMusic_AddRef(p)
#define IDirectMusic8_SetDirectSound(p, a, b)
#define DMUS_PORTPARAMS_AUDIOCHANNELS
#define IDirectMusic8_Release(p)
#define IDirectMusicBuffer_PackStructured(p, a, b, c)
#define IDirectMusic8_CreatePort(p, a, b, c, d)
#define IDirectMusicPort_AddRef(p)
#define IDirectMusic_GetMasterClock(p, a, b)
#define IDirectMusic_SetDirectSound(p, a, b)
#define IDirectMusic8_GetDefaultPort(p, a)
#define IDirectMusicPort_PlayBuffer(p, a)
#define IDirectMusic_CreateMusicBuffer(p, a, b, c)
#define IDirectMusicPort_DownloadInstrument(p, a, b, c, d)
#define IDirectMusicPort_Activate(p, a)
#define IDirectMusicBuffer_Release(p)
#define IDirectMusicPort_GetLatencyClock(p, a)
#define IDirectMusic8_AddRef(p)
#define IDirectMusicPerformance8_CreateStandardAudioPath(p, a, b, c, d)
#define IDirectMusicPerformance8_QueryInterface(p, a, b)
#define IDirectMusicPerformance8_ReferenceToMusicTime(p, a, b)
#define IDirectMusicPerformance_GetParam(p, a, b, c, d, e, f)
#define IDirectMusicPerformance8_FreePMsg(p, a)
#define IDirectMusicAudioPath_Activate(p, a)
#define IDirectMusicObject_Release(p)
#define DMUS_SEG_ALLTRACKS
#define DMUS_CURVET_RPNCURVE
#define DMUS_CURVET_CCCURVE
#define DMUS_NOTIFICATION_MUSICSTOPPED
@ DMUS_PMSGF_TOOL_IMMEDIATE
#define DMUS_NOTIFICATION_MUSICSTARTED
#define IDirectMusicPerformance8_AddRef(p)
#define IDirectMusicPerformance8_PlaySegmentEx(p, a, b, c, d, e, f, g, h)
#define IDirectMusicPerformance8_Release(p)
#define IDirectMusicPerformance8_AllocPMsg(p, a, b)
#define IDirectMusicPerformance_PChannelInfo(p, a, b, c, d)
#define IDirectMusicAudioPath_AddRef(p)
#define IDirectMusicPerformance8_Init(p, a, b, c)
#define IDirectMusicSegment_Release(p)
#define IDirectMusicObject_GetDescriptor(p, a)
#define IDirectMusicPerformance8_MusicToReferenceTime(p, a, b)
#define DMUS_CURVET_PBCURVE
#define IDirectMusicSegment_AddRef(p)
#define DMUS_NOTIFICATION_SEGEND
#define IDirectMusicPerformance_SendPMsg(p, a)
#define IDirectMusicPerformance8_GetTime(p, a, b)
#define DMUS_NOTIFICATION_SEGALMOSTEND
#define IDirectMusicSegmentState_Release(p)
#define IDirectMusicPerformance_GetLatencyTime(p, a)
#define IDirectMusicSegmentState_AddRef(p)
#define IDirectMusicSegment_GetParam(p, a, b, c, d, e, f)
#define DMUS_APATH_DYNAMIC_MONO
#define IDirectMusicGraph_Release(p)
#define DMUS_APATH_DYNAMIC_3D
#define DMUS_APATH_SHARED_STEREOPLUSREVERB
#define IDirectMusicPerformance_Release(p)
#define DMUS_NOTIFICATION_SEGSTART
#define DMUS_APATH_DYNAMIC_STEREO
#define IDirectMusicPerformance8_AssignPChannelBlock(p, a, b, c)
#define IDirectMusicPerformance8_SendPMsg(p, a)
#define IDirectMusicPerformance_CloseDown(p)
#define IDirectMusicAudioPath_Release(p)
#define IDirectMusicPerformance_FreePMsg(p, a)
#define DMUS_NOTIFICATION_SEGABORT
#define IDirectMusicGraph_StampPMsg(p, a)
#define IDirectMusicGraph_AddRef(p)
#define DMUS_CURVET_PATCURVE
#define DMUS_CURVET_MATCURVE
#define DMUS_CURVET_NRPNCURVE
@ DMUS_PMSGT_NOTIFICATION
#define DSBCAPS_GLOBALFOCUS
#define DSBCAPS_CTRLVOLUME
#define DSBCAPS_MUTE3DATMAXDISTANCE
#define IDirectSound_AddRef(p)
#define DSBCAPS_CTRLFREQUENCY
#define IDirectSoundBuffer_Play(p, a, b, c)
#define IDirectSound_Release(p)
#define IDirectSound_SetCooperativeLevel(p, a, b)
#define IDirectSound_CreateSoundBuffer(p, a, b, c)
#define IDirectSoundBuffer_Release(p)
#define DSBCAPS_PRIMARYBUFFER
GLuint GLuint GLsizei GLenum type
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
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
#define MIDI_PROGRAM_CHANGE
#define memcpy(s1, s2, n)
static IMMNotificationClient notif
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
D3D11_SHADER_VARIABLE_DESC desc
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualCLSID(rclsid1, rclsid2)
HWND WINAPI GetForegroundWindow(void)
static unsigned __int64 next
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
#define LIST_FOR_EACH_ENTRY_REV(elem, list, type, field)
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
#define WINE_RB_ENTRY_VALUE
DMUS_PMSG_PART BYTE bStatus
DMUS_PMSG_PART BYTE byInstrument
struct wine_rb_entry entry
struct channel channels[16]
IDirectMusicSegmentState * state
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define CONTAINING_RECORD(address, type, field)
DWORD WINAPI GetLastError(void)
HANDLE WINAPI GetCurrentThread(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
static unsigned int block