ReactOS 0.4.17-dev-966-gf06eace
dmusic_main.c File Reference
#include <stdio.h>
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winnt.h"
#include "wingdi.h"
#include "winuser.h"
#include "winreg.h"
#include "objbase.h"
#include "rpcproxy.h"
#include "initguid.h"
#include "dmusici.h"
#include "dmusic_private.h"
Include dependency graph for dmusic_main.c:

Go to the source code of this file.

Classes

struct  IClassFactoryImpl
 

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmusic)
 
static IClassFactoryImpl * impl_from_IClassFactory (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_QueryInterface (IClassFactory *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI ClassFactory_AddRef (IClassFactory *iface)
 
static ULONG WINAPI ClassFactory_Release (IClassFactory *iface)
 
static HRESULT WINAPI ClassFactory_CreateInstance (IClassFactory *iface, IUnknown *unk_outer, REFIID riid, void **ret_iface)
 
static HRESULT WINAPI ClassFactory_LockServer (IClassFactory *iface, BOOL dolock)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID riid, LPVOID *ppv)
 
DWORD MIDILOCALE2Patch (const MIDILOCALE *pLocale)
 
void Patch2MIDILOCALE (DWORD dwPatch, LPMIDILOCALE pLocale)
 
static const char * debugstr_flags (DWORD flags, const flag_info *names, size_t num_names)
 
static const char * debugstr_DMUS_PORTPARAMS_FLAGS (DWORD flagmask)
 
void dump_DMUS_PORTPARAMS (LPDMUS_PORTPARAMS params)
 

Variables

static const IClassFactoryVtbl classfactory_vtbl
 
static IClassFactoryImpl DirectMusic_CF = {{&classfactory_vtbl}, music_create}
 
static IClassFactoryImpl Collection_CF = {{&classfactory_vtbl}, collection_create}
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 24 of file dmusic_main.c.

Function Documentation

◆ ClassFactory_AddRef()

static ULONG WINAPI ClassFactory_AddRef ( IClassFactory *  iface)
static

Definition at line 74 of file dmusic_main.c.

75{
76 return 2; /* non-heap based object */
77}

◆ ClassFactory_CreateInstance()

static HRESULT WINAPI ClassFactory_CreateInstance ( IClassFactory *  iface,
IUnknown *  unk_outer,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 84 of file dmusic_main.c.

85{
88 HRESULT hr;
89
90 TRACE("(%p, %s, %p)\n", unk_outer, debugstr_dmguid(riid), ret_iface);
91
92 *ret_iface = NULL;
93 if (unk_outer) return CLASS_E_NOAGGREGATION;
94 if (SUCCEEDED(hr = This->create_instance(&object)))
95 {
96 hr = IUnknown_QueryInterface(object, riid, ret_iface);
97 IUnknown_Release(object);
98 }
99
100 return hr;
101}
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: dmusic_main.c:49
REFIID riid
Definition: atlbase.h:39
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define TRACE(s)
Definition: solgame.cpp:4
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771

◆ ClassFactory_LockServer()

static HRESULT WINAPI ClassFactory_LockServer ( IClassFactory *  iface,
BOOL  dolock 
)
static

Definition at line 103 of file dmusic_main.c.

104{
105 TRACE("(%d)\n", dolock);
106 return S_OK;
107}
#define S_OK
Definition: intsafe.h:52

◆ ClassFactory_QueryInterface()

static HRESULT WINAPI ClassFactory_QueryInterface ( IClassFactory *  iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 54 of file dmusic_main.c.

55{
56 if (ppv == NULL)
57 return E_POINTER;
58
60 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
62 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
63 else {
64 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
65 *ppv = NULL;
66 return E_NOINTERFACE;
67 }
68
69 *ppv = iface;
70 IUnknown_AddRef((IUnknown*)*ppv);
71 return S_OK;
72}
#define FIXME(fmt,...)
Definition: precomp.h:53
const GUID IID_IUnknown
const GUID IID_IClassFactory
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480

◆ ClassFactory_Release()

static ULONG WINAPI ClassFactory_Release ( IClassFactory *  iface)
static

Definition at line 79 of file dmusic_main.c.

80{
81 return 1; /* non-heap based object */
82}

◆ debugstr_DMUS_PORTPARAMS_FLAGS()

static const char * debugstr_DMUS_PORTPARAMS_FLAGS ( DWORD  flagmask)
static

Definition at line 189 of file dmusic_main.c.

190{
191 static const flag_info flags[] = {
198 };
199 return debugstr_flags(flagmask, flags, ARRAY_SIZE(flags));
200}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FE(x)
static const char * debugstr_flags(DWORD flags, const flag_info *names, size_t num_names)
Definition: dmusic_main.c:169
#define DMUS_PORTPARAMS_CHANNELGROUPS
Definition: dmusicc.h:206
#define DMUS_PORTPARAMS_SAMPLERATE
Definition: dmusicc.h:208
#define DMUS_PORTPARAMS_AUDIOCHANNELS
Definition: dmusicc.h:207
#define DMUS_PORTPARAMS_SHARE
Definition: dmusicc.h:210
#define DMUS_PORTPARAMS_VOICES
Definition: dmusicc.h:205
#define DMUS_PORTPARAMS_EFFECTS
Definition: dmusicc.h:209
GLbitfield flags
Definition: glext.h:7161

Referenced by dump_DMUS_PORTPARAMS().

◆ debugstr_flags()

static const char * debugstr_flags ( DWORD  flags,
const flag_info *  names,
size_t  num_names 
)
static

Definition at line 169 of file dmusic_main.c.

169 {
170 char buffer[128] = "", *ptr = &buffer[0];
171 unsigned int i;
172 int size = sizeof(buffer);
173
174 for (i=0; i < num_names; i++)
175 {
176 if ((flags & names[i].val) || /* standard flag*/
177 ((!flags) && (!names[i].val))) { /* zero value only */
178 int cnt = snprintf(ptr, size, "%s ", names[i].name);
179 if (cnt < 0 || cnt >= size) break;
180 size -= cnt;
181 ptr += cnt;
182 }
183 }
184
185 return wine_dbg_sprintf("%s", buffer);
186}
const char * wine_dbg_sprintf(const char *format,...)
Definition: compat.c:296
GLuint GLuint * names
Definition: glext.h:11545
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLuint GLfloat * val
Definition: glext.h:7180
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
static PVOID ptr
Definition: dispmode.c:27
Definition: name.c:39
_In_ size_t cnt
Definition: wcstombs.cpp:43
#define snprintf
Definition: wintirpc.h:48

Referenced by debugstr_DMUS_PORTPARAMS_FLAGS().

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  riid,
LPVOID *  ppv 
)

Definition at line 127 of file dmusic_main.c.

128{
129 TRACE("(%s, %s, %p)\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
130 if (IsEqualCLSID (rclsid, &CLSID_DirectMusic) && IsEqualIID (riid, &IID_IClassFactory)) {
132 IClassFactory_AddRef((IClassFactory*)*ppv);
133 return S_OK;
134 } else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicCollection) && IsEqualIID (riid, &IID_IClassFactory)) {
135 *ppv = &Collection_CF;
136 IClassFactory_AddRef((IClassFactory*)*ppv);
137 return S_OK;
138 }
139
140 WARN("(%s, %s, %p): no interface found.\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
142}
#define WARN(fmt,...)
Definition: precomp.h:61
static IClassFactoryImpl Collection_CF
Definition: dmusic_main.c:118
static IClassFactoryImpl DirectMusic_CF
Definition: dmusic_main.c:117
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

◆ dump_DMUS_PORTPARAMS()

void dump_DMUS_PORTPARAMS ( LPDMUS_PORTPARAMS  params)

Definition at line 203 of file dmusic_main.c.

204{
205 TRACE("DMUS_PORTPARAMS (%p):\n", params);
206 TRACE(" - dwSize = %ld\n", params->dwSize);
207 TRACE(" - dwValidParams = %s\n", debugstr_DMUS_PORTPARAMS_FLAGS(params->dwValidParams));
208 if (params->dwValidParams & DMUS_PORTPARAMS_VOICES) TRACE(" - dwVoices = %lu\n", params->dwVoices);
209 if (params->dwValidParams & DMUS_PORTPARAMS_CHANNELGROUPS) TRACE(" - dwChannelGroup = %lu\n", params->dwChannelGroups);
210 if (params->dwValidParams & DMUS_PORTPARAMS_AUDIOCHANNELS) TRACE(" - dwAudioChannels = %lu\n", params->dwAudioChannels);
211 if (params->dwValidParams & DMUS_PORTPARAMS_SAMPLERATE) TRACE(" - dwSampleRate = %lu\n", params->dwSampleRate);
212 if (params->dwValidParams & DMUS_PORTPARAMS_EFFECTS) TRACE(" - dwEffectFlags = %lx\n", params->dwEffectFlags);
213 if (params->dwValidParams & DMUS_PORTPARAMS_SHARE) TRACE(" - fShare = %u\n", params->fShare);
214}
static const char * debugstr_DMUS_PORTPARAMS_FLAGS(DWORD flagmask)
Definition: dmusic_main.c:189
GLenum const GLfloat * params
Definition: glext.h:5645

Referenced by IDirectMusic8Impl_CreatePort().

◆ impl_from_IClassFactory()

static IClassFactoryImpl * impl_from_IClassFactory ( IClassFactory *  iface)
inlinestatic

Definition at line 49 of file dmusic_main.c.

50{
51 return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface);
52}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by ClassFactory_CreateInstance().

◆ MIDILOCALE2Patch()

DWORD MIDILOCALE2Patch ( const MIDILOCALE *  pLocale)

Definition at line 150 of file dmusic_main.c.

150 {
151 DWORD dwPatch = 0;
152 if (!pLocale) return 0;
153 dwPatch |= (pLocale->ulBank & F_INSTRUMENT_DRUMS); /* set drum bit */
154 dwPatch |= ((pLocale->ulBank & 0x00007F7F) << 8); /* set MIDI bank location */
155 dwPatch |= (pLocale->ulInstrument & 0x0000007F); /* set PC value */
156 return dwPatch;
157}
#define F_INSTRUMENT_DRUMS
Definition: dls1.h:51
unsigned long DWORD
Definition: ntddk_ex.h:95
ULONG ulInstrument
Definition: dls1.h:97
ULONG ulBank
Definition: dls1.h:96

Referenced by instrument_create_from_chunk(), instrument_create_from_soundfont(), instrument_download_to_port(), and instrument_GetPatch().

◆ Patch2MIDILOCALE()

void Patch2MIDILOCALE ( DWORD  dwPatch,
LPMIDILOCALE  pLocale 
)

Definition at line 160 of file dmusic_main.c.

160 {
161 memset (pLocale, 0, sizeof(MIDILOCALE));
162
163 pLocale->ulInstrument = (dwPatch & 0x7F); /* get PC value */
164 pLocale->ulBank = ((dwPatch & 0x007F7F00) >> 8); /* get MIDI bank location */
165 pLocale->ulBank |= (dwPatch & F_INSTRUMENT_DRUMS); /* get drum bit */
166}
#define memset(x, y, z)
Definition: compat.h:39

Referenced by instrument_SetPatch().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dmusic  )

Variable Documentation

◆ classfactory_vtbl

const IClassFactoryVtbl classfactory_vtbl
static
Initial value:
= {
}
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: dmusic_main.c:103
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: dmusic_main.c:79
static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *unk_outer, REFIID riid, void **ret_iface)
Definition: dmusic_main.c:84
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: dmusic_main.c:54
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: dmusic_main.c:74

Definition at line 109 of file dmusic_main.c.

◆ Collection_CF

Definition at line 118 of file dmusic_main.c.

Referenced by DllGetClassObject().

◆ DirectMusic_CF

IClassFactoryImpl DirectMusic_CF = {{&classfactory_vtbl}, music_create}
static

Definition at line 117 of file dmusic_main.c.

Referenced by DllGetClassObject().