Maarten Lankhorst : quartz: Allow parser filters to implement their own seeking methods.

Alexandre Julliard julliard at winehq.org
Tue Apr 1 16:44:14 CDT 2008


Module: wine
Branch: master
Commit: 1544e5239723522ede0054f033cf2067d9f59971
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1544e5239723522ede0054f033cf2067d9f59971

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Tue Mar 25 16:11:22 2008 -0700

quartz: Allow parser filters to implement their own seeking methods.

---

 dlls/quartz/avisplit.c   |    2 +-
 dlls/quartz/mpegsplit.c  |    2 +-
 dlls/quartz/parser.c     |   23 ++++++++++++++++-------
 dlls/quartz/parser.h     |    2 +-
 dlls/quartz/waveparser.c |    2 +-
 5 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/dlls/quartz/avisplit.c b/dlls/quartz/avisplit.c
index 140b0df..0d9aed7 100644
--- a/dlls/quartz/avisplit.c
+++ b/dlls/quartz/avisplit.c
@@ -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;
diff --git a/dlls/quartz/mpegsplit.c b/dlls/quartz/mpegsplit.c
index 0ecafc8..0dbc3c5 100644
--- a/dlls/quartz/mpegsplit.c
+++ b/dlls/quartz/mpegsplit.c
@@ -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);
diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c
index 8fdf939..b7bb270 100644
--- a/dlls/quartz/parser.c
+++ b/dlls/quartz/parser.c
@@ -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;
 }
 
diff --git a/dlls/quartz/parser.h b/dlls/quartz/parser.h
index 876f0fc..0bba062 100644
--- a/dlls/quartz/parser.h
+++ b/dlls/quartz/parser.h
@@ -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);
diff --git a/dlls/quartz/waveparser.c b/dlls/quartz/waveparser.c
index 3d4bd74..55fad4c 100644
--- a/dlls/quartz/waveparser.c
+++ b/dlls/quartz/waveparser.c
@@ -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;




More information about the wine-cvs mailing list