Alessandro Pignotti : quartz: Properly implement IGraphVersion in IFilterGraph.

Alexandre Julliard julliard at winehq.org
Mon Feb 25 14:33:47 CST 2013


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

Author: Alessandro Pignotti <a.pignotti at sssup.it>
Date:   Tue Feb 19 16:15:20 2013 +0100

quartz: Properly implement IGraphVersion in IFilterGraph.

---

 dlls/quartz/filtergraph.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index fb0f977..4140d23 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -204,6 +204,7 @@ typedef struct _IFilterGraphImpl {
     LONGLONG stop_position;
     LONG recursioncount;
     IUnknown *pSite;
+    LONG version;
 } IFilterGraphImpl;
 
 static inline IFilterGraphImpl *impl_from_IUnknown(IUnknown *iface)
@@ -457,6 +458,7 @@ static HRESULT WINAPI FilterGraph2_AddFilter(IFilterGraph2 *iface, IBaseFilter *
         This->ppFiltersInGraph[This->nFilters] = pFilter;
         This->pFilterNames[This->nFilters] = wszFilterName;
         This->nFilters++;
+        This->version++;
         IBaseFilter_SetSyncSource(pFilter, This->refClock);
     }
     else
@@ -542,6 +544,7 @@ static HRESULT WINAPI FilterGraph2_RemoveFilter(IFilterGraph2 *iface, IBaseFilte
                 memmove(This->ppFiltersInGraph+i, This->ppFiltersInGraph+i+1, sizeof(IBaseFilter*)*(This->nFilters - 1 - i));
                 memmove(This->pFilterNames+i, This->pFilterNames+i+1, sizeof(LPWSTR)*(This->nFilters - 1 - i));
                 This->nFilters--;
+                This->version++;
                 /* Invalidate interfaces in the cache */
                 for (i = 0; i < This->nItfCacheEntries; i++)
                     if (pFilter == This->ItfCacheEntries[i].filter)
@@ -5580,9 +5583,13 @@ static HRESULT WINAPI GraphVersion_QueryVersion(IGraphVersion *iface, LONG *pVer
 {
     IFilterGraphImpl *This = impl_from_IGraphVersion(iface);
 
-    FIXME("(%p)->(%p): stub!\n", This, pVersion);
+    if(!pVersion)
+        return E_POINTER;
 
-    return E_NOTIMPL;
+    TRACE("(%p)->(%p): current version %i\n", This, pVersion, This->version);
+
+    *pVersion = This->version;
+    return S_OK;
 }
 
 static const IGraphVersionVtbl IGraphVersion_VTable =
@@ -5653,6 +5660,7 @@ HRESULT FilterGraph_create(IUnknown *pUnkOuter, LPVOID *ppObj)
     fimpl->stop_position = -1;
     fimpl->punkFilterMapper2 = NULL;
     fimpl->recursioncount = 0;
+    fimpl->version = 0;
 
     if (pUnkOuter)
         fimpl->outer_unk = pUnkOuter;




More information about the wine-cvs mailing list