Hi Michael,
This is causing an error for me, I'll submit a new version shortly.
Regards. Alistair
On 31/7/20 7:42 am, Michael Stefaniuc wrote:
From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com Signed-off-by: Michael Stefaniuc mstefani@winehq.org
v2: Pass the buffer/expected size to stream_chunk_get_data()
dlls/dmime/timesigtrack.c | 54 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-)
diff --git a/dlls/dmime/timesigtrack.c b/dlls/dmime/timesigtrack.c index 697b3e3593b..a85f134e0f1 100644 --- a/dlls/dmime/timesigtrack.c +++ b/dlls/dmime/timesigtrack.c @@ -37,6 +37,11 @@ static inline IDirectMusicTimeSigTrack *impl_from_IDirectMusicTrack(IDirectMusic return CONTAINING_RECORD(iface, IDirectMusicTimeSigTrack, IDirectMusicTrack_iface); }
+static inline IDirectMusicTimeSigTrack *impl_from_IPersistStream(IPersistStream *iface) +{
- return CONTAINING_RECORD(iface, IDirectMusicTimeSigTrack, dmobj.IPersistStream_iface);
+}
- static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface(IDirectMusicTrack *iface, REFIID riid, void **ret_iface) {
@@ -207,10 +212,55 @@ static const IDirectMusicTrackVtbl dmtack_vtbl = { IDirectMusicTrackImpl_Clone };
+static HRESULT parse_timetrack_list(IDirectMusicTimeSigTrack *This, IStream *stream,
struct chunk_entry *timesig)
+{
- HRESULT hr;
- struct chunk_entry chunk = {.parent = timesig};
- DMUS_IO_TIMESIGNATURE_ITEM item;
- TRACE("Parsing segment form in %p: %s\n", stream, debugstr_chunk(timesig));
- while ((hr = stream_next_chunk(stream, &chunk)) == S_OK) {
if (chunk.id != DMUS_FOURCC_TIMESIGNATURE_TRACK)
return DMUS_E_UNSUPPORTED_STREAM;
if (FAILED(hr = stream_chunk_get_data(stream, &chunk, &item, sizeof(item)))) {
WARN("Failed to read data of %s\n", debugstr_chunk(&chunk));
return hr;
}
TRACE("Found DMUS_IO_TIMESIGNATURE_ITEM\n");
TRACE(" - lTime %d\n", item.lTime);
TRACE(" - bBeatsPerMeasure %d\n", item.bBeatsPerMeasure);
TRACE(" - bBeat %d\n", item.bBeat);
TRACE(" - wGridsPerBeat %d\n", item.wGridsPerBeat);
- }
- return SUCCEEDED(hr) ? S_OK : hr;
+}
- static HRESULT WINAPI time_IPersistStream_Load(IPersistStream *iface, IStream *stream) {
- FIXME(": Loading not implemented yet\n");
- return S_OK;
IDirectMusicTimeSigTrack *This = impl_from_IPersistStream(iface);
HRESULT hr;
struct chunk_entry chunk = {0};
TRACE("%p, %p\n", This, stream);
if (!stream)
return E_POINTER;
if ((hr = stream_get_chunk(stream, &chunk) != S_OK))
return hr;
if (chunk.id == FOURCC_LIST && chunk.type == DMUS_FOURCC_TIMESIGTRACK_LIST)
hr = parse_timetrack_list(This, stream, &chunk);
else
hr = DMUS_E_UNSUPPORTED_STREAM;
return hr; }
static const IPersistStreamVtbl persiststream_vtbl = {