Author: akhaldi
Date: Fri Sep 26 09:19:09 2014
New Revision: 64300
URL:
http://svn.reactos.org/svn/reactos?rev=64300&view=rev
Log:
[DMUSIC]
* Sync with Wine 1.7.27.
CORE-8540
Added:
trunk/reactos/dll/directx/wine/dmusic/dmobject.c (with props)
trunk/reactos/dll/directx/wine/dmusic/dmobject.h (with props)
Modified:
trunk/reactos/dll/directx/wine/dmusic/CMakeLists.txt
trunk/reactos/dll/directx/wine/dmusic/buffer.c
trunk/reactos/dll/directx/wine/dmusic/clock.c
trunk/reactos/dll/directx/wine/dmusic/collection.c
trunk/reactos/dll/directx/wine/dmusic/dmusic.c
trunk/reactos/dll/directx/wine/dmusic/dmusic_private.h
trunk/reactos/dll/directx/wine/dmusic/download.c
trunk/reactos/dll/directx/wine/dmusic/instrument.c
trunk/reactos/dll/directx/wine/dmusic/port.c
trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/directx/wine/dmusic/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/CM…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/CMakeLists.txt [iso-8859-1] Fri Sep 26 09:19:09
2014
@@ -7,6 +7,7 @@
buffer.c
clock.c
collection.c
+ dmobject.c
dmusic.c
dmusic_main.c
download.c
Modified: trunk/reactos/dll/directx/wine/dmusic/buffer.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/bu…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/buffer.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/buffer.c [iso-8859-1] Fri Sep 26 09:19:09 2014
@@ -55,8 +55,6 @@
TRACE("(%p)->(): new ref = %u\n", iface, ref);
- DMUSIC_LockModule();
-
return ref;
}
@@ -70,9 +68,8 @@
if (!ref) {
HeapFree(GetProcessHeap(), 0, This->data);
HeapFree(GetProcessHeap(), 0, This);
+ DMUSIC_UnlockModule();
}
-
- DMUSIC_UnlockModule();
return ref;
}
@@ -277,7 +274,6 @@
HRESULT DMUSIC_CreateDirectMusicBufferImpl(LPDMUS_BUFFERDESC desc, LPVOID* ret_iface)
{
IDirectMusicBufferImpl* dmbuffer;
- HRESULT hr;
TRACE("(%p, %p)\n", desc, ret_iface);
@@ -288,7 +284,7 @@
return E_OUTOFMEMORY;
dmbuffer->IDirectMusicBuffer_iface.lpVtbl = &DirectMusicBuffer_Vtbl;
- dmbuffer->ref = 0; /* Will be inited by QueryInterface */
+ dmbuffer->ref = 1;
if (IsEqualGUID(&desc->guidBufferFormat, &GUID_NULL))
dmbuffer->format = KSDATAFORMAT_SUBTYPE_MIDI;
@@ -302,12 +298,8 @@
return E_OUTOFMEMORY;
}
- hr = IDirectMusicBufferImpl_QueryInterface((LPDIRECTMUSICBUFFER)dmbuffer,
&IID_IDirectMusicBuffer, ret_iface);
- if (FAILED(hr))
- {
- HeapFree(GetProcessHeap(), 0, dmbuffer->data);
- HeapFree(GetProcessHeap(), 0, dmbuffer);
- }
-
- return hr;
-}
+ DMUSIC_LockModule();
+ *ret_iface = &dmbuffer->IDirectMusicBuffer_iface;
+
+ return S_OK;
+}
Modified: trunk/reactos/dll/directx/wine/dmusic/clock.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/cl…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/clock.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/clock.c [iso-8859-1] Fri Sep 26 09:19:09 2014
@@ -48,8 +48,6 @@
TRACE("(%p)->(): new ref = %u\n", This, ref);
- DMUSIC_LockModule();
-
return ref;
}
@@ -60,10 +58,10 @@
TRACE("(%p)->(): new ref = %u\n", This, ref);
- if (!ref)
+ if (!ref) {
HeapFree(GetProcessHeap(), 0, This);
-
- DMUSIC_UnlockModule();
+ DMUSIC_UnlockModule();
+ }
return ref;
}
@@ -121,6 +119,7 @@
HRESULT DMUSIC_CreateReferenceClockImpl(LPCGUID riid, LPVOID* ret_iface, LPUNKNOWN
unkouter)
{
IReferenceClockImpl* clock;
+ HRESULT hr;
TRACE("(%p,%p,%p)\n", riid, ret_iface, unkouter);
@@ -131,9 +130,13 @@
}
clock->IReferenceClock_iface.lpVtbl = &ReferenceClock_Vtbl;
- clock->ref = 0; /* Will be inited by QueryInterface */
+ clock->ref = 1;
clock->rtTime = 0;
clock->pClockInfo.dwSize = sizeof (DMUS_CLOCKINFO);
- return IReferenceClockImpl_QueryInterface((IReferenceClock*)clock, riid, ret_iface);
+ DMUSIC_LockModule();
+ hr = IReferenceClockImpl_QueryInterface(&clock->IReferenceClock_iface, riid,
ret_iface);
+ IReferenceClockImpl_Release(&clock->IReferenceClock_iface);
+
+ return hr;
}
Modified: trunk/reactos/dll/directx/wine/dmusic/collection.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/co…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/collection.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/collection.c [iso-8859-1] Fri Sep 26 09:19:09
2014
@@ -24,26 +24,44 @@
WINE_DECLARE_DEBUG_CHANNEL(dmfile);
-static inline IDirectMusicCollectionImpl
*impl_from_IDirectMusicCollection(IDirectMusicCollection *iface)
-{
- return CONTAINING_RECORD(iface, IDirectMusicCollectionImpl,
IDirectMusicCollection_iface);
-}
-
-static inline IDirectMusicCollectionImpl *impl_from_IDirectMusicObject(IDirectMusicObject
*iface)
-{
- return CONTAINING_RECORD(iface, IDirectMusicCollectionImpl,
IDirectMusicObject_iface);
-}
-
-static inline IDirectMusicCollectionImpl *impl_from_IPersistStream(IPersistStream
*iface)
-{
- return CONTAINING_RECORD(iface, IDirectMusicCollectionImpl, IPersistStream_iface);
-}
-
/*****************************************************************************
* IDirectMusicCollectionImpl implementation
*/
+typedef struct IDirectMusicCollectionImpl {
+ IDirectMusicCollection IDirectMusicCollection_iface;
+ struct dmobject dmobj;
+ LONG ref;
+ /* IDirectMusicCollectionImpl fields */
+ IStream *pStm; /* stream from which we load collection and later instruments */
+ LARGE_INTEGER liCollectionPosition; /* offset in a stream where collection was loaded
from */
+ LARGE_INTEGER liWavePoolTablePosition; /* offset in a stream where wave pool table
can be found */
+ CHAR *szCopyright; /* FIXME: should probably be placed somewhere else */
+ DLSHEADER *pHeader;
+ /* pool table */
+ POOLTABLE *pPoolTable;
+ POOLCUE *pPoolCues;
+ /* instruments */
+ struct list Instruments;
+} IDirectMusicCollectionImpl;
+
+static inline IDirectMusicCollectionImpl
*impl_from_IDirectMusicCollection(IDirectMusicCollection *iface)
+{
+ return CONTAINING_RECORD(iface, IDirectMusicCollectionImpl,
IDirectMusicCollection_iface);
+}
+
+static inline struct dmobject *impl_from_IDirectMusicObject(IDirectMusicObject *iface)
+{
+ return CONTAINING_RECORD(iface, struct dmobject, IDirectMusicObject_iface);
+}
+
+static inline IDirectMusicCollectionImpl *impl_from_IPersistStream(IPersistStream
*iface)
+{
+ return CONTAINING_RECORD(iface, IDirectMusicCollectionImpl,
dmobj.IPersistStream_iface);
+}
+
/* IDirectMusicCollectionImpl IUnknown part: */
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicCollection_QueryInterface(LPDIRECTMUSICCOLLECTION
iface, REFIID riid, LPVOID *ret_iface)
+static HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface(IDirectMusicCollection
*iface,
+ REFIID riid, void **ret_iface)
{
IDirectMusicCollectionImpl *This = impl_from_IDirectMusicCollection(iface);
@@ -54,9 +72,9 @@
if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid,
&IID_IDirectMusicCollection))
*ret_iface = iface;
else if (IsEqualIID(riid, &IID_IDirectMusicObject))
- *ret_iface = &This->IDirectMusicObject_iface;
+ *ret_iface = &This->dmobj.IDirectMusicObject_iface;
else if (IsEqualIID(riid, &IID_IPersistStream))
- *ret_iface = &This->IPersistStream_iface;
+ *ret_iface = &This->dmobj.IPersistStream_iface;
else
{
WARN("(%p/%p)->(%s, %p): not found\n", iface, This,
debugstr_dmguid(riid), ret_iface);
@@ -67,35 +85,34 @@
return S_OK;
}
-static ULONG WINAPI
IDirectMusicCollectionImpl_IDirectMusicCollection_AddRef(LPDIRECTMUSICCOLLECTION iface)
+static ULONG WINAPI IDirectMusicCollectionImpl_AddRef(IDirectMusicCollection *iface)
{
IDirectMusicCollectionImpl *This = impl_from_IDirectMusicCollection(iface);
ULONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p/%p)->(): new ref = %u\n", iface, This, ref);
- DMUSIC_LockModule();
-
return ref;
}
-static ULONG WINAPI
IDirectMusicCollectionImpl_IDirectMusicCollection_Release(LPDIRECTMUSICCOLLECTION iface)
+static ULONG WINAPI IDirectMusicCollectionImpl_Release(IDirectMusicCollection *iface)
{
IDirectMusicCollectionImpl *This = impl_from_IDirectMusicCollection(iface);
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p/%p)->(): new ref = %u\n", iface, This, ref);
- if (!ref)
+ if (!ref) {
HeapFree(GetProcessHeap(), 0, This);
-
- DMUSIC_UnlockModule();
+ DMUSIC_UnlockModule();
+ }
return ref;
}
/* IDirectMusicCollection Interface follows: */
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicCollection_GetInstrument(LPDIRECTMUSICCOLLECTION
iface, DWORD patch, IDirectMusicInstrument** instrument)
+static HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument(IDirectMusicCollection
*iface,
+ DWORD patch, IDirectMusicInstrument **instrument)
{
IDirectMusicCollectionImpl *This = impl_from_IDirectMusicCollection(iface);
DMUS_PRIVATE_INSTRUMENTENTRY *inst_entry;
@@ -121,7 +138,8 @@
return DMUS_E_INVALIDPATCH;
}
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicCollection_EnumInstrument(LPDIRECTMUSICCOLLECTION
iface, DWORD index, DWORD* patch, LPWSTR name, DWORD name_length)
+static HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument(IDirectMusicCollection
*iface,
+ DWORD index, DWORD *patch, LPWSTR name, DWORD name_length)
{
IDirectMusicCollectionImpl *This = impl_from_IDirectMusicCollection(iface);
DWORD i = 0;
@@ -150,96 +168,14 @@
}
static const IDirectMusicCollectionVtbl DirectMusicCollection_Collection_Vtbl = {
- IDirectMusicCollectionImpl_IDirectMusicCollection_QueryInterface,
- IDirectMusicCollectionImpl_IDirectMusicCollection_AddRef,
- IDirectMusicCollectionImpl_IDirectMusicCollection_Release,
- IDirectMusicCollectionImpl_IDirectMusicCollection_GetInstrument,
- IDirectMusicCollectionImpl_IDirectMusicCollection_EnumInstrument
+ IDirectMusicCollectionImpl_QueryInterface,
+ IDirectMusicCollectionImpl_AddRef,
+ IDirectMusicCollectionImpl_Release,
+ IDirectMusicCollectionImpl_GetInstrument,
+ IDirectMusicCollectionImpl_EnumInstrument
};
/* IDirectMusicCollectionImpl IDirectMusicObject part: */
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicObject_QueryInterface(LPDIRECTMUSICOBJECT iface,
REFIID riid, LPVOID *ret_iface)
-{
- IDirectMusicCollectionImpl *This = impl_from_IDirectMusicObject(iface);
- return
IDirectMusicCollection_QueryInterface(&This->IDirectMusicCollection_iface, riid,
ret_iface);
-}
-
-static ULONG WINAPI
IDirectMusicCollectionImpl_IDirectMusicObject_AddRef(LPDIRECTMUSICOBJECT iface)
-{
- IDirectMusicCollectionImpl *This = impl_from_IDirectMusicObject(iface);
- return IDirectMusicCollection_AddRef(&This->IDirectMusicCollection_iface);
-}
-
-static ULONG WINAPI
IDirectMusicCollectionImpl_IDirectMusicObject_Release(LPDIRECTMUSICOBJECT iface)
-{
- IDirectMusicCollectionImpl *This = impl_from_IDirectMusicObject(iface);
- return IDirectMusicCollection_Release(&This->IDirectMusicCollection_iface);
-}
-
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicObject_GetDescriptor(LPDIRECTMUSICOBJECT iface,
LPDMUS_OBJECTDESC pDesc)
-{
- IDirectMusicCollectionImpl *This = impl_from_IDirectMusicObject(iface);
-
- TRACE("(%p/%p)->(%p)\n", iface, This, pDesc);
-
- if (!pDesc)
- return E_POINTER;
-
- memcpy (pDesc, This->pDesc, This->pDesc->dwSize);
-
- return S_OK;
-}
-
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicObject_SetDescriptor(LPDIRECTMUSICOBJECT iface,
LPDMUS_OBJECTDESC pDesc)
-{
- IDirectMusicCollectionImpl *This = impl_from_IDirectMusicObject(iface);
- HRESULT ret = S_OK;
-
-
- TRACE("(%p, %p)\n", iface, pDesc);
-
- if (!pDesc)
- return E_POINTER;
-
- if (TRACE_ON(dmusic))
- {
- TRACE("Setting descriptor:\n");
- dump_DMUS_OBJECTDESC(pDesc);
- }
-
- /* According to MSDN, we should copy only given values, not whole struct */
- if (pDesc->dwValidData & DMUS_OBJ_OBJECT)
- This->pDesc->guidObject = pDesc->guidObject;
- if (pDesc->dwValidData & DMUS_OBJ_CLASS)
- {
- pDesc->dwValidData &= ~DMUS_OBJ_CLASS;
- ret = S_FALSE;
- }
- if (pDesc->dwValidData & DMUS_OBJ_NAME)
- lstrcpynW(This->pDesc->wszName, pDesc->wszName, DMUS_MAX_NAME);
- if (pDesc->dwValidData & DMUS_OBJ_CATEGORY)
- lstrcpynW(This->pDesc->wszCategory, pDesc->wszCategory,
DMUS_MAX_CATEGORY);
- if (pDesc->dwValidData & DMUS_OBJ_FILENAME)
- lstrcpynW(This->pDesc->wszFileName, pDesc->wszFileName,
DMUS_MAX_FILENAME);
- if (pDesc->dwValidData & DMUS_OBJ_VERSION)
- This->pDesc->vVersion = pDesc->vVersion;
- if (pDesc->dwValidData & DMUS_OBJ_DATE)
- This->pDesc->ftDate = pDesc->ftDate;
- if (pDesc->dwValidData & DMUS_OBJ_MEMORY) {
- This->pDesc->llMemLength = pDesc->llMemLength;
- memcpy (This->pDesc->pbMemData, pDesc->pbMemData, pDesc->llMemLength);
- }
- if (pDesc->dwValidData & DMUS_OBJ_STREAM) {
- /* according to MSDN, we copy the stream */
- IStream_Clone (pDesc->pStream, &This->pDesc->pStream);
- }
-
- /* add new flags */
- This->pDesc->dwValidData |= pDesc->dwValidData;
-
- return ret;
-}
-
static HRESULT read_from_stream(IStream *stream, void *data, ULONG size)
{
ULONG read;
@@ -258,9 +194,10 @@
return S_OK;
}
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IDirectMusicObject_ParseDescriptor(LPDIRECTMUSICOBJECT iface,
LPSTREAM stream, LPDMUS_OBJECTDESC desc)
-{
- IDirectMusicCollectionImpl *This = impl_from_IDirectMusicObject(iface);
+static HRESULT WINAPI IDirectMusicObjectImpl_ParseDescriptor(IDirectMusicObject *iface,
+ IStream *stream, DMUS_OBJECTDESC *desc)
+{
+ struct dmobject *This = impl_from_IDirectMusicObject(iface);
DMUS_PRIVATE_CHUNK chunk;
DWORD StreamSize, StreamCount, ListSize[1], ListCount[1];
LARGE_INTEGER liMove; /* used when skipping chunks */
@@ -270,7 +207,7 @@
/* FIXME: should this be determined from stream? */
desc->dwValidData |= DMUS_OBJ_CLASS;
- desc->guidClass = This->pDesc->guidClass;
+ desc->guidClass = This->desc.guidClass;
hr = read_from_stream(stream, &chunk, sizeof(FOURCC) + sizeof(DWORD));
if (FAILED(hr))
@@ -446,45 +383,18 @@
return S_OK;
}
-static const IDirectMusicObjectVtbl DirectMusicCollection_Object_Vtbl = {
- IDirectMusicCollectionImpl_IDirectMusicObject_QueryInterface,
- IDirectMusicCollectionImpl_IDirectMusicObject_AddRef,
- IDirectMusicCollectionImpl_IDirectMusicObject_Release,
- IDirectMusicCollectionImpl_IDirectMusicObject_GetDescriptor,
- IDirectMusicCollectionImpl_IDirectMusicObject_SetDescriptor,
- IDirectMusicCollectionImpl_IDirectMusicObject_ParseDescriptor
+static const IDirectMusicObjectVtbl dmobject_vtbl = {
+ dmobj_IDirectMusicObject_QueryInterface,
+ dmobj_IDirectMusicObject_AddRef,
+ dmobj_IDirectMusicObject_Release,
+ dmobj_IDirectMusicObject_GetDescriptor,
+ dmobj_IDirectMusicObject_SetDescriptor,
+ IDirectMusicObjectImpl_ParseDescriptor
};
/* IDirectMusicCollectionImpl IPersistStream part: */
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IPersistStream_QueryInterface(LPPERSISTSTREAM iface, REFIID
riid, LPVOID *ret_iface)
-{
- IDirectMusicCollectionImpl *This = impl_from_IPersistStream(iface);
- return
IDirectMusicCollection_QueryInterface(&This->IDirectMusicCollection_iface, riid,
ret_iface);
-}
-
-static ULONG WINAPI IDirectMusicCollectionImpl_IPersistStream_AddRef (LPPERSISTSTREAM
iface)
-{
- IDirectMusicCollectionImpl *This = impl_from_IPersistStream(iface);
- return IDirectMusicCollection_AddRef(&This->IDirectMusicCollection_iface);
-}
-
-static ULONG WINAPI IDirectMusicCollectionImpl_IPersistStream_Release (LPPERSISTSTREAM
iface)
-{
- IDirectMusicCollectionImpl *This = impl_from_IPersistStream(iface);
- return IDirectMusicCollection_Release(&This->IDirectMusicCollection_iface);
-}
-
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IPersistStream_GetClassID(LPPERSISTSTREAM iface, CLSID*
pClassID)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_IsDirty(LPPERSISTSTREAM
iface)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_Load(LPPERSISTSTREAM
iface, IStream* stream)
+static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface,
+ IStream *stream)
{
IDirectMusicCollectionImpl *This = impl_from_IPersistStream(iface);
DMUS_PRIVATE_CHUNK chunk;
@@ -534,14 +444,14 @@
}
case FOURCC_DLID: {
TRACE_(dmfile)(": DLID (GUID) chunk\n");
- This->pDesc->dwValidData |= DMUS_OBJ_OBJECT;
- IStream_Read(stream, &This->pDesc->guidObject, chunk.dwSize,
NULL);
+ This->dmobj.desc.dwValidData |= DMUS_OBJ_OBJECT;
+ IStream_Read(stream, &This->dmobj.desc.guidObject, chunk.dwSize,
NULL);
break;
}
case FOURCC_VERS: {
TRACE_(dmfile)(": version chunk\n");
- This->pDesc->dwValidData |= DMUS_OBJ_VERSION;
- IStream_Read(stream, &This->pDesc->vVersion, chunk.dwSize,
NULL);
+ This->dmobj.desc.dwValidData |= DMUS_OBJ_VERSION;
+ IStream_Read(stream, &This->dmobj.desc.vVersion, chunk.dwSize,
NULL);
break;
}
case FOURCC_PTBL: {
@@ -569,9 +479,9 @@
case
mmioFOURCC('I','N','A','M'): {
CHAR szName[DMUS_MAX_NAME];
TRACE_(dmfile)(": name chunk\n");
- This->pDesc->dwValidData |= DMUS_OBJ_NAME;
+ This->dmobj.desc.dwValidData |= DMUS_OBJ_NAME;
IStream_Read(stream, szName, chunk.dwSize, NULL);
- MultiByteToWideChar(CP_ACP, 0, szName, -1,
This->pDesc->wszName, DMUS_MAX_NAME);
+ MultiByteToWideChar(CP_ACP, 0, szName, -1,
This->dmobj.desc.wszName, DMUS_MAX_NAME);
if (even_or_odd(chunk.dwSize)) {
ListCount[0]++;
liMove.QuadPart = 1;
@@ -765,13 +675,13 @@
struct list *listEntry;
TRACE("*** IDirectMusicCollection (%p) ***\n",
&This->IDirectMusicCollection_iface);
- if (This->pDesc->dwValidData & DMUS_OBJ_OBJECT)
- TRACE(" - GUID = %s\n",
debugstr_dmguid(&This->pDesc->guidObject));
- if (This->pDesc->dwValidData & DMUS_OBJ_VERSION)
- TRACE(" - Version = %i,%i,%i,%i\n",
(This->pDesc->vVersion.dwVersionMS >> 8) & 0x0000FFFF,
This->pDesc->vVersion.dwVersionMS & 0x0000FFFF,
- (This->pDesc->vVersion.dwVersionLS >> 8) & 0x0000FFFF,
This->pDesc->vVersion.dwVersionLS & 0x0000FFFF);
- if (This->pDesc->dwValidData & DMUS_OBJ_NAME)
- TRACE(" - Name = %s\n", debugstr_w(This->pDesc->wszName));
+ if (This->dmobj.desc.dwValidData & DMUS_OBJ_OBJECT)
+ TRACE(" - GUID = %s\n",
debugstr_dmguid(&This->dmobj.desc.guidObject));
+ if (This->dmobj.desc.dwValidData & DMUS_OBJ_VERSION)
+ TRACE(" - Version = %i,%i,%i,%i\n",
(This->dmobj.desc.vVersion.dwVersionMS >> 8) & 0x0000FFFF,
This->dmobj.desc.vVersion.dwVersionMS & 0x0000FFFF,
+ (This->dmobj.desc.vVersion.dwVersionLS >> 8) & 0x0000FFFF,
This->dmobj.desc.vVersion.dwVersionLS & 0x0000FFFF);
+ if (This->dmobj.desc.dwValidData & DMUS_OBJ_NAME)
+ TRACE(" - Name = %s\n", debugstr_w(This->dmobj.desc.wszName));
TRACE(" - Collection header:\n");
TRACE(" - cInstruments: %d\n", This->pHeader->cInstruments);
@@ -787,29 +697,18 @@
return S_OK;
}
-static HRESULT WINAPI IDirectMusicCollectionImpl_IPersistStream_Save(LPPERSISTSTREAM
iface, IStream* pStm, BOOL fClearDirty)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
IDirectMusicCollectionImpl_IPersistStream_GetSizeMax(LPPERSISTSTREAM iface,
ULARGE_INTEGER* pcbSize)
-{
- return E_NOTIMPL;
-}
-
-static const IPersistStreamVtbl DirectMusicCollection_PersistStream_Vtbl = {
- IDirectMusicCollectionImpl_IPersistStream_QueryInterface,
- IDirectMusicCollectionImpl_IPersistStream_AddRef,
- IDirectMusicCollectionImpl_IPersistStream_Release,
- IDirectMusicCollectionImpl_IPersistStream_GetClassID,
- IDirectMusicCollectionImpl_IPersistStream_IsDirty,
- IDirectMusicCollectionImpl_IPersistStream_Load,
- IDirectMusicCollectionImpl_IPersistStream_Save,
- IDirectMusicCollectionImpl_IPersistStream_GetSizeMax
+static const IPersistStreamVtbl persiststream_vtbl = {
+ dmobj_IPersistStream_QueryInterface,
+ dmobj_IPersistStream_AddRef,
+ dmobj_IPersistStream_Release,
+ unimpl_IPersistStream_GetClassID,
+ unimpl_IPersistStream_IsDirty,
+ IPersistStreamImpl_Load,
+ unimpl_IPersistStream_Save,
+ unimpl_IPersistStream_GetSizeMax
};
-/* for ClassFactory */
HRESULT WINAPI DMUSIC_CreateDirectMusicCollectionImpl(LPCGUID lpcGUID, LPVOID* ppobj,
LPUNKNOWN pUnkOuter)
{
IDirectMusicCollectionImpl* obj;
@@ -824,15 +723,15 @@
return E_OUTOFMEMORY;
obj->IDirectMusicCollection_iface.lpVtbl =
&DirectMusicCollection_Collection_Vtbl;
- obj->IDirectMusicObject_iface.lpVtbl = &DirectMusicCollection_Object_Vtbl;
- obj->IPersistStream_iface.lpVtbl = &DirectMusicCollection_PersistStream_Vtbl;
- obj->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC));
- DM_STRUCT_INIT(obj->pDesc);
- obj->pDesc->dwValidData |= DMUS_OBJ_CLASS;
- obj->pDesc->guidClass = CLSID_DirectMusicCollection;
obj->ref = 1;
+ dmobject_init(&obj->dmobj, &CLSID_DirectMusicCollection,
+ (IUnknown*)&obj->IDirectMusicCollection_iface);
+ obj->dmobj.IDirectMusicObject_iface.lpVtbl = &dmobject_vtbl;
+ obj->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
+
list_init (&obj->Instruments);
+ DMUSIC_LockModule();
hr =
IDirectMusicCollection_QueryInterface(&obj->IDirectMusicCollection_iface, lpcGUID,
ppobj);
IDirectMusicCollection_Release(&obj->IDirectMusicCollection_iface);
Added: trunk/reactos/dll/directx/wine/dmusic/dmobject.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/dm…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/dmobject.c (added)
+++ trunk/reactos/dll/directx/wine/dmusic/dmobject.c [iso-8859-1] Fri Sep 26 09:19:09
2014
@@ -0,0 +1,164 @@
+/*
+ * Base IDirectMusicObject Implementation
+ *
+ * Copyright (C) 2003-2004 Rok Mandeljc
+ * Copyright (C) 2014 Michael Stefaniuc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "dmusic_private.h"
+
+/* Generic IDirectMusicObject methods */
+static inline struct dmobject *impl_from_IDirectMusicObject(IDirectMusicObject *iface)
+{
+ return CONTAINING_RECORD(iface, struct dmobject, IDirectMusicObject_iface);
+}
+
+HRESULT WINAPI dmobj_IDirectMusicObject_QueryInterface(IDirectMusicObject *iface, REFIID
riid,
+ void **ret_iface)
+{
+ struct dmobject *This = impl_from_IDirectMusicObject(iface);
+ return IUnknown_QueryInterface(This->outer_unk, riid, ret_iface);
+}
+
+ULONG WINAPI dmobj_IDirectMusicObject_AddRef(IDirectMusicObject *iface)
+{
+ struct dmobject *This = impl_from_IDirectMusicObject(iface);
+ return IUnknown_AddRef(This->outer_unk);
+}
+
+ULONG WINAPI dmobj_IDirectMusicObject_Release(IDirectMusicObject *iface)
+{
+ struct dmobject *This = impl_from_IDirectMusicObject(iface);
+ return IUnknown_Release(This->outer_unk);
+}
+
+HRESULT WINAPI dmobj_IDirectMusicObject_GetDescriptor(IDirectMusicObject *iface,
+ DMUS_OBJECTDESC *desc)
+{
+ struct dmobject *This = impl_from_IDirectMusicObject(iface);
+
+ TRACE("(%p/%p)->(%p)\n", iface, This, desc);
+
+ if (!desc)
+ return E_POINTER;
+
+ memcpy(desc, &This->desc, This->desc.dwSize);
+
+ return S_OK;
+}
+
+HRESULT WINAPI dmobj_IDirectMusicObject_SetDescriptor(IDirectMusicObject *iface,
+ DMUS_OBJECTDESC *desc)
+{
+ struct dmobject *This = impl_from_IDirectMusicObject(iface);
+ HRESULT ret = S_OK;
+
+ TRACE("(%p, %p)\n", iface, desc);
+
+ if (!desc)
+ return E_POINTER;
+
+ /* Immutable property */
+ if (desc->dwValidData & DMUS_OBJ_CLASS)
+ {
+ desc->dwValidData &= ~DMUS_OBJ_CLASS;
+ ret = S_FALSE;
+ }
+ /* Set only valid fields */
+ if (desc->dwValidData & DMUS_OBJ_OBJECT)
+ This->desc.guidObject = desc->guidObject;
+ if (desc->dwValidData & DMUS_OBJ_NAME)
+ lstrcpynW(This->desc.wszName, desc->wszName, DMUS_MAX_NAME);
+ if (desc->dwValidData & DMUS_OBJ_CATEGORY)
+ lstrcpynW(This->desc.wszCategory, desc->wszCategory, DMUS_MAX_CATEGORY);
+ if (desc->dwValidData & DMUS_OBJ_FILENAME)
+ lstrcpynW(This->desc.wszFileName, desc->wszFileName, DMUS_MAX_FILENAME);
+ if (desc->dwValidData & DMUS_OBJ_VERSION)
+ This->desc.vVersion = desc->vVersion;
+ if (desc->dwValidData & DMUS_OBJ_DATE)
+ This->desc.ftDate = desc->ftDate;
+ if (desc->dwValidData & DMUS_OBJ_MEMORY) {
+ This->desc.llMemLength = desc->llMemLength;
+ memcpy(This->desc.pbMemData, desc->pbMemData, desc->llMemLength);
+ }
+ if (desc->dwValidData & DMUS_OBJ_STREAM)
+ IStream_Clone(desc->pStream, &This->desc.pStream);
+
+ This->desc.dwValidData |= desc->dwValidData;
+
+ return ret;
+}
+
+/* Generic IPersistStream methods */
+static inline struct dmobject *impl_from_IPersistStream(IPersistStream *iface)
+{
+ return CONTAINING_RECORD(iface, struct dmobject, IPersistStream_iface);
+}
+
+HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid,
+ void **ret_iface)
+{
+ struct dmobject *This = impl_from_IPersistStream(iface);
+ return IUnknown_QueryInterface(This->outer_unk, riid, ret_iface);
+}
+
+ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
+{
+ struct dmobject *This = impl_from_IPersistStream(iface);
+ return IUnknown_AddRef(This->outer_unk);
+}
+
+ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
+{
+ struct dmobject *This = impl_from_IPersistStream(iface);
+ return IUnknown_Release(This->outer_unk);
+}
+
+/* IPersistStream methods not implemented in native */
+HRESULT WINAPI unimpl_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
+{
+ TRACE("(%p, %p): method not implemented\n", iface, class);
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface)
+{
+ TRACE("(%p): method not implemented, always returning S_FALSE\n", iface);
+ return S_FALSE;
+}
+
+HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream,
+ BOOL clear_dirty)
+{
+ TRACE("(%p, %p, %d): method not implemented\n", iface, stream,
clear_dirty);
+ return E_NOTIMPL;
+}
+
+HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER
*size)
+{
+ TRACE("(%p, %p): method not implemented\n", iface, size);
+ return E_NOTIMPL;
+}
+
+
+void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
+{
+ dmobj->outer_unk = outer_unk;
+ dmobj->desc.dwSize = sizeof(dmobj->desc);
+ dmobj->desc.dwValidData = DMUS_OBJ_CLASS;
+ dmobj->desc.guidClass = *class;
+}
Propchange: trunk/reactos/dll/directx/wine/dmusic/dmobject.c
------------------------------------------------------------------------------
svn:eol-style = native
Added: trunk/reactos/dll/directx/wine/dmusic/dmobject.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/dm…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/dmobject.h (added)
+++ trunk/reactos/dll/directx/wine/dmusic/dmobject.h [iso-8859-1] Fri Sep 26 09:19:09
2014
@@ -0,0 +1,55 @@
+/*
+ * Base IDirectMusicObject Implementation
+ *
+ * Copyright (C) 2014 Michael Stefaniuc
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#pragma once
+
+struct dmobject {
+ IDirectMusicObject IDirectMusicObject_iface;
+ IPersistStream IPersistStream_iface;
+ IUnknown *outer_unk;
+ DMUS_OBJECTDESC desc;
+};
+
+void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
DECLSPEC_HIDDEN;
+
+/* Generic IDirectMusicObject methods */
+HRESULT WINAPI dmobj_IDirectMusicObject_QueryInterface(IDirectMusicObject *iface, REFIID
riid,
+ void **ret_iface) DECLSPEC_HIDDEN;
+ULONG WINAPI dmobj_IDirectMusicObject_AddRef(IDirectMusicObject *iface) DECLSPEC_HIDDEN;
+ULONG WINAPI dmobj_IDirectMusicObject_Release(IDirectMusicObject *iface)
DECLSPEC_HIDDEN;
+HRESULT WINAPI dmobj_IDirectMusicObject_GetDescriptor(IDirectMusicObject *iface,
+ DMUS_OBJECTDESC *desc) DECLSPEC_HIDDEN;
+HRESULT WINAPI dmobj_IDirectMusicObject_SetDescriptor(IDirectMusicObject *iface,
+ DMUS_OBJECTDESC *desc) DECLSPEC_HIDDEN;
+
+/* Generic IPersistStream methods */
+HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid,
+ void **ret_iface) DECLSPEC_HIDDEN;
+ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface) DECLSPEC_HIDDEN;
+ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface) DECLSPEC_HIDDEN;
+
+/* IPersistStream methods not implemented in native */
+HRESULT WINAPI unimpl_IPersistStream_GetClassID(IPersistStream *iface,
+ CLSID *class) DECLSPEC_HIDDEN;
+HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface) DECLSPEC_HIDDEN;
+HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream,
+ BOOL clear_dirty) DECLSPEC_HIDDEN;
+HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface,
+ ULARGE_INTEGER *size) DECLSPEC_HIDDEN;
Propchange: trunk/reactos/dll/directx/wine/dmusic/dmobject.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: trunk/reactos/dll/directx/wine/dmusic/dmusic.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/dm…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/dmusic.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/dmusic.c [iso-8859-1] Fri Sep 26 09:19:09 2014
@@ -59,8 +59,6 @@
TRACE("(%p)->(): new ref = %u\n", This, ref);
- DMUSIC_LockModule();
-
return ref;
}
@@ -72,12 +70,12 @@
TRACE("(%p)->(): new ref = %u\n", This, ref);
if (!ref) {
+ IReferenceClock_Release(&This->pMasterClock->IReferenceClock_iface);
HeapFree(GetProcessHeap(), 0, This->system_ports);
HeapFree(GetProcessHeap(), 0, This->ppPorts);
HeapFree(GetProcessHeap(), 0, This);
- }
-
- DMUSIC_UnlockModule();
+ DMUSIC_UnlockModule();
+ }
return ref;
}
@@ -210,8 +208,10 @@
if (guid_clock)
*guid_clock = This->pMasterClock->pClockInfo.guidClock;
- if (reference_clock)
- *reference_clock = (IReferenceClock*)This->pMasterClock;
+ if (reference_clock) {
+ *reference_clock = &This->pMasterClock->IReferenceClock_iface;
+ IReferenceClock_AddRef(*reference_clock);
+ }
return S_OK;
}
@@ -414,7 +414,7 @@
return E_OUTOFMEMORY;
dmusic->IDirectMusic8_iface.lpVtbl = &DirectMusic8_Vtbl;
- dmusic->ref = 0; /* Will be inited by QueryInterface */
+ dmusic->ref = 1;
dmusic->pMasterClock = NULL;
dmusic->ppPorts = NULL;
dmusic->nrofports = 0;
@@ -424,14 +424,11 @@
return ret;
}
+ create_system_ports_list(dmusic);
+
+ DMUSIC_LockModule();
ret = IDirectMusic8Impl_QueryInterface(&dmusic->IDirectMusic8_iface, riid,
ret_iface);
- if (FAILED(ret)) {
- IReferenceClock_Release(&dmusic->pMasterClock->IReferenceClock_iface);
- HeapFree(GetProcessHeap(), 0, dmusic);
- return ret;
- }
-
- create_system_ports_list(dmusic);
-
- return S_OK;
-}
+ IDirectMusic8Impl_Release(&dmusic->IDirectMusic8_iface);
+
+ return ret;
+}
Modified: trunk/reactos/dll/directx/wine/dmusic/dmusic_private.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/dm…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/dmusic_private.h [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/dmusic_private.h [iso-8859-1] Fri Sep 26
09:19:09 2014
@@ -22,7 +22,7 @@
#ifndef __WINE_DMUSIC_PRIVATE_H
#define __WINE_DMUSIC_PRIVATE_H
-#include <config.h>
+#include <wine/config.h>
#include <stdarg.h>
@@ -42,6 +42,8 @@
#include <wine/list.h>
#include <wine/unicode.h>
+#include "dmobject.h"
+
WINE_DEFAULT_DEBUG_CHANNEL(dmusic);
/*****************************************************************************
@@ -53,7 +55,6 @@
typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl;
typedef struct IReferenceClockImpl IReferenceClockImpl;
-typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl;
typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl;
typedef struct SynthPortImpl SynthPortImpl;
@@ -210,30 +211,6 @@
typedef struct _DMUS_PRIVATE_POOLCUE {
struct list entry; /* for listing elements */
} DMUS_PRIVATE_POOLCUE, *LPDMUS_PRIVATE_POOLCUE;
-
-/*****************************************************************************
- * IDirectMusicCollectionImpl implementation structure
- */
-struct IDirectMusicCollectionImpl {
- /* IUnknown fields */
- IDirectMusicCollection IDirectMusicCollection_iface;
- IDirectMusicObject IDirectMusicObject_iface;
- IPersistStream IPersistStream_iface;
- LONG ref;
-
- /* IDirectMusicCollectionImpl fields */
- IStream *pStm; /* stream from which we load collection and later instruments */
- LARGE_INTEGER liCollectionPosition; /* offset in a stream where collection was loaded
from */
- LARGE_INTEGER liWavePoolTablePosition; /* offset in a stream where wave pool table
can be found */
- LPDMUS_OBJECTDESC pDesc;
- CHAR* szCopyright; /* FIXME: should probably placed somewhere else */
- LPDLSHEADER pHeader;
- /* pool table */
- LPPOOLTABLE pPoolTable;
- LPPOOLCUE pPoolCues;
- /* instruments */
- struct list Instruments;
-};
/*****************************************************************************
* IDirectMusicInstrumentImpl implementation structure
@@ -296,13 +273,6 @@
const char* name;
} guid_info;
-/* used for initialising structs (primarily for DMUS_OBJECTDESC) */
-#define DM_STRUCT_INIT(x) \
- do { \
- memset((x), 0, sizeof(*(x))); \
- (x)->dwSize = sizeof(*x); \
- } while (0)
-
#define FE(x) { x, #x }
#define GE(x) { &x, #x }
Modified: trunk/reactos/dll/directx/wine/dmusic/download.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/do…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/download.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/download.c [iso-8859-1] Fri Sep 26 09:19:09
2014
@@ -50,8 +50,6 @@
TRACE("(%p)->(): new ref = %u\n", iface, ref);
- DMUSIC_LockModule();
-
return ref;
}
@@ -62,10 +60,10 @@
TRACE("(%p)->(): new ref = %u\n", iface, ref);
- if (!ref)
+ if (!ref) {
HeapFree(GetProcessHeap(), 0, This);
-
- DMUSIC_UnlockModule();
+ DMUSIC_UnlockModule();
+ }
return ref;
}
@@ -100,5 +98,7 @@
download->IDirectMusicDownload_iface.lpVtbl = &DirectMusicDownload_Vtbl;
download->ref = 1;
*ret_iface = download;
+
+ DMUSIC_LockModule();
return S_OK;
}
Modified: trunk/reactos/dll/directx/wine/dmusic/instrument.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/in…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/instrument.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/instrument.c [iso-8859-1] Fri Sep 26 09:19:09
2014
@@ -60,8 +60,6 @@
TRACE("(%p)->(): new ref = %u\n", iface, ref);
- DMUSIC_LockModule();
-
return ref;
}
@@ -81,9 +79,8 @@
HeapFree(GetProcessHeap(), 0, This->articulations->connections);
HeapFree(GetProcessHeap(), 0, This->articulations);
HeapFree(GetProcessHeap(), 0, This);
- }
-
- DMUSIC_UnlockModule();
+ DMUSIC_UnlockModule();
+ }
return ref;
}
@@ -123,16 +120,22 @@
/* for ClassFactory */
HRESULT DMUSIC_CreateDirectMusicInstrumentImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN
pUnkOuter) {
IDirectMusicInstrumentImpl* dminst;
-
+ HRESULT hr;
+
dminst = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(IDirectMusicInstrumentImpl));
if (NULL == dminst) {
*ppobj = NULL;
return E_OUTOFMEMORY;
}
dminst->IDirectMusicInstrument_iface.lpVtbl = &DirectMusicInstrument_Vtbl;
- dminst->ref = 0; /* will be inited by QueryInterface */
-
- return
IDirectMusicInstrument_QueryInterface(&dminst->IDirectMusicInstrument_iface,
lpcGUID, ppobj);
+ dminst->ref = 1;
+
+ DMUSIC_LockModule();
+ hr =
IDirectMusicInstrument_QueryInterface(&dminst->IDirectMusicInstrument_iface,
lpcGUID,
+ ppobj);
+ IDirectMusicInstrument_Release(&dminst->IDirectMusicInstrument_iface);
+
+ return hr;
}
static HRESULT read_from_stream(IStream *stream, void *data, ULONG size)
Modified: trunk/reactos/dll/directx/wine/dmusic/port.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/wine/dmusic/po…
==============================================================================
--- trunk/reactos/dll/directx/wine/dmusic/port.c [iso-8859-1] (original)
+++ trunk/reactos/dll/directx/wine/dmusic/port.c [iso-8859-1] Fri Sep 26 09:19:09 2014
@@ -69,8 +69,6 @@
TRACE("(%p)->(): new ref = %u\n", iface, ref);
- DMUSIC_LockModule();
-
return ref;
}
@@ -85,9 +83,8 @@
{
HeapFree(GetProcessHeap(), 0, This->data);
HeapFree(GetProcessHeap(), 0, This);
- }
-
- DMUSIC_UnlockModule();
+ DMUSIC_UnlockModule();
+ }
return ref;
}
@@ -122,6 +119,7 @@
object->ref = 1;
*instrument = &object->IDirectMusicDownloadedInstrument_iface;
+ DMUSIC_LockModule();
return S_OK;
}
Modified: trunk/reactos/media/doc/README.WINE
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
==============================================================================
--- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original)
+++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Fri Sep 26 09:19:09 2014
@@ -37,7 +37,7 @@
reactos/dll/directx/wine/devenum # Synced to Wine-1.7.27
reactos/dll/directx/wine/dinput # Synced to Wine-1.7.27
reactos/dll/directx/wine/dinput8 # Synced to Wine-1.7.27
-reactos/dll/directx/wine/dmusic # Synced to Wine-1.7.17
+reactos/dll/directx/wine/dmusic # Synced to Wine-1.7.27
reactos/dll/directx/wine/dplay # Synced to Wine-1.7.17
reactos/dll/directx/wine/dplayx # Synced to Wine-1.7.17
reactos/dll/directx/wine/dsound # Synced to Wine-1.5.26