[2/2] quartz: Make sure cached media samples are released for
parser filters
Chris Robinson
chris.kcat at gmail.com
Fri Apr 6 23:28:18 CDT 2007
-------------- next part --------------
From f4589bc0eec3117a450091fe561e7d72b05dddc5 Mon Sep 17 00:00:00 2001
From: Chris Robinson <chris.kcat at gmail.com>
Date: Fri, 6 Apr 2007 21:24:59 -0700
Subject: [PATCH] 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;
--
1.4.4.4
More information about the wine-patches
mailing list