quartz: Add additional notifications to transform filter.
This commit is contained in:
parent
b6c523252d
commit
781cb48653
|
@ -515,6 +515,60 @@ static HRESULT WINAPI TransformFilter_InputPin_Disconnect(IPin * iface)
|
||||||
return IPinImpl_Disconnect(iface);
|
return IPinImpl_Disconnect(iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI TransformFilter_InputPin_BeginFlush(IPin * iface)
|
||||||
|
{
|
||||||
|
InputPin* This = (InputPin*) iface;
|
||||||
|
TransformFilterImpl* pTransform;
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
TRACE("(%p)->()\n", iface);
|
||||||
|
|
||||||
|
pTransform = (TransformFilterImpl*)This->pin.pinInfo.pFilter;
|
||||||
|
EnterCriticalSection(&pTransform->csFilter);
|
||||||
|
if (pTransform->pFuncsTable->pfnBeginFlush)
|
||||||
|
hr = pTransform->pFuncsTable->pfnBeginFlush(This);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = InputPin_BeginFlush(iface);
|
||||||
|
LeaveCriticalSection(&pTransform->csFilter);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI TransformFilter_InputPin_EndFlush(IPin * iface)
|
||||||
|
{
|
||||||
|
InputPin* This = (InputPin*) iface;
|
||||||
|
TransformFilterImpl* pTransform;
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
TRACE("(%p)->()\n", iface);
|
||||||
|
|
||||||
|
pTransform = (TransformFilterImpl*)This->pin.pinInfo.pFilter;
|
||||||
|
EnterCriticalSection(&pTransform->csFilter);
|
||||||
|
if (pTransform->pFuncsTable->pfnEndFlush)
|
||||||
|
hr = pTransform->pFuncsTable->pfnEndFlush(This);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = InputPin_EndFlush(iface);
|
||||||
|
LeaveCriticalSection(&pTransform->csFilter);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI TransformFilter_InputPin_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
|
||||||
|
{
|
||||||
|
InputPin* This = (InputPin*) iface;
|
||||||
|
TransformFilterImpl* pTransform;
|
||||||
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
|
TRACE("(%p)->()\n", iface);
|
||||||
|
|
||||||
|
pTransform = (TransformFilterImpl*)This->pin.pinInfo.pFilter;
|
||||||
|
EnterCriticalSection(&pTransform->csFilter);
|
||||||
|
if (pTransform->pFuncsTable->pfnNewSegment)
|
||||||
|
hr = pTransform->pFuncsTable->pfnNewSegment(This, tStart, tStop, dRate);
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
hr = InputPin_NewSegment(iface, tStart, tStop, dRate);
|
||||||
|
LeaveCriticalSection(&pTransform->csFilter);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
static const IPinVtbl TransformFilter_InputPin_Vtbl =
|
static const IPinVtbl TransformFilter_InputPin_Vtbl =
|
||||||
{
|
{
|
||||||
InputPin_QueryInterface,
|
InputPin_QueryInterface,
|
||||||
|
@ -532,9 +586,9 @@ static const IPinVtbl TransformFilter_InputPin_Vtbl =
|
||||||
IPinImpl_EnumMediaTypes,
|
IPinImpl_EnumMediaTypes,
|
||||||
IPinImpl_QueryInternalConnections,
|
IPinImpl_QueryInternalConnections,
|
||||||
TransformFilter_InputPin_EndOfStream,
|
TransformFilter_InputPin_EndOfStream,
|
||||||
InputPin_BeginFlush,
|
TransformFilter_InputPin_BeginFlush,
|
||||||
InputPin_EndFlush,
|
TransformFilter_InputPin_EndFlush,
|
||||||
InputPin_NewSegment
|
TransformFilter_InputPin_NewSegment
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT WINAPI TransformFilter_Output_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum)
|
static HRESULT WINAPI TransformFilter_Output_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnum)
|
||||||
|
|
|
@ -29,6 +29,10 @@ typedef struct TransformFuncsTable {
|
||||||
HRESULT (*pfnQueryConnect) (TransformFilterImpl *This, const AM_MEDIA_TYPE * pmt);
|
HRESULT (*pfnQueryConnect) (TransformFilterImpl *This, const AM_MEDIA_TYPE * pmt);
|
||||||
HRESULT (*pfnConnectInput) (InputPin *pin, const AM_MEDIA_TYPE * pmt);
|
HRESULT (*pfnConnectInput) (InputPin *pin, const AM_MEDIA_TYPE * pmt);
|
||||||
HRESULT (*pfnCleanup) (InputPin *pin);
|
HRESULT (*pfnCleanup) (InputPin *pin);
|
||||||
|
HRESULT (*pfnEndOfStream) (InputPin *pin);
|
||||||
|
HRESULT (*pfnBeginFlush) (InputPin *pin);
|
||||||
|
HRESULT (*pfnEndFlush) (InputPin *pin);
|
||||||
|
HRESULT (*pfnNewSegment) (InputPin *pin, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
|
||||||
} TransformFuncsTable;
|
} TransformFuncsTable;
|
||||||
|
|
||||||
struct TransformFilterImpl
|
struct TransformFilterImpl
|
||||||
|
|
Loading…
Reference in New Issue