dmband: Download / unload bands when initializing / ending band track.

This commit is contained in:
Rémi Bernon 2023-09-10 14:41:51 +02:00 committed by Alexandre Julliard
parent d177709b10
commit b0573f9dc3
2 changed files with 34 additions and 7 deletions

View file

@ -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): stub\n", This, segment_state, performance, state_data, virtual_track8id, flags);
FIXME("(%p, %p, %p, %p, %ld, %lx): semi-stub\n", This, segment_state, performance, state_data, virtual_track8id, flags);
if (!performance) return E_POINTER;
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;
}

View file

@ -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);