quartz: Allow parser filters to implement their own seeking methods.
This commit is contained in:
parent
6fd90f1625
commit
1544e52397
|
@ -622,7 +622,7 @@ HRESULT AVISplitter_create(IUnknown * pUnkOuter, LPVOID * ppv)
|
|||
This->pCurrentSample = NULL;
|
||||
This->streams = NULL;
|
||||
|
||||
hr = Parser_Create(&(This->Parser), &CLSID_AviSplitter, AVISplitter_Sample, AVISplitter_QueryAccept, AVISplitter_InputPin_PreConnect, AVISplitter_Cleanup);
|
||||
hr = Parser_Create(&(This->Parser), &CLSID_AviSplitter, AVISplitter_Sample, AVISplitter_QueryAccept, AVISplitter_InputPin_PreConnect, AVISplitter_Cleanup, NULL, NULL, NULL);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
|
|
@ -721,7 +721,7 @@ HRESULT MPEGSplitter_create(IUnknown * pUnkOuter, LPVOID * ppv)
|
|||
return E_OUTOFMEMORY;
|
||||
|
||||
ZeroMemory(This, sizeof(MPEGSplitterImpl));
|
||||
hr = Parser_Create(&(This->Parser), &CLSID_MPEG1Splitter, MPEGSplitter_process_sample, MPEGSplitter_query_accept, MPEGSplitter_pre_connect, MPEGSplitter_cleanup);
|
||||
hr = Parser_Create(&(This->Parser), &CLSID_MPEG1Splitter, MPEGSplitter_process_sample, MPEGSplitter_query_accept, MPEGSplitter_pre_connect, MPEGSplitter_cleanup, NULL, NULL, NULL);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
CoTaskMemFree(This);
|
||||
|
|
|
@ -43,7 +43,7 @@ static const IPinVtbl Parser_OutputPin_Vtbl;
|
|||
static const IPinVtbl Parser_InputPin_Vtbl;
|
||||
|
||||
static HRESULT Parser_OutputPin_QueryAccept(LPVOID iface, const AM_MEDIA_TYPE * pmt);
|
||||
static HRESULT Parser_ChangeStart(IBaseFilter *iface);
|
||||
static HRESULT Parser_ChangeCurrent(IBaseFilter *iface);
|
||||
static HRESULT Parser_ChangeStop(IBaseFilter *iface);
|
||||
static HRESULT Parser_ChangeRate(IBaseFilter *iface);
|
||||
|
||||
|
@ -55,7 +55,7 @@ static inline ParserImpl *impl_from_IMediaSeeking( IMediaSeeking *iface )
|
|||
}
|
||||
|
||||
|
||||
HRESULT Parser_Create(ParserImpl* pParser, const CLSID* pClsid, PFN_PROCESS_SAMPLE fnProcessSample, PFN_QUERY_ACCEPT fnQueryAccept, PFN_PRE_CONNECT fnPreConnect, PFN_CLEANUP fnCleanup)
|
||||
HRESULT Parser_Create(ParserImpl* pParser, const CLSID* pClsid, PFN_PROCESS_SAMPLE fnProcessSample, PFN_QUERY_ACCEPT fnQueryAccept, PFN_PRE_CONNECT fnPreConnect, PFN_CLEANUP fnCleanup, CHANGEPROC stop, CHANGEPROC current, CHANGEPROC rate)
|
||||
{
|
||||
HRESULT hr;
|
||||
PIN_INFO piInput;
|
||||
|
@ -80,7 +80,16 @@ HRESULT Parser_Create(ParserImpl* pParser, const CLSID* pClsid, PFN_PROCESS_SAMP
|
|||
piInput.pFilter = (IBaseFilter *)pParser;
|
||||
lstrcpynW(piInput.achName, wcsInputPinName, sizeof(piInput.achName) / sizeof(piInput.achName[0]));
|
||||
|
||||
MediaSeekingImpl_Init((IBaseFilter*)pParser, Parser_ChangeStop, Parser_ChangeStart, Parser_ChangeRate, &pParser->mediaSeeking, &pParser->csFilter);
|
||||
if (!current)
|
||||
current = Parser_ChangeCurrent;
|
||||
|
||||
if (!stop)
|
||||
stop = Parser_ChangeStop;
|
||||
|
||||
if (!rate)
|
||||
rate = Parser_ChangeRate;
|
||||
|
||||
MediaSeekingImpl_Init((IBaseFilter*)pParser, stop, current, rate, &pParser->mediaSeeking, &pParser->csFilter);
|
||||
pParser->mediaSeeking.lpVtbl = &Parser_Seeking_Vtbl;
|
||||
|
||||
hr = Parser_InputPin_Construct(&piInput, fnProcessSample, (LPVOID)pParser, fnQueryAccept, &pParser->csFilter, (IPin **)&pParser->pInputPin);
|
||||
|
@ -551,21 +560,21 @@ static HRESULT Parser_RemoveOutputPins(ParserImpl * This)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT Parser_ChangeStart(IBaseFilter *iface)
|
||||
static HRESULT Parser_ChangeCurrent(IBaseFilter *iface)
|
||||
{
|
||||
FIXME("(%p)\n", iface);
|
||||
FIXME("(%p) filter hasn't implemented current position change!\n", iface);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT Parser_ChangeStop(IBaseFilter *iface)
|
||||
{
|
||||
FIXME("(%p)\n", iface);
|
||||
FIXME("(%p) filter hasn't implemented stop position change!\n", iface);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT Parser_ChangeRate(IBaseFilter *iface)
|
||||
{
|
||||
FIXME("(%p)\n", iface);
|
||||
FIXME("(%p) filter hasn't implemented rate change!\n", iface);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -54,4 +54,4 @@ typedef struct Parser_OutputPin
|
|||
|
||||
HRESULT Parser_AddPin(ParserImpl * This, const PIN_INFO * piOutput, ALLOCATOR_PROPERTIES * props, const AM_MEDIA_TYPE * amt);
|
||||
|
||||
HRESULT Parser_Create(ParserImpl*, const CLSID*, PFN_PROCESS_SAMPLE, PFN_QUERY_ACCEPT, PFN_PRE_CONNECT, PFN_CLEANUP);
|
||||
HRESULT Parser_Create(ParserImpl*, const CLSID*, PFN_PROCESS_SAMPLE, PFN_QUERY_ACCEPT, PFN_PRE_CONNECT, PFN_CLEANUP, CHANGEPROC stop, CHANGEPROC current, CHANGEPROC rate);
|
||||
|
|
|
@ -334,7 +334,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, WAVEParser_Cleanup);
|
||||
hr = Parser_Create(&(This->Parser), &CLSID_WAVEParser, WAVEParser_Sample, WAVEParser_QueryAccept, WAVEParser_InputPin_PreConnect, WAVEParser_Cleanup, NULL, NULL, NULL);
|
||||
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
|
Loading…
Reference in New Issue