From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmband/bandtrack.c | 238 ++++++++++++----------------------- dlls/dmband/dmband_private.h | 14 --- 2 files changed, 83 insertions(+), 169 deletions(-)
diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index 1a3cde5f1db..4bcf6cd8bfe 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -25,7 +25,7 @@ WINE_DECLARE_DEBUG_CHANNEL(dmfile); struct band_entry { struct list entry; - DMUS_PRIVATE_BAND_ITEM_HEADER head; + DMUS_IO_BAND_ITEM_HEADER2 head; IDirectMusicBand *band; };
@@ -331,170 +331,94 @@ static const IDirectMusicTrack8Vtbl band_track_vtbl = band_track_Join, };
-static HRESULT load_band(struct band_track *This, IStream *pClonedStream, - IDirectMusicBand **ppBand, DMUS_PRIVATE_BAND_ITEM_HEADER *pHeader) +static HRESULT parse_lbnd_list(struct band_track *This, IStream *stream, struct chunk_entry *parent) { - HRESULT hr = E_FAIL; - IPersistStream* pPersistStream = NULL; - - hr = CoCreateInstance (&CLSID_DirectMusicBand, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectMusicBand, (LPVOID*) ppBand); - if (FAILED(hr)) { - ERR(": could not create object\n"); - return hr; - } - /* acquire PersistStream interface */ - hr = IDirectMusicBand_QueryInterface (*ppBand, &IID_IPersistStream, (LPVOID*) &pPersistStream); - if (FAILED(hr)) { - ERR(": could not acquire IPersistStream\n"); - return hr; - } - /* load */ - hr = IPersistStream_Load (pPersistStream, pClonedStream); - if (FAILED(hr)) { - ERR(": failed to load object\n"); - return hr; - } - - /* release all loading-related stuff */ - IPersistStream_Release (pPersistStream); - - /* - * @TODO insert pBand into This - */ - if (SUCCEEDED(hr)) - { - struct band_entry *entry; - if (!(entry = calloc(1, sizeof(*entry)))) return E_OUTOFMEMORY; - entry->head = *pHeader; - entry->band = *ppBand; - IDirectMusicBand_AddRef(*ppBand); - list_add_tail(&This->bands, &entry->entry); - } + struct chunk_entry chunk = {.parent = parent}; + DMUS_IO_BAND_ITEM_HEADER2 header2; + struct band_entry *entry; + IDirectMusicBand *band; + HRESULT hr;
- return S_OK; -} + while ((hr = stream_next_chunk(stream, &chunk)) == S_OK) + { + switch (MAKE_IDTYPE(chunk.id, chunk.type)) + { + case DMUS_FOURCC_BANDITEM_CHUNK: + { + DMUS_IO_BAND_ITEM_HEADER header;
-static HRESULT parse_bands_list(struct band_track *This, DMUS_PRIVATE_CHUNK *pChunk, - IStream *pStm) -{ - HRESULT hr = E_FAIL; - DMUS_PRIVATE_CHUNK Chunk; - DWORD StreamSize, ListSize[3], ListCount[3]; - LARGE_INTEGER liMove; /* used when skipping chunks */ + if (SUCCEEDED(hr = stream_chunk_get_data(stream, &chunk, &header, sizeof(header)))) + { + header2.lBandTimeLogical = header.lBandTime; + header2.lBandTimePhysical = header.lBandTime; + }
- IDirectMusicBand* pBand = NULL; - DMUS_PRIVATE_BAND_ITEM_HEADER header; + break; + }
- memset(&header, 0, sizeof header); + case DMUS_FOURCC_BANDITEM_CHUNK2: + hr = stream_chunk_get_data(stream, &chunk, &header2, sizeof(header2)); + break;
- if (pChunk->fccID != DMUS_FOURCC_BANDS_LIST) { - ERR_(dmfile)(": %s chunk should be a BANDS list\n", debugstr_fourcc (pChunk->fccID)); - return E_FAIL; - } + case MAKE_IDTYPE(FOURCC_RIFF, DMUS_FOURCC_BAND_FORM): + { + IPersistStream *persist;
- ListSize[0] = pChunk->dwSize - sizeof(FOURCC); - ListCount[0] = 0; + if (FAILED(hr = CoCreateInstance(&CLSID_DirectMusicBand, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectMusicBand, (void **)&band))) + break;
- do { - IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL); - ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize; - TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - switch (Chunk.fccID) { - case FOURCC_LIST: { - IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL); - TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID)); - ListSize[1] = Chunk.dwSize - sizeof(FOURCC); - ListCount[1] = 0; - do { - IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL); - ListCount[1] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize; - TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - switch (Chunk.fccID) { - case DMUS_FOURCC_BANDITEM_CHUNK: { - DMUS_IO_BAND_ITEM_HEADER tmp_header; - TRACE_(dmfile)(": Band Item chunk v1\n"); - - IStream_Read (pStm, &tmp_header, sizeof(DMUS_IO_BAND_ITEM_HEADER), NULL); - TRACE_(dmfile)(" - lBandTime: %lu\n", tmp_header.lBandTime); - - header.dwVersion = 1; - header.lBandTime = tmp_header.lBandTime; - break; - } - case DMUS_FOURCC_BANDITEM_CHUNK2: { - DMUS_IO_BAND_ITEM_HEADER2 tmp_header2; - TRACE_(dmfile)(": Band Item chunk v2\n"); - - IStream_Read (pStm, &tmp_header2, sizeof(DMUS_IO_BAND_ITEM_HEADER2), NULL); - TRACE_(dmfile)(" - lBandTimeLogical: %lu\n", tmp_header2.lBandTimeLogical); - TRACE_(dmfile)(" - lBandTimePhysical: %lu\n", tmp_header2.lBandTimePhysical); - - header.dwVersion = 2; - header.lBandTimeLogical = tmp_header2.lBandTimeLogical; - header.lBandTimePhysical = tmp_header2.lBandTimePhysical; - break; - } - case FOURCC_RIFF: { - IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL); - TRACE_(dmfile)(": RIFF chunk of type %s\n", debugstr_fourcc(Chunk.fccID)); - StreamSize = Chunk.dwSize - sizeof(FOURCC); - switch (Chunk.fccID) { - case DMUS_FOURCC_BAND_FORM: { - ULARGE_INTEGER liOrigPos; - TRACE_(dmfile)(": BAND RIFF\n"); - - liMove.QuadPart = 0; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, &liOrigPos); - - liMove.QuadPart -= sizeof(FOURCC) + (sizeof(FOURCC)+sizeof(DWORD)); - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - - hr = load_band(This, pStm, &pBand, &header); - if (FAILED(hr)) { - ERR(": could not load track\n"); - return hr; - } - liMove.QuadPart = (LONGLONG)liOrigPos.QuadPart; - IStream_Seek (pStm, liMove, STREAM_SEEK_SET, NULL); - - IDirectMusicTrack_Release(pBand); pBand = NULL; /* now we can release at as it inserted */ - - /** now safe move the cursor */ - liMove.QuadPart = StreamSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - default: { - TRACE_(dmfile)(": unknown chunk (irrelevant & skipping)\n"); - liMove.QuadPart = StreamSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - } - break; - } - default: { - TRACE_(dmfile)(": unknown chunk (irrelevant & skipping)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - } - TRACE_(dmfile)(": ListCount[1] = %ld < ListSize[1] = %ld\n", ListCount[1], ListSize[1]); - } while (ListCount[1] < ListSize[1]); - break; - } - default: { - TRACE_(dmfile)(": unknown chunk (irrelevant & skipping)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; + if (SUCCEEDED(hr = IDirectMusicBand_QueryInterface(band, &IID_IPersistStream, (void **)&persist))) + { + if (SUCCEEDED(hr = stream_reset_chunk_start(stream, &chunk))) + hr = IPersistStream_Load(persist, stream); + IPersistStream_Release(persist); + } + + break; + } + + default: + FIXME("Ignoring chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type)); + break; + } + + if (FAILED(hr)) break; } + + if (FAILED(hr)) return hr; + + if (!(entry = calloc(1, sizeof(*entry)))) return E_OUTOFMEMORY; + entry->head = header2; + entry->band = band; + IDirectMusicBand_AddRef(band); + list_add_tail(&This->bands, &entry->entry); + + return S_OK; +} + +static HRESULT parse_lbdl_list(struct band_track *This, IStream *stream, struct chunk_entry *parent) +{ + struct chunk_entry chunk = {.parent = parent}; + HRESULT hr; + + while ((hr = stream_next_chunk(stream, &chunk)) == S_OK) + { + switch (MAKE_IDTYPE(chunk.id, chunk.type)) + { + case MAKE_IDTYPE(FOURCC_LIST, DMUS_FOURCC_BAND_LIST): + hr = parse_lbnd_list(This, stream, &chunk); + break; + + default: + FIXME("Ignoring chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type)); + break; + } + + if (FAILED(hr)) break; } - TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]); - } while (ListCount[0] < ListSize[0]);
- return S_OK; + return S_OK; }
static HRESULT parse_bandtrack_form(struct band_track *This, DMUS_PRIVATE_CHUNK *pChunk, @@ -560,8 +484,12 @@ static HRESULT parse_bandtrack_form(struct band_track *This, DMUS_PRIVATE_CHUNK break; } case DMUS_FOURCC_BANDS_LIST: { + static const LARGE_INTEGER zero = {0}; + struct chunk_entry chunk = {FOURCC_LIST, .size = Chunk.dwSize, .type = Chunk.fccID}; TRACE_(dmfile)(": TRACK list\n"); - hr = parse_bands_list(This, &Chunk, pStm); + IStream_Seek(pStm, zero, STREAM_SEEK_CUR, &chunk.offset); + chunk.offset.QuadPart -= 12; + hr = parse_lbdl_list(This, pStm, &chunk); if (FAILED(hr)) return hr; break; } diff --git a/dlls/dmband/dmband_private.h b/dlls/dmband/dmband_private.h index da6f0fa302f..40516fac49b 100644 --- a/dlls/dmband/dmband_private.h +++ b/dlls/dmband/dmband_private.h @@ -47,20 +47,6 @@ extern HRESULT create_dmband(REFIID riid, void **ret_iface); extern HRESULT create_dmbandtrack(REFIID riid, void **ret_iface);
- -/***************************************************************************** - * Auxiliary definitions - */ -/* i don't like M$'s idea about two different band item headers, so behold: universal one */ -typedef struct _DMUS_PRIVATE_BAND_ITEM_HEADER { - DWORD dwVersion; /* 1 or 2 */ - /* v.1 */ - MUSIC_TIME lBandTime; - /* v.2 */ - MUSIC_TIME lBandTimeLogical; - MUSIC_TIME lBandTimePhysical; -} DMUS_PRIVATE_BAND_ITEM_HEADER; - /***************************************************************************** * Misc. */
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmband/bandtrack.c | 122 ++++++++++++---------------------------- 1 file changed, 35 insertions(+), 87 deletions(-)
diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index 4bcf6cd8bfe..ae240ee448f 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -421,99 +421,43 @@ static HRESULT parse_lbdl_list(struct band_track *This, IStream *stream, struct return S_OK; }
-static HRESULT parse_bandtrack_form(struct band_track *This, DMUS_PRIVATE_CHUNK *pChunk, - IStream *pStm) +static HRESULT parse_dmbt_chunk(struct band_track *This, IStream *stream, struct chunk_entry *parent) { - HRESULT hr = E_FAIL; - DMUS_PRIVATE_CHUNK Chunk; - DWORD StreamSize, StreamCount, ListSize[3], ListCount[3]; - LARGE_INTEGER liMove; /* used when skipping chunks */ + struct chunk_entry chunk = {.parent = parent}; + HRESULT hr;
- if (pChunk->fccID != DMUS_FOURCC_BANDTRACK_FORM) { - ERR_(dmfile)(": %s chunk should be a BANDTRACK form\n", debugstr_fourcc (pChunk->fccID)); - return E_FAIL; - } + if (FAILED(hr = dmobj_parsedescriptor(stream, parent, &This->dmobj.desc, + DMUS_OBJ_OBJECT|DMUS_OBJ_NAME|DMUS_OBJ_NAME_INAM|DMUS_OBJ_VERSION)) + || FAILED(hr = stream_reset_chunk_data(stream, parent))) + return hr;
- StreamSize = pChunk->dwSize - sizeof(FOURCC); - StreamCount = 0; + while ((hr = stream_next_chunk(stream, &chunk)) == S_OK) + { + switch (MAKE_IDTYPE(chunk.id, chunk.type)) + { + case DMUS_FOURCC_GUID_CHUNK: + case DMUS_FOURCC_VERSION_CHUNK: + case MAKE_IDTYPE(FOURCC_LIST, DMUS_FOURCC_UNFO_LIST): + /* already parsed by dmobj_parsedescriptor */ + break;
- do { - IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL); - StreamCount += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize; - TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - - hr = IDirectMusicUtils_IPersistStream_ParseDescGeneric(&Chunk, pStm, &This->dmobj.desc); - if (FAILED(hr)) return hr; + case DMUS_FOURCC_BANDTRACK_CHUNK: + hr = stream_chunk_get_data(stream, &chunk, &This->header, sizeof(This->header)); + break;
- if (hr == S_FALSE) { - switch (Chunk.fccID) { - case DMUS_FOURCC_BANDTRACK_CHUNK: { - TRACE_(dmfile)(": BandTrack chunk\n"); - IStream_Read (pStm, &This->header, sizeof(DMUS_IO_BAND_TRACK_HEADER), NULL); - TRACE_(dmfile)(" - bAutoDownload: %u\n", This->header.bAutoDownload); - break; - } - case FOURCC_LIST: { - IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL); - TRACE_(dmfile)(": LIST chunk of type %s", debugstr_fourcc(Chunk.fccID)); - ListSize[0] = Chunk.dwSize - sizeof(FOURCC); - ListCount[0] = 0; - switch (Chunk.fccID) { - case DMUS_FOURCC_UNFO_LIST: { - TRACE_(dmfile)(": UNFO list\n"); - do { - IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL); - ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize; - TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - - hr = IDirectMusicUtils_IPersistStream_ParseUNFOGeneric(&Chunk, pStm, &This->dmobj.desc); - if (FAILED(hr)) return hr; - - if (hr == S_FALSE) { - switch (Chunk.fccID) { - default: { - TRACE_(dmfile)(": unknown chunk (irrelevant & skipping)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - } - } - TRACE_(dmfile)(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]); - } while (ListCount[0] < ListSize[0]); - break; - } - case DMUS_FOURCC_BANDS_LIST: { - static const LARGE_INTEGER zero = {0}; - struct chunk_entry chunk = {FOURCC_LIST, .size = Chunk.dwSize, .type = Chunk.fccID}; - TRACE_(dmfile)(": TRACK list\n"); - IStream_Seek(pStm, zero, STREAM_SEEK_CUR, &chunk.offset); - chunk.offset.QuadPart -= 12; - hr = parse_lbdl_list(This, pStm, &chunk); - if (FAILED(hr)) return hr; - break; - } - default: { - TRACE_(dmfile)(": unknown (skipping)\n"); - liMove.QuadPart = Chunk.dwSize - sizeof(FOURCC); - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - } - break; - } - default: { - TRACE_(dmfile)(": unknown chunk (irrelevant & skipping)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - } + case MAKE_IDTYPE(FOURCC_LIST, DMUS_FOURCC_BANDS_LIST): + hr = parse_lbdl_list(This, stream, &chunk); + break; + + default: + FIXME("Ignoring chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type)); + break; + } + + if (FAILED(hr)) break; } - TRACE_(dmfile)(": StreamCount[0] = %ld < StreamSize[0] = %ld\n", StreamCount, StreamSize); - } while (StreamCount < StreamSize);
- return S_OK; + return hr; }
static inline struct band_track *impl_from_IPersistStream(IPersistStream *iface) @@ -538,8 +482,12 @@ static HRESULT WINAPI band_track_persist_stream_Load(IPersistStream *iface, IStr TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); switch (Chunk.fccID) { case DMUS_FOURCC_BANDTRACK_FORM: { + static const LARGE_INTEGER zero = {0}; + struct chunk_entry chunk = {FOURCC_LIST, .size = Chunk.dwSize, .type = Chunk.fccID}; TRACE_(dmfile)(": Band track form\n"); - hr = parse_bandtrack_form(This, &Chunk, pStm); + IStream_Seek(pStm, zero, STREAM_SEEK_CUR, &chunk.offset); + chunk.offset.QuadPart -= 12; + hr = parse_dmbt_chunk(This, pStm, &chunk); if (FAILED(hr)) return hr; break; }
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/dmband/Makefile.in | 3 +- dlls/dmband/bandtrack.c | 85 +++++++------- dlls/dmband/dmband_main.c | 1 + dlls/dmband/dmband_private.h | 6 - dlls/dmband/dmutils.c | 219 ----------------------------------- dlls/dmband/dmutils.h | 37 ------ 6 files changed, 45 insertions(+), 306 deletions(-) delete mode 100644 dlls/dmband/dmutils.c delete mode 100644 dlls/dmband/dmutils.h
diff --git a/dlls/dmband/Makefile.in b/dlls/dmband/Makefile.in index ef6b6a44c60..2c6a59dad4c 100644 --- a/dlls/dmband/Makefile.in +++ b/dlls/dmband/Makefile.in @@ -6,8 +6,7 @@ C_SRCS = \ band.c \ bandtrack.c \ dmband_main.c \ - dmobject.c \ - dmutils.c + dmobject.c
IDL_SRCS = dmband.idl
diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index ae240ee448f..ab12e1f1355 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -20,7 +20,6 @@ #include "dmobject.h"
WINE_DEFAULT_DEBUG_CHANNEL(dmband); -WINE_DECLARE_DEBUG_CHANNEL(dmfile);
struct band_entry { @@ -465,51 +464,53 @@ static inline struct band_track *impl_from_IPersistStream(IPersistStream *iface) return CONTAINING_RECORD(iface, struct band_track, dmobj.IPersistStream_iface); }
-static HRESULT WINAPI band_track_persist_stream_Load(IPersistStream *iface, IStream *pStm) +static HRESULT WINAPI band_track_persist_stream_Load(IPersistStream *iface, IStream *stream) { - struct band_track *This = impl_from_IPersistStream(iface); - DMUS_PRIVATE_CHUNK Chunk; - LARGE_INTEGER liMove; - HRESULT hr; - - TRACE("(%p, %p): Loading\n", This, pStm); - - IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL); - TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - switch (Chunk.fccID) { - case FOURCC_RIFF: { - IStream_Read (pStm, &Chunk.fccID, sizeof(FOURCC), NULL); - TRACE_(dmfile)(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - switch (Chunk.fccID) { - case DMUS_FOURCC_BANDTRACK_FORM: { - static const LARGE_INTEGER zero = {0}; - struct chunk_entry chunk = {FOURCC_LIST, .size = Chunk.dwSize, .type = Chunk.fccID}; - TRACE_(dmfile)(": Band track form\n"); - IStream_Seek(pStm, zero, STREAM_SEEK_CUR, &chunk.offset); - chunk.offset.QuadPart -= 12; - hr = parse_dmbt_chunk(This, pStm, &chunk); - if (FAILED(hr)) return hr; - break; - } - default: { - TRACE_(dmfile)(": unexpected chunk; loading failed)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - return E_FAIL; + struct band_track *This = impl_from_IPersistStream(iface); + struct chunk_entry chunk = {0}; + HRESULT hr; + + TRACE("(%p, %p)\n", This, stream); + + if ((hr = stream_get_chunk(stream, &chunk)) == S_OK) + { + switch (MAKE_IDTYPE(chunk.id, chunk.type)) + { + case MAKE_IDTYPE(FOURCC_RIFF, DMUS_FOURCC_BANDTRACK_FORM): + hr = parse_dmbt_chunk(This, stream, &chunk); + break; + + default: + WARN("Invalid band track chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type)); + hr = DMUS_E_UNSUPPORTED_STREAM; + break; + } } + + if (FAILED(hr)) return hr; + + if (TRACE_ON(dmband)) + { + struct band_entry *entry; + int i = 0; + + TRACE("Loaded DirectMusicBandTrack %p\n", This); + dump_DMUS_OBJECTDESC(&This->dmobj.desc); + + TRACE(" - header:\n"); + TRACE(" - bAutoDownload: %u\n", This->header.bAutoDownload); + + TRACE(" - bands:\n"); + LIST_FOR_EACH_ENTRY(entry, &This->bands, struct band_entry, entry) + { + TRACE(" - band[%u]: %p\n", i++, entry->band); + TRACE(" - lBandTimeLogical: %ld\n", entry->head.lBandTimeLogical); + TRACE(" - lBandTimePhysical: %ld\n", entry->head.lBandTimePhysical); + } } - TRACE_(dmfile)(": reading finished\n"); - break; - } - default: { - TRACE_(dmfile)(": unexpected chunk; loading failed)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); /* skip the rest of the chunk */ - return E_FAIL; - } - }
- return S_OK; + stream_skip_chunk(stream, &chunk); + return S_OK; }
static const IPersistStreamVtbl band_track_persist_stream_vtbl = diff --git a/dlls/dmband/dmband_main.c b/dlls/dmband/dmband_main.c index c032a931f31..55f979e3fbc 100644 --- a/dlls/dmband/dmband_main.c +++ b/dlls/dmband/dmband_main.c @@ -17,6 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#include "initguid.h" #include "dmband_private.h" #include "rpcproxy.h" #include "dmobject.h" diff --git a/dlls/dmband/dmband_private.h b/dlls/dmband/dmband_private.h index 40516fac49b..444fe5ccf55 100644 --- a/dlls/dmband/dmband_private.h +++ b/dlls/dmband/dmband_private.h @@ -47,10 +47,4 @@ extern HRESULT create_dmband(REFIID riid, void **ret_iface); extern HRESULT create_dmbandtrack(REFIID riid, void **ret_iface);
-/***************************************************************************** - * Misc. - */ - -#include "dmutils.h" - #endif /* __WINE_DMBAND_PRIVATE_H */ diff --git a/dlls/dmband/dmutils.c b/dlls/dmband/dmutils.c deleted file mode 100644 index 01cec0f4c64..00000000000 --- a/dlls/dmband/dmutils.c +++ /dev/null @@ -1,219 +0,0 @@ -/* Debug and Helper Functions - * - * Copyright (C) 2004 Rok Mandeljc - * Copyright (C) 2004 Raphael Junqueira - * - * 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 - */ - -#define COBJMACROS - - -#include <stdio.h> -#include <stdarg.h> -#include <string.h> - -#include "windef.h" -#include "winbase.h" -#include "winnt.h" -#include "wingdi.h" -#include "winuser.h" - -#include "wine/debug.h" -#include "objbase.h" - -#include "initguid.h" -#include "dmusici.h" -#include "dmusicf.h" -#include "dmusics.h" - -#include "dmutils.h" -#include "dmobject.h" - -WINE_DEFAULT_DEBUG_CHANNEL(dmfile); - -HRESULT IDirectMusicUtils_IPersistStream_ParseDescGeneric (DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, LPDMUS_OBJECTDESC pDesc) { - - switch (pChunk->fccID) { - case DMUS_FOURCC_GUID_CHUNK: { - TRACE(": GUID chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_OBJECT; - IStream_Read (pStm, &pDesc->guidObject, pChunk->dwSize, NULL); - break; - } - case DMUS_FOURCC_DATE_CHUNK: { - TRACE(": file date chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_DATE; - IStream_Read (pStm, &pDesc->ftDate, pChunk->dwSize, NULL); - break; - } - case DMUS_FOURCC_NAME_CHUNK: { - TRACE(": name chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_NAME; - IStream_Read (pStm, pDesc->wszName, pChunk->dwSize, NULL); - break; - } - case DMUS_FOURCC_FILE_CHUNK: { - TRACE(": file name chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_FILENAME; - IStream_Read (pStm, pDesc->wszFileName, pChunk->dwSize, NULL); - break; - } - case DMUS_FOURCC_VERSION_CHUNK: { - TRACE(": version chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_VERSION; - IStream_Read (pStm, &pDesc->vVersion, pChunk->dwSize, NULL); - break; - } - case DMUS_FOURCC_CATEGORY_CHUNK: { - TRACE(": category chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_CATEGORY; - IStream_Read (pStm, pDesc->wszCategory, pChunk->dwSize, NULL); - break; - } - default: - /* not handled */ - return S_FALSE; - } - - return S_OK; -} - -HRESULT IDirectMusicUtils_IPersistStream_ParseUNFOGeneric (DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, LPDMUS_OBJECTDESC pDesc) { - - LARGE_INTEGER liMove; /* used when skipping chunks */ - - /** - * don't ask me why, but M$ puts INFO elements in UNFO list sometimes - * (though strings seem to be valid unicode) - */ - switch (pChunk->fccID) { - - case mmioFOURCC('I','N','A','M'): - case DMUS_FOURCC_UNAM_CHUNK: { - TRACE(": name chunk\n"); - pDesc->dwValidData |= DMUS_OBJ_NAME; - IStream_Read (pStm, pDesc->wszName, pChunk->dwSize, NULL); - TRACE(" - wszName: %s\n", debugstr_w(pDesc->wszName)); - break; - } - - case mmioFOURCC('I','A','R','T'): - case DMUS_FOURCC_UART_CHUNK: { - TRACE(": artist chunk (ignored)\n"); - liMove.QuadPart = pChunk->dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - case mmioFOURCC('I','C','O','P'): - case DMUS_FOURCC_UCOP_CHUNK: { - TRACE(": copyright chunk (ignored)\n"); - liMove.QuadPart = pChunk->dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - case mmioFOURCC('I','S','B','J'): - case DMUS_FOURCC_USBJ_CHUNK: { - TRACE(": subject chunk (ignored)\n"); - liMove.QuadPart = pChunk->dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - case mmioFOURCC('I','C','M','T'): - case DMUS_FOURCC_UCMT_CHUNK: { - TRACE(": comment chunk (ignored)\n"); - liMove.QuadPart = pChunk->dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - default: - /* not handled */ - return S_FALSE; - } - - return S_OK; -} - -HRESULT IDirectMusicUtils_IPersistStream_ParseReference (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, IDirectMusicObject** ppObject) { - DMUS_PRIVATE_CHUNK Chunk; - DWORD ListSize[3], ListCount[3]; - LARGE_INTEGER liMove; /* used when skipping chunks */ - HRESULT hr; - - DMUS_IO_REFERENCE ref; - DMUS_OBJECTDESC ref_desc; - - memset(&ref, 0, sizeof(ref)); - memset(&ref_desc, 0, sizeof(ref_desc)); - - if (pChunk->fccID != DMUS_FOURCC_REF_LIST) { - ERR_(dmfile)(": %s chunk should be a REF list\n", debugstr_fourcc (pChunk->fccID)); - return E_FAIL; - } - - ListSize[0] = pChunk->dwSize - sizeof(FOURCC); - ListCount[0] = 0; - - do { - IStream_Read (pStm, &Chunk, sizeof(FOURCC)+sizeof(DWORD), NULL); - ListCount[0] += sizeof(FOURCC) + sizeof(DWORD) + Chunk.dwSize; - TRACE(": %s chunk (size = %ld)", debugstr_fourcc (Chunk.fccID), Chunk.dwSize); - - hr = IDirectMusicUtils_IPersistStream_ParseDescGeneric(&Chunk, pStm, &ref_desc); - if (FAILED(hr)) return hr; - - if (hr == S_FALSE) { - switch (Chunk.fccID) { - case DMUS_FOURCC_REF_CHUNK: { - TRACE(": Reference chunk\n"); - if (Chunk.dwSize != sizeof(DMUS_IO_REFERENCE)) return E_FAIL; - IStream_Read (pStm, &ref, sizeof(DMUS_IO_REFERENCE), NULL); - TRACE(" - guidClassID: %s\n", debugstr_dmguid(&ref.guidClassID)); - TRACE(" - dwValidData: %lu\n", ref.dwValidData); - break; - } - default: { - TRACE(": unknown chunk (irrelevant & skipping)\n"); - liMove.QuadPart = Chunk.dwSize; - IStream_Seek (pStm, liMove, STREAM_SEEK_CUR, NULL); - break; - } - } - } - TRACE(": ListCount[0] = %ld < ListSize[0] = %ld\n", ListCount[0], ListSize[0]); - } while (ListCount[0] < ListSize[0]); - - ref_desc.dwValidData |= DMUS_OBJ_CLASS; - ref_desc.guidClass = ref.guidClassID; - - TRACE("** DM Reference Begin of Load ***\n"); - TRACE("With Desc:\n"); - dump_DMUS_OBJECTDESC(&ref_desc); - - { - LPDIRECTMUSICGETLOADER pGetLoader = NULL; - LPDIRECTMUSICLOADER pLoader = NULL; - - IStream_QueryInterface (pStm, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader); - IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader); - IDirectMusicGetLoader_Release (pGetLoader); - - hr = IDirectMusicLoader_GetObject (pLoader, &ref_desc, &IID_IDirectMusicObject, (LPVOID*)ppObject); - IDirectMusicLoader_Release (pLoader); /* release loader */ - } - TRACE("** DM Reference End of Load ***\n"); - - return hr; -} diff --git a/dlls/dmband/dmutils.h b/dlls/dmband/dmutils.h deleted file mode 100644 index 7f9b98cf310..00000000000 --- a/dlls/dmband/dmutils.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Debug and Helper Functions - * - * Copyright (C) 2003-2004 Rok Mandeljc - * Copyright (C) 2003-2004 Raphael Junqueira - * - * 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 - */ - -#ifndef __WINE_DMUTILS_H -#define __WINE_DMUTILS_H - -/* for simpler reading */ -typedef struct _DMUS_PRIVATE_CHUNK { - FOURCC fccID; /* FOURCC ID of the chunk */ - DWORD dwSize; /* size of the chunk */ -} DMUS_PRIVATE_CHUNK, *LPDMUS_PRIVATE_CHUNK; - -/** - * Parsing utilities - */ -extern HRESULT IDirectMusicUtils_IPersistStream_ParseDescGeneric (DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, LPDMUS_OBJECTDESC pDesc); -extern HRESULT IDirectMusicUtils_IPersistStream_ParseUNFOGeneric (DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, LPDMUS_OBJECTDESC pDesc); -extern HRESULT IDirectMusicUtils_IPersistStream_ParseReference (LPPERSISTSTREAM iface, DMUS_PRIVATE_CHUNK* pChunk, IStream* pStm, IDirectMusicObject** ppObject); - -#endif /* __WINE_DMUTILS_H */
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=137690
Your paranoid android.
=== debian11b (64 bit WoW report) ===
ieframe: ie: Timeout webbrowser: Timeout
mf: mf: Timeout
mshtml: events: Timeout htmldoc.c:3310: Test failed: Incorrect error code: -2146697208 htmldoc.c:3315: Test failed: Page address: L"http://test.winehq.org/tests/winehq_snapshot/" htmldoc.c:3197: Test failed: unexpected state L"loading", expected 3 htmldoc.c:3197: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3197: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3253: Test failed: unexpected state L"loading", expected 3 htmldoc.c:3253: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3253: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3019: Test failed: unexpected state L"loading", expected 3 htmldoc.c:3019: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3019: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:6088: Test failed: expected Invoke_OnReadyStateChange_Interactive htmldoc.c:6110: Test failed: expected OnChanged_1005 htmldoc.c:6155: Test succeeded inside todo block: expected IsErrorUrl htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:8247: Test failed: domain = L"test.winehq.org" htmldoc.c:8252: Test failed: put_domain failed: 00000000, expected E_INVALIDARG htmldoc.c:8257: Test failed: domain = L"test.winehq.org" htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:3310: Test failed: Incorrect error code: -2146697208 htmldoc.c:3315: Test failed: Page address: L"http://test.winehq.org/tests/winehq_snapshot/" htmldoc.c:3197: Test failed: unexpected state L"loading", expected 3 htmldoc.c:3197: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3197: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3253: Test failed: unexpected state L"loading", expected 3 htmldoc.c:3253: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3253: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3019: Test failed: unexpected state L"loading", expected 3 htmldoc.c:3019: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:3019: Test failed: VT_I4(out)=1, expected 3 htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:6088: Test failed: expected Invoke_OnReadyStateChange_Interactive htmldoc.c:6110: Test failed: expected OnChanged_1005 htmldoc.c:6149: Test failed: expected FireNavigateComplete2 htmldoc.c:6155: Test succeeded inside todo block: expected IsErrorUrl htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:8247: Test failed: domain = L"test.winehq.org" htmldoc.c:8252: Test failed: put_domain failed: 00000000, expected E_INVALIDARG htmldoc.c:8257: Test failed: domain = L"test.winehq.org" htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:3725: Test failed: L"domInteractive" is 0 htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:5587: Test failed: doScroll failed: 8000000a htmldoc.c:3310: Test failed: Incorrect error code: -2146697208 htmldoc.c:3315: Test failed: Page address: L"http://test.winehq.org/tests/winehq_snapshot/#test" htmldoc: Timeout script.c:1141: Test failed: L"/events.html: extern_http_script_rs = loading,loaded, expected loading,loaded,complete, or complete," xmlhttprequest: Timeout
msxml3: httpreq.c:1594: Test failed: Unexpected hr 0x800c0008. Unhandled exception: page fault on read access to 0x0000000000000000 in 64-bit code (0x000000695ce7c8).
This merge request was approved by Michael Stefaniuc.
Usual non-DMusic related test failures.