From 20d87e768b5e5ea76e5d3eb8a46242160f47cb79 Mon Sep 17 00:00:00 2001 From: Chris Robinson 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 20bfe927a62..f3a6f647484 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 7feeadf71ee..3997782cf8b 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; -- 2.11.4.GIT