From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 199 +++++++++++++++++++------------------------ 1 file changed, 88 insertions(+), 111 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index 39a5333fbbb..f86e4a2bb5f 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -39,15 +39,14 @@ typedef struct IDirectMusicSegment8Impl { int data_size; } IDirectMusicSegment8Impl;
-IDirectMusicSegment8Impl *create_segment(void); +static IDirectMusicSegment8Impl *segment_create(void);
static inline IDirectMusicSegment8Impl *impl_from_IDirectMusicSegment8(IDirectMusicSegment8 *iface) { return CONTAINING_RECORD(iface, IDirectMusicSegment8Impl, IDirectMusicSegment8_iface); }
-static HRESULT WINAPI IDirectMusicSegment8Impl_QueryInterface(IDirectMusicSegment8 *iface, - REFIID riid, void **ret_iface) +static HRESULT WINAPI segment_QueryInterface(IDirectMusicSegment8 *iface, REFIID riid, void **ret_iface) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -72,7 +71,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_QueryInterface(IDirectMusicSegmen return S_OK; }
-static ULONG WINAPI IDirectMusicSegment8Impl_AddRef(IDirectMusicSegment8 *iface) +static ULONG WINAPI segment_AddRef(IDirectMusicSegment8 *iface) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); LONG ref = InterlockedIncrement(&This->ref); @@ -82,7 +81,7 @@ static ULONG WINAPI IDirectMusicSegment8Impl_AddRef(IDirectMusicSegment8 *iface) return ref; }
-static ULONG WINAPI IDirectMusicSegment8Impl_Release(IDirectMusicSegment8 *iface) +static ULONG WINAPI segment_Release(IDirectMusicSegment8 *iface) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); LONG ref = InterlockedDecrement(&This->ref); @@ -99,8 +98,7 @@ static ULONG WINAPI IDirectMusicSegment8Impl_Release(IDirectMusicSegment8 *iface return ref; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetLength(IDirectMusicSegment8 *iface, - MUSIC_TIME *pmtLength) +static HRESULT WINAPI segment_GetLength(IDirectMusicSegment8 *iface, MUSIC_TIME *pmtLength) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -112,8 +110,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetLength(IDirectMusicSegment8 *i return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetLength(IDirectMusicSegment8 *iface, - MUSIC_TIME mtLength) +static HRESULT WINAPI segment_SetLength(IDirectMusicSegment8 *iface, MUSIC_TIME mtLength) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -122,8 +119,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_SetLength(IDirectMusicSegment8 *i return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetRepeats(IDirectMusicSegment8 *iface, - DWORD *pdwRepeats) +static HRESULT WINAPI segment_GetRepeats(IDirectMusicSegment8 *iface, DWORD *pdwRepeats) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -135,8 +131,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetRepeats(IDirectMusicSegment8 * return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetRepeats(IDirectMusicSegment8 *iface, - DWORD dwRepeats) +static HRESULT WINAPI segment_SetRepeats(IDirectMusicSegment8 *iface, DWORD dwRepeats) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -145,8 +140,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_SetRepeats(IDirectMusicSegment8 * return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetDefaultResolution(IDirectMusicSegment8 *iface, - DWORD *pdwResolution) +static HRESULT WINAPI segment_GetDefaultResolution(IDirectMusicSegment8 *iface, DWORD *pdwResolution) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -158,8 +152,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetDefaultResolution(IDirectMusic return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetDefaultResolution(IDirectMusicSegment8 *iface, - DWORD dwResolution) +static HRESULT WINAPI segment_SetDefaultResolution(IDirectMusicSegment8 *iface, DWORD dwResolution) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -168,8 +161,8 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_SetDefaultResolution(IDirectMusic return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetTrack(IDirectMusicSegment8 *iface, - REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) +static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rguidType, + DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); CLSID pIt_clsid; @@ -217,8 +210,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetTrack(IDirectMusicSegment8 *if return DMUS_E_NOT_FOUND; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetTrackGroup(IDirectMusicSegment8 *iface, - IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) +static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); struct list* pEntry = NULL; @@ -242,8 +234,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetTrackGroup(IDirectMusicSegment return DMUS_E_NOT_FOUND; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_InsertTrack(IDirectMusicSegment8 *iface, - IDirectMusicTrack *pTrack, DWORD group) +static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack, DWORD group) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); DWORD i = 0; @@ -277,8 +268,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_InsertTrack(IDirectMusicSegment8 return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_RemoveTrack(IDirectMusicSegment8 *iface, - IDirectMusicTrack *pTrack) +static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); struct list* pEntry = NULL; @@ -303,7 +293,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_RemoveTrack(IDirectMusicSegment8 return S_FALSE; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_InitPlay(IDirectMusicSegment8 *iface, +static HRESULT WINAPI segment_InitPlay(IDirectMusicSegment8 *iface, IDirectMusicSegmentState **ppSegState, IDirectMusicPerformance *pPerformance, DWORD dwFlags) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); @@ -321,8 +311,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_InitPlay(IDirectMusicSegment8 *if return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetGraph(IDirectMusicSegment8 *iface, - IDirectMusicGraph **ppGraph) +static HRESULT WINAPI segment_GetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph **ppGraph) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -342,8 +331,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetGraph(IDirectMusicSegment8 *if return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetGraph(IDirectMusicSegment8 *iface, - IDirectMusicGraph *pGraph) +static HRESULT WINAPI segment_SetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph *pGraph) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -358,24 +346,22 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_SetGraph(IDirectMusicSegment8 *if return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_AddNotificationType(IDirectMusicSegment8 *iface, - REFGUID rguidNotificationType) +static HRESULT WINAPI segment_AddNotificationType(IDirectMusicSegment8 *iface, REFGUID rguidNotificationType) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_RemoveNotificationType(IDirectMusicSegment8 *iface, - REFGUID rguidNotificationType) +static HRESULT WINAPI segment_RemoveNotificationType(IDirectMusicSegment8 *iface, REFGUID rguidNotificationType) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetParam(IDirectMusicSegment8 *iface, REFGUID type, - DWORD group, DWORD index, MUSIC_TIME time, MUSIC_TIME *next, void *param) +static HRESULT WINAPI segment_GetParam(IDirectMusicSegment8 *iface, REFGUID type, DWORD group, + DWORD index, MUSIC_TIME time, MUSIC_TIME *next, void *param) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); IDirectMusicTrack *track; @@ -390,8 +376,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetParam(IDirectMusicSegment8 *if
/* Index is relative to the search pattern: group bits and supported param type */ for (i = 0, count = 0; i < DMUS_SEG_ANYTRACK && count <= index; i++) { - if (FAILED(IDirectMusicSegment8Impl_GetTrack(iface, &GUID_NULL, group, i, &track))) - break; + if (FAILED(segment_GetTrack(iface, &GUID_NULL, group, i, &track))) break; if (FAILED(IDirectMusicTrack_IsParamSupported(track, type))) continue; if (index == count || index == DMUS_SEG_ANYTRACK) @@ -408,15 +393,15 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetParam(IDirectMusicSegment8 *if return hr; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetParam(IDirectMusicSegment8 *iface, - REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) +static HRESULT WINAPI segment_SetParam(IDirectMusicSegment8 *iface, REFGUID rguidType, + DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %s, %#lx, %ld, %ld, %p): stub\n", This, debugstr_dmguid(rguidType), dwGroupBits, dwIndex, mtTime, pParam); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end, +static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end, IDirectMusicSegment **segment) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); @@ -431,7 +416,8 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_Clone(IDirectMusicSegment8 *iface if (!segment) return E_POINTER;
- if (!(clone = create_segment())) { + if (!(clone = segment_create())) + { *segment = NULL; return E_OUTOFMEMORY; } @@ -465,8 +451,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_Clone(IDirectMusicSegment8 *iface return track_clone_fail ? S_FALSE : S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetStartPoint(IDirectMusicSegment8 *iface, - MUSIC_TIME mtStart) +static HRESULT WINAPI segment_SetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME mtStart) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -478,8 +463,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_SetStartPoint(IDirectMusicSegment return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetStartPoint(IDirectMusicSegment8 *iface, - MUSIC_TIME *pmtStart) +static HRESULT WINAPI segment_GetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME *pmtStart) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -491,8 +475,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetStartPoint(IDirectMusicSegment return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetLoopPoints(IDirectMusicSegment8 *iface, - MUSIC_TIME start, MUSIC_TIME end) +static HRESULT WINAPI segment_SetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -508,8 +491,7 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_SetLoopPoints(IDirectMusicSegment return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetLoopPoints(IDirectMusicSegment8 *iface, - MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) +static HRESULT WINAPI segment_GetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
@@ -522,93 +504,86 @@ static HRESULT WINAPI IDirectMusicSegment8Impl_GetLoopPoints(IDirectMusicSegment return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetPChannelsUsed(IDirectMusicSegment8 *iface, - DWORD dwNumPChannels, DWORD *paPChannels) +static HRESULT WINAPI segment_SetPChannelsUsed(IDirectMusicSegment8 *iface, DWORD dwNumPChannels, DWORD *paPChannels) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %ld, %p): stub\n", This, dwNumPChannels, paPChannels); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_SetTrackConfig(IDirectMusicSegment8 *iface, - REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, - DWORD dwFlagsOff) +static HRESULT WINAPI segment_SetTrackConfig(IDirectMusicSegment8 *iface, REFGUID rguidTrackClassID, + DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %s, %#lx, %ld, %ld, %ld): stub\n", This, debugstr_dmguid(rguidTrackClassID), dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_GetAudioPathConfig(IDirectMusicSegment8 *iface, - IUnknown **ppAudioPathConfig) +static HRESULT WINAPI segment_GetAudioPathConfig(IDirectMusicSegment8 *iface, IUnknown **ppAudioPathConfig) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %p): stub\n", This, ppAudioPathConfig); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_Compose(IDirectMusicSegment8 *iface, - MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, - IDirectMusicSegment **ppComposedSegment) +static HRESULT WINAPI segment_Compose(IDirectMusicSegment8 *iface, MUSIC_TIME mtTime, + IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %ld, %p, %p, %p): stub\n", This, mtTime, pFromSegment, pToSegment, ppComposedSegment); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_Download(IDirectMusicSegment8 *iface, - IUnknown *pAudioPath) +static HRESULT WINAPI segment_Download(IDirectMusicSegment8 *iface, IUnknown *pAudioPath) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %p): stub\n", This, pAudioPath); return S_OK; }
-static HRESULT WINAPI IDirectMusicSegment8Impl_Unload(IDirectMusicSegment8 *iface, - IUnknown *pAudioPath) +static HRESULT WINAPI segment_Unload(IDirectMusicSegment8 *iface, IUnknown *pAudioPath) { IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); FIXME("(%p, %p): stub\n", This, pAudioPath); return S_OK; }
-static const IDirectMusicSegment8Vtbl dmsegment8_vtbl = { - IDirectMusicSegment8Impl_QueryInterface, - IDirectMusicSegment8Impl_AddRef, - IDirectMusicSegment8Impl_Release, - IDirectMusicSegment8Impl_GetLength, - IDirectMusicSegment8Impl_SetLength, - IDirectMusicSegment8Impl_GetRepeats, - IDirectMusicSegment8Impl_SetRepeats, - IDirectMusicSegment8Impl_GetDefaultResolution, - IDirectMusicSegment8Impl_SetDefaultResolution, - IDirectMusicSegment8Impl_GetTrack, - IDirectMusicSegment8Impl_GetTrackGroup, - IDirectMusicSegment8Impl_InsertTrack, - IDirectMusicSegment8Impl_RemoveTrack, - IDirectMusicSegment8Impl_InitPlay, - IDirectMusicSegment8Impl_GetGraph, - IDirectMusicSegment8Impl_SetGraph, - IDirectMusicSegment8Impl_AddNotificationType, - IDirectMusicSegment8Impl_RemoveNotificationType, - IDirectMusicSegment8Impl_GetParam, - IDirectMusicSegment8Impl_SetParam, - IDirectMusicSegment8Impl_Clone, - IDirectMusicSegment8Impl_SetStartPoint, - IDirectMusicSegment8Impl_GetStartPoint, - IDirectMusicSegment8Impl_SetLoopPoints, - IDirectMusicSegment8Impl_GetLoopPoints, - IDirectMusicSegment8Impl_SetPChannelsUsed, - IDirectMusicSegment8Impl_SetTrackConfig, - IDirectMusicSegment8Impl_GetAudioPathConfig, - IDirectMusicSegment8Impl_Compose, - IDirectMusicSegment8Impl_Download, - IDirectMusicSegment8Impl_Unload +static const IDirectMusicSegment8Vtbl segment_vtbl = +{ + segment_QueryInterface, + segment_AddRef, + segment_Release, + segment_GetLength, + segment_SetLength, + segment_GetRepeats, + segment_SetRepeats, + segment_GetDefaultResolution, + segment_SetDefaultResolution, + segment_GetTrack, + segment_GetTrackGroup, + segment_InsertTrack, + segment_RemoveTrack, + segment_InitPlay, + segment_GetGraph, + segment_SetGraph, + segment_AddNotificationType, + segment_RemoveNotificationType, + segment_GetParam, + segment_SetParam, + segment_Clone, + segment_SetStartPoint, + segment_GetStartPoint, + segment_SetLoopPoints, + segment_GetLoopPoints, + segment_SetPChannelsUsed, + segment_SetTrackConfig, + segment_GetAudioPathConfig, + segment_Compose, + segment_Download, + segment_Unload, };
-/* IDirectMusicSegment8Impl IDirectMusicObject part: */ -static HRESULT WINAPI seg_IDirectMusicObject_ParseDescriptor(IDirectMusicObject *iface, - IStream *stream, DMUS_OBJECTDESC *desc) +static HRESULT WINAPI segment_object_ParseDescriptor(IDirectMusicObject *iface, IStream *stream, DMUS_OBJECTDESC *desc) { struct chunk_entry riff = {0}; DWORD supported = DMUS_OBJ_OBJECT | DMUS_OBJ_VERSION; @@ -643,16 +618,16 @@ static HRESULT WINAPI seg_IDirectMusicObject_ParseDescriptor(IDirectMusicObject return S_OK; }
-static const IDirectMusicObjectVtbl dmobject_vtbl = { +static const IDirectMusicObjectVtbl segment_object_vtbl = +{ dmobj_IDirectMusicObject_QueryInterface, dmobj_IDirectMusicObject_AddRef, dmobj_IDirectMusicObject_Release, dmobj_IDirectMusicObject_GetDescriptor, dmobj_IDirectMusicObject_SetDescriptor, - seg_IDirectMusicObject_ParseDescriptor + segment_object_ParseDescriptor, };
-/* IDirectMusicSegment8Impl IPersistStream part: */ static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, const struct chunk_entry *riff) { @@ -871,7 +846,7 @@ static HRESULT parse_wave_form(IDirectMusicSegment8Impl *This, IStream *stream, return SUCCEEDED(hr) ? S_OK : hr; }
-static HRESULT WINAPI seg_IPersistStream_Load(IPersistStream *iface, IStream *stream) +static HRESULT WINAPI segment_persist_stream_Load(IPersistStream *iface, IStream *stream) { IDirectMusicSegment8Impl *This = impl_from_IPersistStream(iface); struct chunk_entry riff = {0}; @@ -910,28 +885,29 @@ static HRESULT WINAPI seg_IPersistStream_Load(IPersistStream *iface, IStream *st return hr; }
-static const IPersistStreamVtbl persiststream_vtbl = { +static const IPersistStreamVtbl segment_persist_stream_vtbl = +{ dmobj_IPersistStream_QueryInterface, dmobj_IPersistStream_AddRef, dmobj_IPersistStream_Release, dmobj_IPersistStream_GetClassID, unimpl_IPersistStream_IsDirty, - seg_IPersistStream_Load, + segment_persist_stream_Load, unimpl_IPersistStream_Save, - unimpl_IPersistStream_GetSizeMax + unimpl_IPersistStream_GetSizeMax, };
-IDirectMusicSegment8Impl *create_segment(void) +IDirectMusicSegment8Impl *segment_create(void) { IDirectMusicSegment8Impl *obj;
if (!(obj = calloc(1, sizeof(*obj)))) return NULL;
- obj->IDirectMusicSegment8_iface.lpVtbl = &dmsegment8_vtbl; + obj->IDirectMusicSegment8_iface.lpVtbl = &segment_vtbl; obj->ref = 1; dmobject_init(&obj->dmobj, &CLSID_DirectMusicSegment, (IUnknown *)&obj->IDirectMusicSegment8_iface); - obj->dmobj.IDirectMusicObject_iface.lpVtbl = &dmobject_vtbl; - obj->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl; + obj->dmobj.IDirectMusicObject_iface.lpVtbl = &segment_object_vtbl; + obj->dmobj.IPersistStream_iface.lpVtbl = &segment_persist_stream_vtbl; list_init (&obj->Tracks);
return obj; @@ -943,7 +919,8 @@ HRESULT create_dmsegment(REFIID guid, void **ret_iface) IDirectMusicSegment8Impl *obj; HRESULT hr;
- if (!(obj = create_segment())) { + if (!(obj = segment_create())) + { *ret_iface = NULL; return E_OUTOFMEMORY; }
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 202 ++++++++++++++++++++----------------------- 1 file changed, 95 insertions(+), 107 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index f86e4a2bb5f..7dd21731f6f 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -98,67 +98,71 @@ static ULONG WINAPI segment_Release(IDirectMusicSegment8 *iface) return ref; }
-static HRESULT WINAPI segment_GetLength(IDirectMusicSegment8 *iface, MUSIC_TIME *pmtLength) +static HRESULT WINAPI segment_GetLength(IDirectMusicSegment8 *iface, MUSIC_TIME *length) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %p)\n", This, pmtLength); - if (NULL == pmtLength) { - return E_POINTER; - } - *pmtLength = This->header.mtLength; - return S_OK; + TRACE("(%p, %p)\n", This, length); + + if (!length) return E_POINTER; + *length = This->header.mtLength; + + return S_OK; }
-static HRESULT WINAPI segment_SetLength(IDirectMusicSegment8 *iface, MUSIC_TIME mtLength) +static HRESULT WINAPI segment_SetLength(IDirectMusicSegment8 *iface, MUSIC_TIME length) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %ld)\n", This, mtLength); - This->header.mtLength = mtLength; - return S_OK; + TRACE("(%p, %ld)\n", This, length); + + This->header.mtLength = length; + + return S_OK; }
-static HRESULT WINAPI segment_GetRepeats(IDirectMusicSegment8 *iface, DWORD *pdwRepeats) +static HRESULT WINAPI segment_GetRepeats(IDirectMusicSegment8 *iface, DWORD *repeats) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %p)\n", This, pdwRepeats); - if (NULL == pdwRepeats) { - return E_POINTER; - } - *pdwRepeats = This->header.dwRepeats; - return S_OK; + TRACE("(%p, %p)\n", This, repeats); + + if (!repeats) return E_POINTER; + *repeats = This->header.dwRepeats; + + return S_OK; }
-static HRESULT WINAPI segment_SetRepeats(IDirectMusicSegment8 *iface, DWORD dwRepeats) +static HRESULT WINAPI segment_SetRepeats(IDirectMusicSegment8 *iface, DWORD repeats) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %ld)\n", This, dwRepeats); - This->header.dwRepeats = dwRepeats; - return S_OK; + TRACE("(%p, %ld)\n", This, repeats); + This->header.dwRepeats = repeats; + + return S_OK; }
-static HRESULT WINAPI segment_GetDefaultResolution(IDirectMusicSegment8 *iface, DWORD *pdwResolution) +static HRESULT WINAPI segment_GetDefaultResolution(IDirectMusicSegment8 *iface, DWORD *resolution) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %p)\n", This, pdwResolution); - if (NULL == pdwResolution) { - return E_POINTER; - } - *pdwResolution = This->header.dwResolution; - return S_OK; + TRACE("(%p, %p)\n", This, resolution); + + if (!resolution) return E_POINTER; + *resolution = This->header.dwResolution; + + return S_OK; }
-static HRESULT WINAPI segment_SetDefaultResolution(IDirectMusicSegment8 *iface, DWORD dwResolution) +static HRESULT WINAPI segment_SetDefaultResolution(IDirectMusicSegment8 *iface, DWORD resolution) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %ld)\n", This, dwResolution); - This->header.dwResolution = dwResolution; - return S_OK; + TRACE("(%p, %ld)\n", This, resolution); + This->header.dwResolution = resolution; + + return S_OK; }
static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rguidType, @@ -294,56 +298,43 @@ static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMu }
static HRESULT WINAPI segment_InitPlay(IDirectMusicSegment8 *iface, - IDirectMusicSegmentState **ppSegState, IDirectMusicPerformance *pPerformance, DWORD dwFlags) + IDirectMusicSegmentState **state, IDirectMusicPerformance *performance, DWORD flags) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - HRESULT hr; + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + HRESULT hr;
- FIXME("(%p, %p, %p, %ld): semi-stub\n", This, ppSegState, pPerformance, dwFlags); - if (NULL == ppSegState) { - return E_POINTER; - } - hr = create_dmsegmentstate(&IID_IDirectMusicSegmentState,(void**) ppSegState); - if (FAILED(hr)) { - return hr; - } - /* TODO: DMUS_SEGF_FLAGS */ - return S_OK; + FIXME("(%p, %p, %p, %ld): semi-stub\n", This, state, performance, flags); + + if (!state) return E_POINTER; + if (FAILED(hr = create_dmsegmentstate(&IID_IDirectMusicSegmentState, (void **)state))) return hr; + + /* TODO: DMUS_SEGF_FLAGS */ + return S_OK; }
-static HRESULT WINAPI segment_GetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph **ppGraph) +static HRESULT WINAPI segment_GetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph **graph) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- FIXME("(%p, %p): semi-stub\n", This, ppGraph); - if (NULL == ppGraph) { - return E_POINTER; - } - if (NULL == This->pGraph) { - return DMUS_E_NOT_FOUND; - } - /** - * should return This, as seen in msdn - * "...The segment object implements IDirectMusicGraph directly..." - */ - *ppGraph = This->pGraph; - IDirectMusicGraph_AddRef(This->pGraph); - return S_OK; + FIXME("(%p, %p): semi-stub\n", This, graph); + + if (!graph) return E_POINTER; + if (!(*graph = This->pGraph)) return DMUS_E_NOT_FOUND; + IDirectMusicGraph_AddRef(This->pGraph); + + return S_OK; }
-static HRESULT WINAPI segment_SetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph *pGraph) +static HRESULT WINAPI segment_SetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph *graph) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- FIXME("(%p, %p): to complete\n", This, pGraph); - if (NULL != This->pGraph) { - IDirectMusicGraph_Release(This->pGraph); - } - This->pGraph = pGraph; - if (NULL != This->pGraph) { - IDirectMusicGraph_AddRef(This->pGraph); - } - return S_OK; + FIXME("(%p, %p): to complete\n", This, graph); + + if (This->pGraph) IDirectMusicGraph_Release(This->pGraph); + if ((This->pGraph = graph)) IDirectMusicGraph_AddRef(This->pGraph); + + return S_OK; }
static HRESULT WINAPI segment_AddNotificationType(IDirectMusicSegment8 *iface, REFGUID rguidNotificationType) @@ -451,28 +442,27 @@ static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME star return track_clone_fail ? S_FALSE : S_OK; }
-static HRESULT WINAPI segment_SetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME mtStart) +static HRESULT WINAPI segment_SetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME start) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %ld)\n", This, mtStart); - if (mtStart >= This->header.mtLength) { - return DMUS_E_OUT_OF_RANGE; - } - This->header.mtPlayStart = mtStart; - return S_OK; + TRACE("(%p, %ld)\n", This, start); + + if (start >= This->header.mtLength) return DMUS_E_OUT_OF_RANGE; + This->header.mtPlayStart = start; + + return S_OK; }
-static HRESULT WINAPI segment_GetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME *pmtStart) +static HRESULT WINAPI segment_GetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME *start) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %p)\n", This, pmtStart); - if (NULL == pmtStart) { - return E_POINTER; - } - *pmtStart = This->header.mtPlayStart; - return S_OK; + TRACE("(%p, %p)\n", This, start); + if (!start) return E_POINTER; + *start = This->header.mtPlayStart; + + return S_OK; }
static HRESULT WINAPI segment_SetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end) @@ -481,27 +471,25 @@ static HRESULT WINAPI segment_SetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_T
TRACE("(%p, %ld, %ld)\n", This, start, end);
- if ((end || start) && - (start >= This->header.mtLength || end > This->header.mtLength || start > end)) + if ((end || start) && (start >= This->header.mtLength || end > This->header.mtLength || start > end)) return DMUS_E_OUT_OF_RANGE; - This->header.mtLoopStart = start; This->header.mtLoopEnd = end;
return S_OK; }
-static HRESULT WINAPI segment_GetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME *pmtStart, MUSIC_TIME *pmtEnd) +static HRESULT WINAPI segment_GetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME *start, MUSIC_TIME *end) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface);
- TRACE("(%p, %p, %p)\n", This, pmtStart, pmtEnd); - if (NULL == pmtStart || NULL == pmtEnd) { - return E_POINTER; - } - *pmtStart = This->header.mtLoopStart; - *pmtEnd = This->header.mtLoopEnd; - return S_OK; + TRACE("(%p, %p, %p)\n", This, start, end); + + if (!start || !end) return E_POINTER; + *start = This->header.mtLoopStart; + *end = This->header.mtLoopEnd; + + return S_OK; }
static HRESULT WINAPI segment_SetPChannelsUsed(IDirectMusicSegment8 *iface, DWORD dwNumPChannels, DWORD *paPChannels)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 140 +++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 72 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index 7dd21731f6f..fd042842272 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -23,10 +23,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
-/***************************************************************************** - * IDirectMusicSegmentImpl implementation - */ -typedef struct IDirectMusicSegment8Impl { +struct segment +{ IDirectMusicSegment8 IDirectMusicSegment8_iface; struct dmobject dmobj; LONG ref; @@ -37,18 +35,18 @@ typedef struct IDirectMusicSegment8Impl { PCMWAVEFORMAT wave_format; void *wave_data; int data_size; -} IDirectMusicSegment8Impl; +};
-static IDirectMusicSegment8Impl *segment_create(void); +static struct segment *segment_create(void);
-static inline IDirectMusicSegment8Impl *impl_from_IDirectMusicSegment8(IDirectMusicSegment8 *iface) +static inline struct segment *impl_from_IDirectMusicSegment8(IDirectMusicSegment8 *iface) { - return CONTAINING_RECORD(iface, IDirectMusicSegment8Impl, IDirectMusicSegment8_iface); + return CONTAINING_RECORD(iface, struct segment, IDirectMusicSegment8_iface); }
static HRESULT WINAPI segment_QueryInterface(IDirectMusicSegment8 *iface, REFIID riid, void **ret_iface) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
@@ -73,7 +71,7 @@ static HRESULT WINAPI segment_QueryInterface(IDirectMusicSegment8 *iface, REFIID
static ULONG WINAPI segment_AddRef(IDirectMusicSegment8 *iface) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%ld\n", This, ref); @@ -83,7 +81,7 @@ static ULONG WINAPI segment_AddRef(IDirectMusicSegment8 *iface)
static ULONG WINAPI segment_Release(IDirectMusicSegment8 *iface) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%ld\n", This, ref); @@ -100,7 +98,7 @@ static ULONG WINAPI segment_Release(IDirectMusicSegment8 *iface)
static HRESULT WINAPI segment_GetLength(IDirectMusicSegment8 *iface, MUSIC_TIME *length) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %p)\n", This, length);
@@ -112,7 +110,7 @@ static HRESULT WINAPI segment_GetLength(IDirectMusicSegment8 *iface, MUSIC_TIME
static HRESULT WINAPI segment_SetLength(IDirectMusicSegment8 *iface, MUSIC_TIME length) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %ld)\n", This, length);
@@ -123,7 +121,7 @@ static HRESULT WINAPI segment_SetLength(IDirectMusicSegment8 *iface, MUSIC_TIME
static HRESULT WINAPI segment_GetRepeats(IDirectMusicSegment8 *iface, DWORD *repeats) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %p)\n", This, repeats);
@@ -135,7 +133,7 @@ static HRESULT WINAPI segment_GetRepeats(IDirectMusicSegment8 *iface, DWORD *rep
static HRESULT WINAPI segment_SetRepeats(IDirectMusicSegment8 *iface, DWORD repeats) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %ld)\n", This, repeats); This->header.dwRepeats = repeats; @@ -145,7 +143,7 @@ static HRESULT WINAPI segment_SetRepeats(IDirectMusicSegment8 *iface, DWORD repe
static HRESULT WINAPI segment_GetDefaultResolution(IDirectMusicSegment8 *iface, DWORD *resolution) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %p)\n", This, resolution);
@@ -157,7 +155,7 @@ static HRESULT WINAPI segment_GetDefaultResolution(IDirectMusicSegment8 *iface,
static HRESULT WINAPI segment_SetDefaultResolution(IDirectMusicSegment8 *iface, DWORD resolution) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %ld)\n", This, resolution); This->header.dwResolution = resolution; @@ -168,7 +166,7 @@ static HRESULT WINAPI segment_SetDefaultResolution(IDirectMusicSegment8 *iface, static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); CLSID pIt_clsid; struct list* pEntry = NULL; LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL; @@ -216,7 +214,7 @@ static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rgui
static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); struct list* pEntry = NULL; LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL;
@@ -240,7 +238,7 @@ static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirect
static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack, DWORD group) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); DWORD i = 0; struct list* pEntry = NULL; LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL; @@ -274,7 +272,7 @@ static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMu
static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); struct list* pEntry = NULL; LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL;
@@ -300,7 +298,7 @@ static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMu static HRESULT WINAPI segment_InitPlay(IDirectMusicSegment8 *iface, IDirectMusicSegmentState **state, IDirectMusicPerformance *performance, DWORD flags) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); HRESULT hr;
FIXME("(%p, %p, %p, %ld): semi-stub\n", This, state, performance, flags); @@ -314,7 +312,7 @@ static HRESULT WINAPI segment_InitPlay(IDirectMusicSegment8 *iface,
static HRESULT WINAPI segment_GetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph **graph) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
FIXME("(%p, %p): semi-stub\n", This, graph);
@@ -327,7 +325,7 @@ static HRESULT WINAPI segment_GetGraph(IDirectMusicSegment8 *iface, IDirectMusic
static HRESULT WINAPI segment_SetGraph(IDirectMusicSegment8 *iface, IDirectMusicGraph *graph) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
FIXME("(%p, %p): to complete\n", This, graph);
@@ -339,22 +337,22 @@ static HRESULT WINAPI segment_SetGraph(IDirectMusicSegment8 *iface, IDirectMusic
static HRESULT WINAPI segment_AddNotificationType(IDirectMusicSegment8 *iface, REFGUID rguidNotificationType) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); + return S_OK; }
static HRESULT WINAPI segment_RemoveNotificationType(IDirectMusicSegment8 *iface, REFGUID rguidNotificationType) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); + return S_OK; }
static HRESULT WINAPI segment_GetParam(IDirectMusicSegment8 *iface, REFGUID type, DWORD group, DWORD index, MUSIC_TIME time, MUSIC_TIME *next, void *param) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface); IDirectMusicTrack *track; unsigned int i, count; HRESULT hr = DMUS_E_TRACK_NOT_FOUND; @@ -387,16 +385,17 @@ static HRESULT WINAPI segment_GetParam(IDirectMusicSegment8 *iface, REFGUID type static HRESULT WINAPI segment_SetParam(IDirectMusicSegment8 *iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void *pParam) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %s, %#lx, %ld, %ld, %p): stub\n", This, debugstr_dmguid(rguidType), dwGroupBits, dwIndex, mtTime, pParam); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %s, %#lx, %ld, %ld, %p): stub\n", This, debugstr_dmguid(rguidType), dwGroupBits, + dwIndex, mtTime, pParam); + return S_OK; }
static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end, IDirectMusicSegment **segment) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - IDirectMusicSegment8Impl *clone; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + struct segment *clone; IDirectMusicTrack *track; DMUS_PRIVATE_SEGMENT_TRACK *track_item, *cloned_item; HRESULT hr; @@ -444,7 +443,7 @@ static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME star
static HRESULT WINAPI segment_SetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME start) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %ld)\n", This, start);
@@ -456,7 +455,7 @@ static HRESULT WINAPI segment_SetStartPoint(IDirectMusicSegment8 *iface, MUSIC_T
static HRESULT WINAPI segment_GetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME *start) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %p)\n", This, start); if (!start) return E_POINTER; @@ -467,7 +466,7 @@ static HRESULT WINAPI segment_GetStartPoint(IDirectMusicSegment8 *iface, MUSIC_T
static HRESULT WINAPI segment_SetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME start, MUSIC_TIME end) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %ld, %ld)\n", This, start, end);
@@ -481,7 +480,7 @@ static HRESULT WINAPI segment_SetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_T
static HRESULT WINAPI segment_GetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_TIME *start, MUSIC_TIME *end) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); + struct segment *This = impl_from_IDirectMusicSegment8(iface);
TRACE("(%p, %p, %p)\n", This, start, end);
@@ -494,46 +493,47 @@ static HRESULT WINAPI segment_GetLoopPoints(IDirectMusicSegment8 *iface, MUSIC_T
static HRESULT WINAPI segment_SetPChannelsUsed(IDirectMusicSegment8 *iface, DWORD dwNumPChannels, DWORD *paPChannels) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %ld, %p): stub\n", This, dwNumPChannels, paPChannels); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %ld, %p): stub\n", This, dwNumPChannels, paPChannels); + return S_OK; }
static HRESULT WINAPI segment_SetTrackConfig(IDirectMusicSegment8 *iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %s, %#lx, %ld, %ld, %ld): stub\n", This, debugstr_dmguid(rguidTrackClassID), dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %s, %#lx, %ld, %ld, %ld): stub\n", This, debugstr_dmguid(rguidTrackClassID), + dwGroupBits, dwIndex, dwFlagsOn, dwFlagsOff); + return S_OK; }
static HRESULT WINAPI segment_GetAudioPathConfig(IDirectMusicSegment8 *iface, IUnknown **ppAudioPathConfig) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %p): stub\n", This, ppAudioPathConfig); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %p): stub\n", This, ppAudioPathConfig); + return S_OK; }
static HRESULT WINAPI segment_Compose(IDirectMusicSegment8 *iface, MUSIC_TIME mtTime, IDirectMusicSegment *pFromSegment, IDirectMusicSegment *pToSegment, IDirectMusicSegment **ppComposedSegment) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %ld, %p, %p, %p): stub\n", This, mtTime, pFromSegment, pToSegment, ppComposedSegment); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %ld, %p, %p, %p): stub\n", This, mtTime, pFromSegment, pToSegment, ppComposedSegment); + return S_OK; }
static HRESULT WINAPI segment_Download(IDirectMusicSegment8 *iface, IUnknown *pAudioPath) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %p): stub\n", This, pAudioPath); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %p): stub\n", This, pAudioPath); + return S_OK; }
static HRESULT WINAPI segment_Unload(IDirectMusicSegment8 *iface, IUnknown *pAudioPath) { - IDirectMusicSegment8Impl *This = impl_from_IDirectMusicSegment8(iface); - FIXME("(%p, %p): stub\n", This, pAudioPath); - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + FIXME("(%p, %p): stub\n", This, pAudioPath); + return S_OK; }
static const IDirectMusicSegment8Vtbl segment_vtbl = @@ -616,8 +616,7 @@ static const IDirectMusicObjectVtbl segment_object_vtbl = segment_object_ParseDescriptor, };
-static HRESULT parse_track_form(IDirectMusicSegment8Impl *This, IStream *stream, - const struct chunk_entry *riff) +static HRESULT parse_track_form(struct segment *This, IStream *stream, const struct chunk_entry *riff) { struct chunk_entry chunk = {.parent = riff}; IDirectMusicTrack *track = NULL; @@ -699,8 +698,7 @@ done: return hr; }
-static HRESULT parse_track_list(IDirectMusicSegment8Impl *This, IStream *stream, - const struct chunk_entry *trkl) +static HRESULT parse_track_list(struct segment *This, IStream *stream, const struct chunk_entry *trkl) { struct chunk_entry chunk = {.parent = trkl}; HRESULT hr; @@ -742,8 +740,7 @@ static inline void dump_segment_header(DMUS_IO_SEGMENT_HEADER *h, DWORD size) } }
-static HRESULT parse_segment_form(IDirectMusicSegment8Impl *This, IStream *stream, - const struct chunk_entry *riff) +static HRESULT parse_segment_form(struct segment *This, IStream *stream, const struct chunk_entry *riff) { struct chunk_entry chunk = {.parent = riff}; HRESULT hr; @@ -783,12 +780,12 @@ static HRESULT parse_segment_form(IDirectMusicSegment8Impl *This, IStream *strea return SUCCEEDED(hr) ? S_OK : hr; }
-static inline IDirectMusicSegment8Impl *impl_from_IPersistStream(IPersistStream *iface) +static inline struct segment *impl_from_IPersistStream(IPersistStream *iface) { - return CONTAINING_RECORD(iface, IDirectMusicSegment8Impl, dmobj.IPersistStream_iface); + return CONTAINING_RECORD(iface, struct segment, dmobj.IPersistStream_iface); }
-static HRESULT parse_wave_form(IDirectMusicSegment8Impl *This, IStream *stream, const struct chunk_entry *riff) +static HRESULT parse_wave_form(struct segment *This, IStream *stream, const struct chunk_entry *riff) { HRESULT hr; struct chunk_entry chunk = {.parent = riff}; @@ -836,7 +833,7 @@ static HRESULT parse_wave_form(IDirectMusicSegment8Impl *This, IStream *stream,
static HRESULT WINAPI segment_persist_stream_Load(IPersistStream *iface, IStream *stream) { - IDirectMusicSegment8Impl *This = impl_from_IPersistStream(iface); + struct segment *This = impl_from_IPersistStream(iface); struct chunk_entry riff = {0}; HRESULT hr;
@@ -885,12 +882,11 @@ static const IPersistStreamVtbl segment_persist_stream_vtbl = unimpl_IPersistStream_GetSizeMax, };
-IDirectMusicSegment8Impl *segment_create(void) +static struct segment *segment_create(void) { - IDirectMusicSegment8Impl *obj; + struct segment *obj;
if (!(obj = calloc(1, sizeof(*obj)))) return NULL; - obj->IDirectMusicSegment8_iface.lpVtbl = &segment_vtbl; obj->ref = 1; dmobject_init(&obj->dmobj, &CLSID_DirectMusicSegment, (IUnknown *)&obj->IDirectMusicSegment8_iface); @@ -904,7 +900,7 @@ IDirectMusicSegment8Impl *segment_create(void) /* for ClassFactory */ HRESULT create_dmsegment(REFIID guid, void **ret_iface) { - IDirectMusicSegment8Impl *obj; + struct segment *obj; HRESULT hr;
if (!(obj = segment_create()))
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/dmime_private.h | 7 ---- dlls/dmime/segment.c | 69 ++++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 28 deletions(-)
diff --git a/dlls/dmime/dmime_private.h b/dlls/dmime/dmime_private.h index be0c463339f..eacde4b46be 100644 --- a/dlls/dmime/dmime_private.h +++ b/dlls/dmime/dmime_private.h @@ -73,13 +73,6 @@ extern void set_audiopath_primary_dsound_buffer(IDirectMusicAudioPath*,IDirectSo /***************************************************************************** * Auxiliary definitions */ -typedef struct _DMUS_PRIVATE_SEGMENT_TRACK { - struct list entry; /* for listing elements */ - DWORD dwGroupBits; - DWORD flags; - IDirectMusicTrack* pTrack; -} DMUS_PRIVATE_SEGMENT_TRACK, *LPDMUS_PRIVATE_SEGMENT_TRACK; - typedef struct _DMUS_PRIVATE_TEMPO_ITEM { struct list entry; /* for listing elements */ DMUS_IO_TEMPO_ITEM item; diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index fd042842272..1ecc7c9566c 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -23,6 +23,25 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
+struct track_entry +{ + struct list entry; + DWORD dwGroupBits; + DWORD flags; + IDirectMusicTrack *pTrack; +}; + +static void track_entry_destroy(struct track_entry *entry) +{ + HRESULT hr; + + if (FAILED(hr = IDirectMusicTrack_Init(entry->pTrack, NULL))) + WARN("Failed to de-init track %p, hr %#lx\n", entry->pTrack, hr); + IDirectMusicTrack_Release(entry->pTrack); + + free(entry); +} + struct segment { IDirectMusicSegment8 IDirectMusicSegment8_iface; @@ -30,7 +49,7 @@ struct segment LONG ref; DMUS_IO_SEGMENT_HEADER header; IDirectMusicGraph *pGraph; - struct list Tracks; + struct list tracks;
PCMWAVEFORMAT wave_format; void *wave_data; @@ -87,6 +106,14 @@ static ULONG WINAPI segment_Release(IDirectMusicSegment8 *iface) TRACE("(%p) ref=%ld\n", This, ref);
if (!ref) { + struct track_entry *entry, *next; + + LIST_FOR_EACH_ENTRY_SAFE(entry, next, &This->tracks, struct track_entry, entry) + { + list_remove(&entry->entry); + track_entry_destroy(entry); + } + if (This->wave_data) free(This->wave_data);
@@ -169,7 +196,7 @@ static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rgui struct segment *This = impl_from_IDirectMusicSegment8(iface); CLSID pIt_clsid; struct list* pEntry = NULL; - LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL; + struct track_entry *pIt = NULL; IPersistStream* pCLSIDStream = NULL; HRESULT hr = S_OK;
@@ -179,8 +206,8 @@ static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rgui return E_POINTER; }
- LIST_FOR_EACH (pEntry, &This->Tracks) { - pIt = LIST_ENTRY(pEntry, DMUS_PRIVATE_SEGMENT_TRACK, entry); + LIST_FOR_EACH (pEntry, &This->tracks) { + pIt = LIST_ENTRY(pEntry, struct track_entry, entry); TRACE(" - %p -> %#lx,%p\n", pIt, pIt->dwGroupBits, pIt->pTrack); if (0xFFFFFFFF != dwGroupBits && 0 == (pIt->dwGroupBits & dwGroupBits)) continue ; if (FALSE == IsEqualGUID(&GUID_NULL, rguidType)) { @@ -216,7 +243,7 @@ static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirect { struct segment *This = impl_from_IDirectMusicSegment8(iface); struct list* pEntry = NULL; - LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL; + struct track_entry *pIt = NULL;
TRACE("(%p, %p, %p)\n", This, pTrack, pdwGroupBits);
@@ -224,8 +251,8 @@ static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirect return E_POINTER; }
- LIST_FOR_EACH (pEntry, &This->Tracks) { - pIt = LIST_ENTRY(pEntry, DMUS_PRIVATE_SEGMENT_TRACK, entry); + LIST_FOR_EACH (pEntry, &This->tracks) { + pIt = LIST_ENTRY(pEntry, struct track_entry, entry); TRACE(" - %p -> %#lx, %p\n", pIt, pIt->dwGroupBits, pIt->pTrack); if (NULL != pIt && pIt->pTrack == pTrack) { *pdwGroupBits = pIt->dwGroupBits; @@ -241,17 +268,17 @@ static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMu struct segment *This = impl_from_IDirectMusicSegment8(iface); DWORD i = 0; struct list* pEntry = NULL; - LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL; - LPDMUS_PRIVATE_SEGMENT_TRACK pNewSegTrack = NULL; + struct track_entry *pIt = NULL; + struct track_entry *pNewSegTrack = NULL;
TRACE("(%p, %p, %#lx)\n", This, pTrack, group);
if (!group) return E_INVALIDARG;
- LIST_FOR_EACH (pEntry, &This->Tracks) { + LIST_FOR_EACH (pEntry, &This->tracks) { i++; - pIt = LIST_ENTRY(pEntry, DMUS_PRIVATE_SEGMENT_TRACK, entry); + pIt = LIST_ENTRY(pEntry, struct track_entry, entry); TRACE(" - #%lu: %p -> %#lx, %p\n", i, pIt, pIt->dwGroupBits, pIt->pTrack); if (NULL != pIt && pIt->pTrack == pTrack) { ERR("(%p, %p): track is already in list\n", This, pTrack); @@ -265,7 +292,7 @@ static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMu pNewSegTrack->pTrack = pTrack; IDirectMusicTrack_Init(pTrack, (IDirectMusicSegment *)iface); IDirectMusicTrack_AddRef(pTrack); - list_add_tail (&This->Tracks, &pNewSegTrack->entry); + list_add_tail (&This->tracks, &pNewSegTrack->entry);
return S_OK; } @@ -274,12 +301,12 @@ static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMu { struct segment *This = impl_from_IDirectMusicSegment8(iface); struct list* pEntry = NULL; - LPDMUS_PRIVATE_SEGMENT_TRACK pIt = NULL; + struct track_entry *pIt = NULL;
TRACE("(%p, %p)\n", This, pTrack);
- LIST_FOR_EACH (pEntry, &This->Tracks) { - pIt = LIST_ENTRY(pEntry, DMUS_PRIVATE_SEGMENT_TRACK, entry); + LIST_FOR_EACH (pEntry, &This->tracks) { + pIt = LIST_ENTRY(pEntry, struct track_entry, entry); if (pIt->pTrack == pTrack) { TRACE("(%p, %p): track in list\n", This, pTrack);
@@ -397,7 +424,7 @@ static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME star struct segment *This = impl_from_IDirectMusicSegment8(iface); struct segment *clone; IDirectMusicTrack *track; - DMUS_PRIVATE_SEGMENT_TRACK *track_item, *cloned_item; + struct track_entry *track_item, *cloned_item; HRESULT hr; BOOL track_clone_fail = FALSE;
@@ -417,14 +444,14 @@ static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME star if (clone->pGraph) IDirectMusicGraph_AddRef(clone->pGraph);
- LIST_FOR_EACH_ENTRY(track_item, &This->Tracks, DMUS_PRIVATE_SEGMENT_TRACK, entry) { + LIST_FOR_EACH_ENTRY(track_item, &This->tracks, struct track_entry, entry) { if (SUCCEEDED(hr = IDirectMusicTrack_Clone(track_item->pTrack, start, end, &track))) { if ((cloned_item = malloc(sizeof(*cloned_item)))) { cloned_item->dwGroupBits = track_item->dwGroupBits; cloned_item->flags = track_item->flags; cloned_item->pTrack = track; - list_add_tail(&clone->Tracks, &cloned_item->entry); + list_add_tail(&clone->tracks, &cloned_item->entry); continue; } else @@ -625,7 +652,7 @@ static HRESULT parse_track_form(struct segment *This, IStream *stream, const str DMUS_IO_TRACK_HEADER thdr; DMUS_IO_TRACK_EXTRAS_HEADER txhdr = {0}; HRESULT hr; - DMUS_PRIVATE_SEGMENT_TRACK *item; + struct track_entry *item;
TRACE("Parsing track form in %p: %s\n", stream, debugstr_chunk(riff));
@@ -685,7 +712,7 @@ static HRESULT parse_track_form(struct segment *This, IStream *stream, const str if (FAILED(hr)) goto done;
- item = LIST_ENTRY(list_tail(&This->Tracks), DMUS_PRIVATE_SEGMENT_TRACK, entry); + item = LIST_ENTRY(list_tail(&This->tracks), struct track_entry, entry); item->flags = txhdr.dwFlags;
done: @@ -892,7 +919,7 @@ static struct segment *segment_create(void) dmobject_init(&obj->dmobj, &CLSID_DirectMusicSegment, (IUnknown *)&obj->IDirectMusicSegment8_iface); obj->dmobj.IDirectMusicObject_iface.lpVtbl = &segment_object_vtbl; obj->dmobj.IPersistStream_iface.lpVtbl = &segment_persist_stream_vtbl; - list_init (&obj->Tracks); + list_init(&obj->tracks);
return obj; }
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 68 +++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 38 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index 1ecc7c9566c..fc219554588 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -190,52 +190,44 @@ static HRESULT WINAPI segment_SetDefaultResolution(IDirectMusicSegment8 *iface, return S_OK; }
-static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID rguidType, - DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack **ppTrack) +static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID type, DWORD group, + DWORD index, IDirectMusicTrack **ret_track) { struct segment *This = impl_from_IDirectMusicSegment8(iface); - CLSID pIt_clsid; - struct list* pEntry = NULL; - struct track_entry *pIt = NULL; - IPersistStream* pCLSIDStream = NULL; + struct track_entry *entry; HRESULT hr = S_OK;
- TRACE("(%p, %s, %#lx, %#lx, %p)\n", This, debugstr_dmguid(rguidType), dwGroupBits, dwIndex, ppTrack); + TRACE("(%p, %s, %#lx, %#lx, %p)\n", This, debugstr_dmguid(type), group, index, ret_track);
- if (NULL == ppTrack) { - return E_POINTER; - } + if (!ret_track) return E_POINTER;
- LIST_FOR_EACH (pEntry, &This->tracks) { - pIt = LIST_ENTRY(pEntry, struct track_entry, entry); - TRACE(" - %p -> %#lx,%p\n", pIt, pIt->dwGroupBits, pIt->pTrack); - if (0xFFFFFFFF != dwGroupBits && 0 == (pIt->dwGroupBits & dwGroupBits)) continue ; - if (FALSE == IsEqualGUID(&GUID_NULL, rguidType)) { - /** - * it rguidType is not null we must check if CLSIDs are equal - * and the unique way to get it is using IPersistStream Interface - */ - hr = IDirectMusicTrack_QueryInterface(pIt->pTrack, &IID_IPersistStream, (void**) &pCLSIDStream); - if (FAILED(hr)) { - ERR("(%p): object %p don't implement IPersistStream Interface. Expect a crash (critical problem)\n", This, pIt->pTrack); - continue ; + LIST_FOR_EACH_ENTRY(entry, &This->tracks, struct track_entry, entry) + { + if (group != -1 && !(entry->dwGroupBits & group)) continue; + + if (!IsEqualGUID(&GUID_NULL, type)) + { + CLSID entry_type = GUID_NULL; + IPersistStream *persist; + + if (SUCCEEDED(hr = IDirectMusicTrack_QueryInterface(entry->pTrack, &IID_IPersistStream, (void **)&persist))) + { + hr = IPersistStream_GetClassID(persist, &entry_type); + if (SUCCEEDED(hr)) TRACE(" - %p -> %s\n", entry, debugstr_dmguid(&entry_type)); + IPersistStream_Release(persist); + } + + if (!IsEqualGUID(&entry_type, type)) continue; } - hr = IPersistStream_GetClassID(pCLSIDStream, &pIt_clsid); - IPersistStream_Release(pCLSIDStream); pCLSIDStream = NULL; - if (FAILED(hr)) { - ERR("(%p): non-implemented GetClassID for object %p\n", This, pIt->pTrack); - continue ; + + if (!index--) + { + *ret_track = entry->pTrack; + IDirectMusicTrack_AddRef(entry->pTrack); + return S_OK; } - TRACE(" - %p -> %s\n", pIt, debugstr_dmguid(&pIt_clsid)); - if (FALSE == IsEqualGUID(&pIt_clsid, rguidType)) continue ; - } - if (0 == dwIndex) { - *ppTrack = pIt->pTrack; - IDirectMusicTrack_AddRef(*ppTrack); - return S_OK; - } - --dwIndex; - } + } + return DMUS_E_NOT_FOUND; }
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index fc219554588..367e526d659 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -231,25 +231,22 @@ static HRESULT WINAPI segment_GetTrack(IDirectMusicSegment8 *iface, REFGUID type return DMUS_E_NOT_FOUND; }
-static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack, DWORD *pdwGroupBits) +static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirectMusicTrack *track, DWORD *ret_group) { struct segment *This = impl_from_IDirectMusicSegment8(iface); - struct list* pEntry = NULL; - struct track_entry *pIt = NULL; + struct track_entry *entry;
- TRACE("(%p, %p, %p)\n", This, pTrack, pdwGroupBits); + TRACE("(%p, %p, %p)\n", This, track, ret_group);
- if (NULL == pdwGroupBits) { - return E_POINTER; - } + if (!ret_group) return E_POINTER;
- LIST_FOR_EACH (pEntry, &This->tracks) { - pIt = LIST_ENTRY(pEntry, struct track_entry, entry); - TRACE(" - %p -> %#lx, %p\n", pIt, pIt->dwGroupBits, pIt->pTrack); - if (NULL != pIt && pIt->pTrack == pTrack) { - *pdwGroupBits = pIt->dwGroupBits; - return S_OK; - } + LIST_FOR_EACH_ENTRY(entry, &This->tracks, struct track_entry, entry) + { + if (entry->pTrack == track) + { + *ret_group = entry->dwGroupBits; + return S_OK; + } }
return DMUS_E_NOT_FOUND;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 49 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index 367e526d659..a1126fe3d5f 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -252,38 +252,37 @@ static HRESULT WINAPI segment_GetTrackGroup(IDirectMusicSegment8 *iface, IDirect return DMUS_E_NOT_FOUND; }
-static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack, DWORD group) +static HRESULT segment_append_track(struct segment *This, IDirectMusicTrack *track, DWORD group, DWORD flags) { - struct segment *This = impl_from_IDirectMusicSegment8(iface); - DWORD i = 0; - struct list* pEntry = NULL; - struct track_entry *pIt = NULL; - struct track_entry *pNewSegTrack = NULL; + struct track_entry *entry; + HRESULT hr;
- TRACE("(%p, %p, %#lx)\n", This, pTrack, group); + if (!(entry = calloc(1, sizeof(*entry)))) return E_OUTOFMEMORY; + entry->dwGroupBits = group; + entry->flags = flags; + entry->pTrack = track; + IDirectMusicTrack_AddRef(track);
- if (!group) - return E_INVALIDARG; + hr = IDirectMusicTrack_Init(track, (IDirectMusicSegment *)&This->IDirectMusicSegment8_iface); + if (FAILED(hr)) track_entry_destroy(entry); + else list_add_tail(&This->tracks, &entry->entry);
- LIST_FOR_EACH (pEntry, &This->tracks) { - i++; - pIt = LIST_ENTRY(pEntry, struct track_entry, entry); - TRACE(" - #%lu: %p -> %#lx, %p\n", i, pIt, pIt->dwGroupBits, pIt->pTrack); - if (NULL != pIt && pIt->pTrack == pTrack) { - ERR("(%p, %p): track is already in list\n", This, pTrack); - return E_FAIL; - } - } + return hr; +} + +static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *track, DWORD group) +{ + struct segment *This = impl_from_IDirectMusicSegment8(iface); + struct track_entry *entry; + + TRACE("(%p, %p, %#lx)\n", This, track, group);
- if (!(pNewSegTrack = calloc(1, sizeof(*pNewSegTrack)))) return E_OUTOFMEMORY; + if (!group) return E_INVALIDARG;
- pNewSegTrack->dwGroupBits = group; - pNewSegTrack->pTrack = pTrack; - IDirectMusicTrack_Init(pTrack, (IDirectMusicSegment *)iface); - IDirectMusicTrack_AddRef(pTrack); - list_add_tail (&This->tracks, &pNewSegTrack->entry); + LIST_FOR_EACH_ENTRY(entry, &This->tracks, struct track_entry, entry) + if (entry->pTrack == track) return E_FAIL;
- return S_OK; + return segment_append_track(This, track, group, 0); }
static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack)
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index a1126fe3d5f..8b5f12243d9 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -285,29 +285,24 @@ static HRESULT WINAPI segment_InsertTrack(IDirectMusicSegment8 *iface, IDirectMu return segment_append_track(This, track, group, 0); }
-static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *pTrack) +static HRESULT WINAPI segment_RemoveTrack(IDirectMusicSegment8 *iface, IDirectMusicTrack *track) { - struct segment *This = impl_from_IDirectMusicSegment8(iface); - struct list* pEntry = NULL; - struct track_entry *pIt = NULL; - - TRACE("(%p, %p)\n", This, pTrack); - - LIST_FOR_EACH (pEntry, &This->tracks) { - pIt = LIST_ENTRY(pEntry, struct track_entry, entry); - if (pIt->pTrack == pTrack) { - TRACE("(%p, %p): track in list\n", This, pTrack); - - list_remove(&pIt->entry); - IDirectMusicTrack_Init(pIt->pTrack, NULL); - IDirectMusicTrack_Release(pIt->pTrack); - free(pIt); - - return S_OK; + struct segment *This = impl_from_IDirectMusicSegment8(iface); + struct track_entry *entry; + + TRACE("(%p, %p)\n", This, track); + + LIST_FOR_EACH_ENTRY(entry, &This->tracks, struct track_entry, entry) + { + if (entry->pTrack == track) + { + list_remove(&entry->entry); + track_entry_destroy(entry); + return S_OK; + } } - } - - return S_FALSE; + + return S_FALSE; }
static HRESULT WINAPI segment_InitPlay(IDirectMusicSegment8 *iface,
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmime/segment.c | 46 +++++++++++--------------------------------- 1 file changed, 11 insertions(+), 35 deletions(-)
diff --git a/dlls/dmime/segment.c b/dlls/dmime/segment.c index 8b5f12243d9..a72ec786623 100644 --- a/dlls/dmime/segment.c +++ b/dlls/dmime/segment.c @@ -407,14 +407,12 @@ static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME star struct segment *This = impl_from_IDirectMusicSegment8(iface); struct segment *clone; IDirectMusicTrack *track; - struct track_entry *track_item, *cloned_item; - HRESULT hr; - BOOL track_clone_fail = FALSE; + struct track_entry *entry; + HRESULT hr = S_OK;
TRACE("(%p, %ld, %ld, %p)\n", This, start, end, segment);
- if (!segment) - return E_POINTER; + if (!segment) return E_POINTER;
if (!(clone = segment_create())) { @@ -423,32 +421,16 @@ static HRESULT WINAPI segment_Clone(IDirectMusicSegment8 *iface, MUSIC_TIME star }
clone->header = This->header; - clone->pGraph = This->pGraph; - if (clone->pGraph) - IDirectMusicGraph_AddRef(clone->pGraph); - - LIST_FOR_EACH_ENTRY(track_item, &This->tracks, struct track_entry, entry) { - if (SUCCEEDED(hr = IDirectMusicTrack_Clone(track_item->pTrack, start, end, &track))) { - if ((cloned_item = malloc(sizeof(*cloned_item)))) - { - cloned_item->dwGroupBits = track_item->dwGroupBits; - cloned_item->flags = track_item->flags; - cloned_item->pTrack = track; - list_add_tail(&clone->tracks, &cloned_item->entry); - continue; - } - else - { - IDirectMusicTrack_Release(track); - } - } - WARN("Failed to clone track %p: %#lx\n", track_item->pTrack, hr); - track_clone_fail = TRUE; + if ((clone->pGraph = This->pGraph)) IDirectMusicGraph_AddRef(clone->pGraph); + + LIST_FOR_EACH_ENTRY(entry, &This->tracks, struct track_entry, entry) + { + if (FAILED(hr = IDirectMusicTrack_Clone(entry->pTrack, start, end, &track))) break; + if (FAILED(hr = segment_append_track(clone, track, entry->dwGroupBits, entry->flags))) break; }
*segment = (IDirectMusicSegment *)&clone->IDirectMusicSegment8_iface; - - return track_clone_fail ? S_FALSE : S_OK; + return FAILED(hr) ? S_FALSE : S_OK; }
static HRESULT WINAPI segment_SetStartPoint(IDirectMusicSegment8 *iface, MUSIC_TIME start) @@ -635,7 +617,6 @@ static HRESULT parse_track_form(struct segment *This, IStream *stream, const str DMUS_IO_TRACK_HEADER thdr; DMUS_IO_TRACK_EXTRAS_HEADER txhdr = {0}; HRESULT hr; - struct track_entry *item;
TRACE("Parsing track form in %p: %s\n", stream, debugstr_chunk(riff));
@@ -691,12 +672,7 @@ static HRESULT parse_track_form(struct segment *This, IStream *stream, const str if (FAILED(hr)) goto done;
- hr = IDirectMusicSegment8_InsertTrack(&This->IDirectMusicSegment8_iface, track, thdr.dwGroup); - if (FAILED(hr)) - goto done; - - item = LIST_ENTRY(list_tail(&This->tracks), struct track_entry, entry); - item->flags = txhdr.dwFlags; + hr = segment_append_track(This, track, thdr.dwGroup, txhdr.dwFlags);
done: if (ps)
This merge request was approved by Michael Stefaniuc.