Alistair Leslie-Hughes : wmvcore: Support IReferenceClock interfaces in IWMReader.

Alexandre Julliard julliard at winehq.org
Mon Jul 24 15:51:20 CDT 2017


Module: wine
Branch: master
Commit: 98e94b25b3917ef211a8b6e133bc2e23253013ff
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=98e94b25b3917ef211a8b6e133bc2e23253013ff

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Sun Jul 23 00:51:45 2017 +0000

wmvcore: Support IReferenceClock interfaces in IWMReader.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wmvcore/tests/wmvcore.c |  6 ++++
 dlls/wmvcore/wmvcore_main.c  | 71 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 77 insertions(+)

diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c
index 5bfec25..ca99d5a 100644
--- a/dlls/wmvcore/tests/wmvcore.c
+++ b/dlls/wmvcore/tests/wmvcore.c
@@ -83,6 +83,7 @@ static void test_wmreader_interfaces(void)
     IWMDRMReader3      *drmreader3;
     IWMReaderPlaylistBurn *playlist;
     IWMLanguageList       *langlist;
+    IReferenceClock       *refclock;
 
     hr = WMCreateReader( NULL, 0, &reader );
     ok(hr == S_OK, "WMCreateReader failed 0x%08x\n", hr);
@@ -155,6 +156,9 @@ static void test_wmreader_interfaces(void)
     hr = IWMReader_QueryInterface(reader, &IID_IWMLanguageList, (void **)&langlist);
     ok(hr == S_OK, "Failed 0x%08x\n", hr);
 
+    hr = IWMReader_QueryInterface(reader, &IID_IReferenceClock, (void **)&refclock);
+    ok(hr == S_OK, "Failed 0x%08x\n", hr);
+
     if(packet)
         IWMPacketSize_Release(packet);
     if(packet2)
@@ -191,6 +195,8 @@ static void test_wmreader_interfaces(void)
         IWMReaderPlaylistBurn_Release(playlist);
     if(langlist)
         IWMLanguageList_Release(langlist);
+    if(refclock)
+        IReferenceClock_Release(refclock);
 
     IWMReader_Release(reader);
 }
diff --git a/dlls/wmvcore/wmvcore_main.c b/dlls/wmvcore/wmvcore_main.c
index 9619463..b762958 100644
--- a/dlls/wmvcore/wmvcore_main.c
+++ b/dlls/wmvcore/wmvcore_main.c
@@ -74,6 +74,7 @@ typedef struct {
     IWMReaderPlaylistBurn IWMReaderPlaylistBurn_iface;
     IWMHeaderInfo3 IWMHeaderInfo3_iface;
     IWMLanguageList IWMLanguageList_iface;
+    IReferenceClock IReferenceClock_iface;
     LONG ref;
 } WMReader;
 
@@ -143,6 +144,9 @@ static HRESULT WINAPI WMReader_QueryInterface(IWMReader *iface, REFIID riid, voi
     }else if(IsEqualGUID(riid, &IID_IWMLanguageList)) {
         TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv);
         *ppv = &This->IWMLanguageList_iface;
+    }else if(IsEqualGUID(riid, &IID_IReferenceClock)) {
+        TRACE("(%p)->(IWMLanguageList %p)\n", This, ppv);
+        *ppv = &This->IReferenceClock_iface;
     }else {
         *ppv = NULL;
         FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
@@ -1641,6 +1645,72 @@ static const IWMLanguageListVtbl WMLanguageListVtbl =
     langlist_AddLanguageByRFC1766String
 };
 
+static inline WMReader *impl_from_IReferenceClock(IReferenceClock *iface)
+{
+    return CONTAINING_RECORD(iface, WMReader, IReferenceClock_iface);
+}
+
+static HRESULT WINAPI refclock_QueryInterface(IReferenceClock *iface, REFIID riid, void **ppv)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    return IWMReader_QueryInterface(&This->IWMReader_iface, riid, ppv);
+}
+
+static ULONG WINAPI refclock_AddRef(IReferenceClock *iface)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    return IWMReader_AddRef(&This->IWMReader_iface);
+}
+
+static ULONG WINAPI refclock_Release(IReferenceClock *iface)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    return IWMReader_Release(&This->IWMReader_iface);
+}
+
+static HRESULT WINAPI refclock_GetTime(IReferenceClock *iface, REFERENCE_TIME *time)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    FIXME("%p, %p\n", This, time);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI refclock_AdviseTime(IReferenceClock *iface, REFERENCE_TIME basetime,
+        REFERENCE_TIME streamtime, HEVENT event, DWORD_PTR *cookie)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    FIXME("%p, %s, %s, %lu, %p\n", This, wine_dbgstr_longlong(basetime),
+            wine_dbgstr_longlong(streamtime), event, cookie);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI refclock_AdvisePeriodic(IReferenceClock *iface, REFERENCE_TIME starttime,
+        REFERENCE_TIME period, HSEMAPHORE semaphore, DWORD_PTR *cookie)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    FIXME("%p, %s, %s, %lu, %p\n", This, wine_dbgstr_longlong(starttime),
+            wine_dbgstr_longlong(period), semaphore, cookie);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI refclock_Unadvise(IReferenceClock *iface, DWORD_PTR cookie)
+{
+    WMReader *This = impl_from_IReferenceClock(iface);
+    FIXME("%p, %lu\n", This, cookie);
+    return E_NOTIMPL;
+}
+
+static const IReferenceClockVtbl ReferenceClockVtbl =
+{
+    refclock_QueryInterface,
+    refclock_AddRef,
+    refclock_Release,
+    refclock_GetTime,
+    refclock_AdviseTime,
+    refclock_AdvisePeriodic,
+    refclock_Unadvise
+};
+
 HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_reader)
 {
     WMReader *reader;
@@ -1661,6 +1731,7 @@ HRESULT WINAPI WMCreateReader(IUnknown *reserved, DWORD rights, IWMReader **ret_
     reader->IWMReaderPlaylistBurn_iface.lpVtbl = &WMReaderPlaylistBurnVtbl;
     reader->IWMHeaderInfo3_iface.lpVtbl = &WMHeaderInfo3Vtbl;
     reader->IWMLanguageList_iface.lpVtbl = &WMLanguageListVtbl;
+    reader->IReferenceClock_iface.lpVtbl = &ReferenceClockVtbl;
     reader->ref = 1;
 
     *ret_reader = &reader->IWMReader_iface;




More information about the wine-cvs mailing list