From 1cf8f92a18ce788c073abba0c0a20b8ecad8660e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Tue, 24 Oct 2023 14:53:48 +0200 Subject: [PATCH] dmband: Support start_time and end_time Play parameters. --- dlls/dmband/bandtrack.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/dlls/dmband/bandtrack.c b/dlls/dmband/bandtrack.c index f2a40c21751..4756ed194ef 100644 --- a/dlls/dmband/bandtrack.c +++ b/dlls/dmband/bandtrack.c @@ -159,7 +159,7 @@ static HRESULT WINAPI band_track_EndPlay(IDirectMusicTrack8 *iface, void *state_ } static HRESULT WINAPI band_track_Play(IDirectMusicTrack8 *iface, void *state_data, - MUSIC_TIME start_time, MUSIC_TIME end_time, MUSIC_TIME time_offset, DWORD segment_flags, + MUSIC_TIME start_time, MUSIC_TIME end_time, MUSIC_TIME time_offset, DWORD track_flags, IDirectMusicPerformance *performance, IDirectMusicSegmentState *segment_state, DWORD track_id) { struct band_track *This = impl_from_IDirectMusicTrack8(iface); @@ -168,13 +168,11 @@ static HRESULT WINAPI band_track_Play(IDirectMusicTrack8 *iface, void *state_dat HRESULT hr; TRACE("(%p, %p, %ld, %ld, %ld, %#lx, %p, %p, %ld)\n", This, state_data, start_time, end_time, - time_offset, segment_flags, performance, segment_state, track_id); + time_offset, track_flags, performance, segment_state, track_id); if (!performance) return DMUS_S_END; - if (start_time != 0) FIXME("start_time %ld not implemented\n", start_time); - if (end_time != -1) FIXME("end_time %ld not implemented\n", end_time); - if (segment_flags) FIXME("segment_flags %#lx not implemented\n", segment_flags); + if (track_flags) FIXME("track_flags %#lx not implemented\n", track_flags); if (segment_state) FIXME("segment_state %p not implemented\n", segment_state); if (FAILED(hr = IDirectMusicPerformance_QueryInterface(performance, @@ -184,7 +182,13 @@ static HRESULT WINAPI band_track_Play(IDirectMusicTrack8 *iface, void *state_dat LIST_FOR_EACH_ENTRY(entry, &This->bands, struct band_entry, entry) { MUSIC_TIME music_time = entry->head.lBandTimeLogical; - if (music_time != -1) music_time += time_offset; + if (music_time == -1 && !(track_flags & DMUS_TRACKF_START)) continue; + else if (music_time != -1) + { + if (music_time < start_time || music_time >= end_time) continue; + music_time += time_offset; + } + if (FAILED(hr = band_send_messages(entry->band, performance, graph, music_time, track_id))) break; }