From 11f24690d581f24be9b2c4e0c3b2bbd29e85a79e Mon Sep 17 00:00:00 2001 From: Aric Stewart Date: Mon, 21 May 2012 08:21:48 -0500 Subject: [PATCH] quartz: COM cleanup for ParserImpl. --- dlls/quartz/parser.c | 58 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c index 9b33e0549c9..da9b4b1c977 100644 --- a/dlls/quartz/parser.c +++ b/dlls/quartz/parser.c @@ -53,10 +53,20 @@ static inline ParserImpl *impl_from_IMediaSeeking( IMediaSeeking *iface ) return CONTAINING_RECORD(iface, ParserImpl, sourceSeeking.IMediaSeeking_iface); } +static inline ParserImpl *impl_from_IBaseFilter( IBaseFilter *iface ) +{ + return CONTAINING_RECORD(iface, ParserImpl, filter.IBaseFilter_iface); +} + +static inline ParserImpl *impl_from_BaseFilter( BaseFilter *iface ) +{ + return CONTAINING_RECORD(iface, ParserImpl, filter); +} + /* FIXME: WRONG */ static IPin* WINAPI Parser_GetPin(BaseFilter *iface, int pos) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_BaseFilter(iface); TRACE("Asking for pos %x\n", pos); @@ -70,7 +80,7 @@ static IPin* WINAPI Parser_GetPin(BaseFilter *iface, int pos) static LONG WINAPI Parser_GetPinCount(BaseFilter *iface) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_BaseFilter(iface); return This->cStreams; } @@ -95,7 +105,7 @@ HRESULT Parser_Create(ParserImpl* pParser, const IBaseFilterVtbl *Parser_Vtbl, c /* construct input pin */ piInput.dir = PINDIR_INPUT; - piInput.pFilter = (IBaseFilter *)pParser; + piInput.pFilter = &pParser->filter.IBaseFilter_iface; lstrcpynW(piInput.achName, wcsInputPinName, sizeof(piInput.achName) / sizeof(piInput.achName[0])); if (!start) @@ -119,7 +129,7 @@ HRESULT Parser_Create(ParserImpl* pParser, const IBaseFilterVtbl *Parser_Vtbl, c else { CoTaskMemFree(pParser->ppPins); - BaseFilterImpl_Release((IBaseFilter*)pParser); + BaseFilterImpl_Release(&pParser->filter.IBaseFilter_iface); CoTaskMemFree(pParser); } @@ -128,7 +138,7 @@ HRESULT Parser_Create(ParserImpl* pParser, const IBaseFilterVtbl *Parser_Vtbl, c HRESULT WINAPI Parser_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); TRACE("(%s, %p)\n", qzdebugstr_guid(riid), ppv); *ppv = NULL; @@ -191,7 +201,7 @@ void Parser_Destroy(ParserImpl *This) ULONG WINAPI Parser_Release(IBaseFilter * iface) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); ULONG refCount = BaseFilterImpl_Release(iface); TRACE("(%p)->() Release from %d\n", This, refCount + 1); @@ -206,7 +216,7 @@ ULONG WINAPI Parser_Release(IBaseFilter * iface) HRESULT WINAPI Parser_GetClassID(IBaseFilter * iface, CLSID * pClsid) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); TRACE("(%p)\n", pClsid); @@ -219,7 +229,7 @@ HRESULT WINAPI Parser_GetClassID(IBaseFilter * iface, CLSID * pClsid) HRESULT WINAPI Parser_Stop(IBaseFilter * iface) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]); ULONG i; @@ -258,7 +268,7 @@ HRESULT WINAPI Parser_Stop(IBaseFilter * iface) HRESULT WINAPI Parser_Pause(IBaseFilter * iface) { HRESULT hr = S_OK; - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]); TRACE("()\n"); @@ -292,7 +302,7 @@ HRESULT WINAPI Parser_Pause(IBaseFilter * iface) HRESULT WINAPI Parser_Run(IBaseFilter * iface, REFERENCE_TIME tStart) { HRESULT hr = S_OK; - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]); ULONG i; @@ -339,7 +349,7 @@ HRESULT WINAPI Parser_Run(IBaseFilter * iface, REFERENCE_TIME tStart) HRESULT WINAPI Parser_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]); HRESULT hr = S_OK; @@ -361,7 +371,7 @@ HRESULT WINAPI Parser_GetState(IBaseFilter * iface, DWORD dwMilliSecsTimeout, FI HRESULT WINAPI Parser_SetSyncSource(IBaseFilter * iface, IReferenceClock *pClock) { - ParserImpl *This = (ParserImpl *)iface; + ParserImpl *This = impl_from_IBaseFilter(iface); PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]); TRACE("(%p)\n", pClock); @@ -445,7 +455,7 @@ HRESULT Parser_AddPin(ParserImpl * This, const PIN_INFO * piOutput, ALLOCATOR_PR pin->pin.pin.pinInfo.pFilter = (LPVOID)This; pin->allocProps = *props; This->cStreams++; - BaseFilterImpl_IncrementPinVersion((BaseFilter*)This); + BaseFilterImpl_IncrementPinVersion(&This->filter); CoTaskMemFree(ppOldPins); } else @@ -478,7 +488,7 @@ static HRESULT Parser_RemoveOutputPins(ParserImpl * This) IPin_Release(ppOldPins[i + 1]); } - BaseFilterImpl_IncrementPinVersion((BaseFilter*)This); + BaseFilterImpl_IncrementPinVersion(&This->filter); This->cStreams = 0; CoTaskMemFree(ppOldPins); @@ -551,7 +561,7 @@ static const IMediaSeekingVtbl Parser_Seeking_Vtbl = static HRESULT WINAPI Parser_OutputPin_DecideBufferSize(BaseOutputPin *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest) { - Parser_OutputPin *This = (Parser_OutputPin *)iface; + Parser_OutputPin *This = (Parser_OutputPin*)iface; ALLOCATOR_PROPERTIES actual; if (ppropInputRequest->cbAlign && ppropInputRequest->cbAlign != This->allocProps.cbAlign) @@ -568,7 +578,7 @@ static HRESULT WINAPI Parser_OutputPin_DecideBufferSize(BaseOutputPin *iface, IM static HRESULT WINAPI Parser_OutputPin_GetMediaType(BasePin *iface, int iPosition, AM_MEDIA_TYPE *pmt) { - Parser_OutputPin *This = (Parser_OutputPin *)iface; + Parser_OutputPin *This = (Parser_OutputPin*)iface; if (iPosition < 0) return E_INVALIDARG; if (iPosition > 0) @@ -579,7 +589,7 @@ static HRESULT WINAPI Parser_OutputPin_GetMediaType(BasePin *iface, int iPositio static HRESULT WINAPI Parser_OutputPin_DecideAllocator(BaseOutputPin *iface, IMemInputPin *pPin, IMemAllocator **pAlloc) { - Parser_OutputPin *This = (Parser_OutputPin *)iface; + Parser_OutputPin *This = (Parser_OutputPin*)iface; HRESULT hr; *pAlloc = NULL; @@ -604,7 +614,7 @@ static HRESULT WINAPI Parser_OutputPin_BreakConnect(BaseOutputPin *This) else { hr = IPin_Disconnect(This->pin.pConnectedTo); - IPin_Disconnect((IPin *)This); + IPin_Disconnect(&This->pin.IPin_iface); } LeaveCriticalSection(This->pin.pCritSec); @@ -626,7 +636,7 @@ static HRESULT WINAPI Parser_OutputPin_QueryInterface(IPin * iface, REFIID riid, *ppv = iface; /* The Parser filter does not support querying IMediaSeeking, return it directly */ else if (IsEqualIID(riid, &IID_IMediaSeeking)) - *ppv = &((ParserImpl*)This->pin.pin.pinInfo.pFilter)->sourceSeeking; + *ppv = &impl_from_IBaseFilter(This->pin.pin.pinInfo.pFilter)->sourceSeeking; if (*ppv) { @@ -660,7 +670,7 @@ static ULONG WINAPI Parser_OutputPin_Release(IPin * iface) static HRESULT WINAPI Parser_OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt) { Parser_OutputPin *This = unsafe_impl_Parser_OutputPin_from_IPin(iface); - ParserImpl *parser = (ParserImpl *)This->pin.pin.pinInfo.pFilter; + ParserImpl *parser = impl_from_IBaseFilter(This->pin.pin.pinInfo.pFilter); /* Set the allocator to our input pin's */ EnterCriticalSection(This->pin.pin.pCritSec); @@ -716,7 +726,7 @@ static HRESULT WINAPI Parser_PullPin_QueryInterface(IPin * iface, REFIID riid, L * querying IMediaSeeking */ if (IsEqualIID(riid, &IID_IMediaSeeking)) - *ppv = &((ParserImpl*)This->pin.pinInfo.pFilter)->sourceSeeking; + *ppv = &impl_from_IBaseFilter(This->pin.pinInfo.pFilter)->sourceSeeking; if (*ppv) { @@ -740,7 +750,7 @@ static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface) if (This->pin.pConnectedTo) { FILTER_STATE state; - ParserImpl *Parser = (ParserImpl *)This->pin.pinInfo.pFilter; + ParserImpl *Parser = impl_from_IBaseFilter(This->pin.pinInfo.pFilter); LeaveCriticalSection(This->pin.pCritSec); hr = IBaseFilter_GetState(This->pin.pinInfo.pFilter, INFINITE, &state); @@ -751,7 +761,7 @@ static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface) LeaveCriticalSection(This->pin.pCritSec); PullPin_Disconnect(iface); EnterCriticalSection(This->pin.pCritSec); - hr = Parser_RemoveOutputPins((ParserImpl *)This->pin.pinInfo.pFilter); + hr = Parser_RemoveOutputPins(impl_from_IBaseFilter(This->pin.pinInfo.pFilter)); } else hr = VFW_E_NOT_STOPPED; @@ -777,7 +787,7 @@ static HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin * iface, IPin * pRec BasePin *This = (BasePin *)iface; EnterCriticalSection(This->pCritSec); - Parser_RemoveOutputPins((ParserImpl *)This->pinInfo.pFilter); + Parser_RemoveOutputPins(impl_from_IBaseFilter(This->pinInfo.pFilter)); LeaveCriticalSection(This->pCritSec); } -- 2.11.4.GIT