Chris Robinson : quartz: Make sure cached media samples are released for parser filters.

Alexandre Julliard julliard at wine.codeweavers.com
Sat Apr 7 05:23:19 CDT 2007


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

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Fri Apr  6 21:24:59 2007 -0700

quartz: Make sure cached media samples are released for parser filters.

---

 dlls/quartz/avisplit.c   |   15 ++++++++++++++-
 dlls/quartz/waveparser.c |   15 ++++++++++++++-
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/dlls/quartz/avisplit.c b/dlls/quartz/avisplit.c
index 20bfe92..f3a6f64 100644
--- a/dlls/quartz/avisplit.c
+++ b/dlls/quartz/avisplit.c
@@ -577,6 +577,19 @@ static HRESULT AVISplitter_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
     return hr;
 }
 
+static HRESULT AVISplitter_Cleanup(LPVOID iface)
+{
+    AVISplitterImpl *This = (AVISplitterImpl*)iface;
+
+    TRACE("(%p)->()\n", This);
+
+    if (This->pCurrentSample)
+        IMediaSample_Release(This->pCurrentSample);
+    This->pCurrentSample = NULL;
+
+    return S_OK;
+}
+
 HRESULT AVISplitter_create(IUnknown * pUnkOuter, LPVOID * ppv)
 {
     HRESULT hr;
@@ -594,7 +607,7 @@ HRESULT AVISplitter_create(IUnknown * pUnkOuter, LPVOID * ppv)
 
     This->pCurrentSample = NULL;
 
-    hr = Parser_Create(&(This->Parser), &CLSID_AviSplitter, AVISplitter_Sample, AVISplitter_QueryAccept, AVISplitter_InputPin_PreConnect, NULL);
+    hr = Parser_Create(&(This->Parser), &CLSID_AviSplitter, AVISplitter_Sample, AVISplitter_QueryAccept, AVISplitter_InputPin_PreConnect, AVISplitter_Cleanup);
 
     if (FAILED(hr))
         return hr;
diff --git a/dlls/quartz/waveparser.c b/dlls/quartz/waveparser.c
index 7feeadf..3997782 100644
--- a/dlls/quartz/waveparser.c
+++ b/dlls/quartz/waveparser.c
@@ -301,6 +301,19 @@ static HRESULT WAVEParser_InputPin_PreConnect(IPin * iface, IPin * pConnectPin)
     return hr;
 }
 
+static HRESULT WAVEParser_Cleanup(LPVOID iface)
+{
+    WAVEParserImpl *This = (WAVEParserImpl*)iface;
+
+    TRACE("(%p)->()\n", This);
+
+    if (This->pCurrentSample)
+        IMediaSample_Release(This->pCurrentSample);
+    This->pCurrentSample = NULL;
+
+    return S_OK;
+}
+
 HRESULT WAVEParser_create(IUnknown * pUnkOuter, LPVOID * ppv)
 {
     HRESULT hr;
@@ -318,7 +331,7 @@ HRESULT WAVEParser_create(IUnknown * pUnkOuter, LPVOID * ppv)
 
     This->pCurrentSample = NULL;
 
-    hr = Parser_Create(&(This->Parser), &CLSID_WAVEParser, WAVEParser_Sample, WAVEParser_QueryAccept, WAVEParser_InputPin_PreConnect, NULL);
+    hr = Parser_Create(&(This->Parser), &CLSID_WAVEParser, WAVEParser_Sample, WAVEParser_QueryAccept, WAVEParser_InputPin_PreConnect, WAVEParser_Cleanup);
 
     if (FAILED(hr))
         return hr;




More information about the wine-cvs mailing list