Michael Stefaniuc : dmime: Tempo track supports only GUID_TempoParam in GetParam().

Alexandre Julliard julliard at winehq.org
Wed Dec 4 16:13:03 CST 2019


Module: wine
Branch: master
Commit: ca060d45e32c265ef531c8d1f40f4c8234f1dba2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ca060d45e32c265ef531c8d1f40f4c8234f1dba2

Author: Michael Stefaniuc <mstefani at winehq.org>
Date:   Tue Dec  3 23:51:25 2019 +0100

dmime: Tempo track supports only GUID_TempoParam in GetParam().

Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dmime/tempotrack.c  | 77 +++++++++++++++++++++---------------------------
 dlls/dmime/tests/dmime.c |  5 ++++
 2 files changed, 39 insertions(+), 43 deletions(-)

diff --git a/dlls/dmime/tempotrack.c b/dlls/dmime/tempotrack.c
index 442aec37bf..94e4430b7f 100644
--- a/dlls/dmime/tempotrack.c
+++ b/dlls/dmime/tempotrack.c
@@ -153,52 +153,43 @@ static HRESULT WINAPI tempo_track_Play(IDirectMusicTrack8 *iface, void *pStateDa
   return S_OK;
 }
 
-static HRESULT WINAPI tempo_track_GetParam(IDirectMusicTrack8 *iface, REFGUID rguidType,
-        MUSIC_TIME mtTime, MUSIC_TIME *pmtNext, void *pParam)
+static HRESULT WINAPI tempo_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time,
+        MUSIC_TIME *next, void *param)
 {
-  IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface);
-
-  HRESULT hr = S_OK;
-  struct list* pEntry = NULL;
-  LPDMUS_PRIVATE_TEMPO_ITEM pIt = NULL;
-  DMUS_TEMPO_PARAM* prm = pParam;
-
-  FIXME("(%p, %s, %d, %p, %p): almost stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam);
-
-  if (NULL == pParam) {
-    return E_POINTER;
-  }
+    IDirectMusicTempoTrack *This = impl_from_IDirectMusicTrack8(iface);
+    DMUS_PRIVATE_TEMPO_ITEM *item = NULL;
+    DMUS_TEMPO_PARAM *prm = param;
+
+    TRACE("(%p, %s, %d, %p, %p)\n", This, debugstr_dmguid(type), time, next, param);
+
+    if (!param)
+        return E_POINTER;
+    if (!IsEqualGUID(type, &GUID_TempoParam))
+        return DMUS_E_GET_UNSUPPORTED;
+
+    FIXME("Partial support for GUID_TempoParam\n");
+
+    if (next)
+        *next = 0;
+    prm->mtTime = 0;
+    prm->dblTempo = 0.123456;
+
+    LIST_FOR_EACH_ENTRY(item, &This->Items, DMUS_PRIVATE_TEMPO_ITEM, entry) {
+        if (item->item.lTime <= time) {
+            MUSIC_TIME ofs = item->item.lTime - time;
+            if (ofs > prm->mtTime) {
+                prm->mtTime = ofs;
+                prm->dblTempo = item->item.dblTempo;
+            }
+            if (next && item->item.lTime > time && item->item.lTime < *next)
+                *next = item->item.lTime;
+        }
+    }
 
-  hr = IDirectMusicTrack_IsParamSupported (iface, rguidType);
-  if (FAILED(hr)) {
-    return hr;
-  }
+    if (0.123456 == prm->dblTempo)
+        return DMUS_E_NOT_FOUND;
 
-  if (NULL != pmtNext) *pmtNext = 0;
-  prm->mtTime = 0;
-  prm->dblTempo = 0.123456;
-
-  LIST_FOR_EACH (pEntry, &This->Items) {
-    pIt = LIST_ENTRY(pEntry, DMUS_PRIVATE_TEMPO_ITEM, entry);
-    /*TRACE(" - %p -> 0x%lx,%p\n", pIt, pIt->item.lTime, pIt->item.dblTempo);*/
-    if (pIt->item.lTime <= mtTime) {
-      MUSIC_TIME ofs = pIt->item.lTime - mtTime;
-      if (ofs > prm->mtTime) {
-	prm->mtTime = ofs;
-	prm->dblTempo = pIt->item.dblTempo;
-      }	
-      if (NULL != pmtNext && pIt->item.lTime > mtTime) {
-	if (pIt->item.lTime < *pmtNext) {
-	  *pmtNext = pIt->item.lTime;
-	}
-      }
-    }
-  }
-  
-  if (0.123456 == prm->dblTempo) {
-    return DMUS_E_NOT_FOUND;
-  }
-  return S_OK;
+    return S_OK;
 }
 
 static HRESULT WINAPI tempo_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time,
diff --git a/dlls/dmime/tests/dmime.c b/dlls/dmime/tests/dmime.c
index 3e25328cd8..a35470b4cd 100644
--- a/dlls/dmime/tests/dmime.c
+++ b/dlls/dmime/tests/dmime.c
@@ -724,6 +724,11 @@ static void test_track(void)
                                 DMUS_E_GET_UNSUPPORTED);
                     expect_setparam(dmt, &GUID_TimeSignature, "GUID_TimeSignature",
                                 DMUS_E_SET_UNSUPPORTED);
+                } else if (class[i].clsid == &CLSID_DirectMusicTempoTrack) {
+                    expect_getparam(dmt, &GUID_DisableTempo, "GUID_DisableTempo",
+                                DMUS_E_GET_UNSUPPORTED);
+                    expect_getparam(dmt, &GUID_EnableTempo, "GUID_EnableTempo",
+                                DMUS_E_GET_UNSUPPORTED);
                 }
             }
         } else {




More information about the wine-cvs mailing list