Module: wine Branch: master Commit: b0573f9dc3aab086069a16b97dc1d04ae2709cb9 URL: https://gitlab.winehq.org/wine/wine/-/commit/b0573f9dc3aab086069a16b97dc1d04...
Author: Rémi Bernon rbernon@codeweavers.com Date: Sun Sep 10 14:41:51 2023 +0200
dmband: Download / unload bands when initializing / ending band track.
---
dlls/dmband/bandtrack.c | 39 ++++++++++++++++++++++++++++++++++----- dlls/dmband/tests/dmband.c | 2 -- 2 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index 845345a9fa2..6233d39b9c0 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -104,10 +104,13 @@ static ULONG WINAPI band_track_Release(IDirectMusicTrack8 *iface) return ref; }
-static HRESULT WINAPI band_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment) +static HRESULT WINAPI band_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *segment) { struct band_track *This = impl_from_IDirectMusicTrack8(iface); - FIXME("(%p, %p): stub\n", This, pSegment); + + FIXME("(%p, %p): stub\n", This, segment); + + if (!segment) return E_POINTER; return S_OK; }
@@ -116,16 +119,42 @@ static HRESULT WINAPI band_track_InitPlay(IDirectMusicTrack8 *iface, void **state_data, DWORD virtual_track8id, DWORD flags) { struct band_track *This = impl_from_IDirectMusicTrack8(iface); + struct band_entry *entry; + HRESULT hr; + + FIXME("(%p, %p, %p, %p, %ld, %lx): semi-stub\n", This, segment_state, performance, state_data, virtual_track8id, flags); + + if (!performance) return E_POINTER;
- FIXME("(%p, %p, %p, %p, %ld, %lx): stub\n", This, segment_state, performance, state_data, virtual_track8id, flags); + if (This->header.bAutoDownload) + { + LIST_FOR_EACH_ENTRY(entry, &This->bands, struct band_entry, entry) + { + if (FAILED(hr = IDirectMusicBand_Download(entry->band, performance))) + return hr; + } + }
return S_OK; }
-static HRESULT WINAPI band_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData) +static HRESULT WINAPI band_track_EndPlay(IDirectMusicTrack8 *iface, void *state_data) { struct band_track *This = impl_from_IDirectMusicTrack8(iface); - FIXME("(%p, %p): stub\n", This, pStateData); + struct band_entry *entry; + HRESULT hr; + + FIXME("(%p, %p): semi-stub\n", This, state_data); + + if (This->header.bAutoDownload) + { + LIST_FOR_EACH_ENTRY(entry, &This->bands, struct band_entry, entry) + { + if (FAILED(hr = IDirectMusicBand_Unload(entry->band, NULL))) + return hr; + } + } + return S_OK; }
diff --git a/dlls/dmband/tests/dmband.c b/dlls/dmband/tests/dmband.c index 07ffcf4e7fe..ee45ca33714 100644 --- a/dlls/dmband/tests/dmband.c +++ b/dlls/dmband/tests/dmband.c @@ -226,12 +226,10 @@ static void test_bandtrack(void) ok(hr == S_OK, "DirectMusicBandTrack create failed: %#lx, expected S_OK\n", hr);
/* IDirectMusicTrack8 */ - todo_wine { hr = IDirectMusicTrack8_Init(dmt8, NULL); ok(hr == E_POINTER, "IDirectMusicTrack8_Init failed: %#lx\n", hr); hr = IDirectMusicTrack8_InitPlay(dmt8, NULL, NULL, NULL, 0, 0); ok(hr == E_POINTER, "IDirectMusicTrack8_InitPlay failed: %#lx\n", hr); - } hr = IDirectMusicTrack8_EndPlay(dmt8, NULL); ok(hr == S_OK, "IDirectMusicTrack8_EndPlay failed: %#lx\n", hr); hr = IDirectMusicTrack8_Play(dmt8, NULL, 0, 0, 0, 0, NULL, NULL, 0);