Maarten Lankhorst : quartz: Implement seeking on the null renderer.

Alexandre Julliard julliard at winehq.org
Wed Apr 2 16:36:35 CDT 2008


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

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Wed Apr  2 11:57:58 2008 -0700

quartz: Implement seeking on the null renderer.

---

 dlls/quartz/nullrenderer.c |   62 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/dlls/quartz/nullrenderer.c b/dlls/quartz/nullrenderer.c
index d494ca5..6b543c5 100644
--- a/dlls/quartz/nullrenderer.c
+++ b/dlls/quartz/nullrenderer.c
@@ -65,6 +65,7 @@ typedef struct NullRendererImpl
     IUnknown * pUnkOuter;
     BOOL bUnkOuterValid;
     BOOL bAggregatable;
+    MediaSeekingImpl mediaSeeking;
 } NullRendererImpl;
 
 static const IMemInputPinVtbl MemInputPin_Vtbl =
@@ -145,6 +146,62 @@ static HRESULT NullRenderer_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt)
     return S_OK;
 }
 
+static inline NullRendererImpl *impl_from_IMediaSeeking( IMediaSeeking *iface )
+{
+    return (NullRendererImpl *)((char*)iface - FIELD_OFFSET(NullRendererImpl, mediaSeeking.lpVtbl));
+}
+
+static HRESULT WINAPI NullRendererImpl_Seeking_QueryInterface(IMediaSeeking * iface, REFIID riid, LPVOID * ppv)
+{
+    NullRendererImpl *This = impl_from_IMediaSeeking(iface);
+
+    return IUnknown_QueryInterface((IUnknown *)This, riid, ppv);
+}
+
+static ULONG WINAPI NullRendererImpl_Seeking_AddRef(IMediaSeeking * iface)
+{
+    NullRendererImpl *This = impl_from_IMediaSeeking(iface);
+
+    return IUnknown_AddRef((IUnknown *)This);
+}
+
+static ULONG WINAPI NullRendererImpl_Seeking_Release(IMediaSeeking * iface)
+{
+    NullRendererImpl *This = impl_from_IMediaSeeking(iface);
+
+    return IUnknown_Release((IUnknown *)This);
+}
+
+static const IMediaSeekingVtbl TransformFilter_Seeking_Vtbl =
+{
+    NullRendererImpl_Seeking_QueryInterface,
+    NullRendererImpl_Seeking_AddRef,
+    NullRendererImpl_Seeking_Release,
+    MediaSeekingImpl_GetCapabilities,
+    MediaSeekingImpl_CheckCapabilities,
+    MediaSeekingImpl_IsFormatSupported,
+    MediaSeekingImpl_QueryPreferredFormat,
+    MediaSeekingImpl_GetTimeFormat,
+    MediaSeekingImpl_IsUsingTimeFormat,
+    MediaSeekingImpl_SetTimeFormat,
+    MediaSeekingImpl_GetDuration,
+    MediaSeekingImpl_GetStopPosition,
+    MediaSeekingImpl_GetCurrentPosition,
+    MediaSeekingImpl_ConvertTimeFormat,
+    MediaSeekingImpl_SetPositions,
+    MediaSeekingImpl_GetPositions,
+    MediaSeekingImpl_GetAvailable,
+    MediaSeekingImpl_SetRate,
+    MediaSeekingImpl_GetRate,
+    MediaSeekingImpl_GetPreroll
+};
+
+static HRESULT NullRendererImpl_Change(IBaseFilter *iface)
+{
+    TRACE("(%p)\n", iface);
+    return S_OK;
+}
+
 HRESULT NullRenderer_create(IUnknown * pUnkOuter, LPVOID * ppv)
 {
     HRESULT hr;
@@ -181,6 +238,9 @@ HRESULT NullRenderer_create(IUnknown * pUnkOuter, LPVOID * ppv)
     if (SUCCEEDED(hr))
     {
         pNullRenderer->ppPins[0] = (IPin *)pNullRenderer->pInputPin;
+        MediaSeekingImpl_Init((IBaseFilter*)pNullRenderer, NullRendererImpl_Change, NullRendererImpl_Change, NullRendererImpl_Change, &pNullRenderer->mediaSeeking, &pNullRenderer->csFilter);
+        pNullRenderer->mediaSeeking.lpVtbl = &TransformFilter_Seeking_Vtbl;
+
         *ppv = (LPVOID)pNullRenderer;
     }
     else
@@ -212,6 +272,8 @@ static HRESULT WINAPI NullRendererInner_QueryInterface(IUnknown * iface, REFIID
         *ppv = (LPVOID)This;
     else if (IsEqualIID(riid, &IID_IBaseFilter))
         *ppv = (LPVOID)This;
+    else if (IsEqualIID(riid, &IID_IMediaSeeking))
+        *ppv = &This->mediaSeeking;
 
     if (*ppv)
     {




More information about the wine-cvs mailing list