Module: wine Branch: master Commit: 498179b4482026091bf7376c0d2ac9a036e7ca0e URL: https://source.winehq.org/git/wine.git/?a=commit;h=498179b4482026091bf7376c0...
Author: Zebediah Figura z.figura12@gmail.com Date: Tue Dec 3 22:03:28 2019 -0600
wineqtdecoder: Use strmbase filter state change methods.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wineqtdecoder/qtsplitter.c | 107 +++++++++++++++------------------------- 1 file changed, 40 insertions(+), 67 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 81e18d3420..f22e014e1b 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -160,7 +160,6 @@ typedef struct QTSplitter { HANDLE runEvent;
DWORD outputSize; - FILTER_STATE state; CRITICAL_SECTION csReceive;
SourceSeeking sourceSeeking; @@ -281,10 +280,46 @@ static void qt_splitter_destroy(struct strmbase_filter *iface) CoTaskMemFree(filter); }
+static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE_TIME time) +{ + QTSplitter *filter = impl_from_strmbase_filter(iface); + HRESULT hr = VFW_E_NOT_CONNECTED, pin_hr; + + EnterCriticalSection(&This->csReceive); + + if (filter->pVideo_Pin) + pin_hr = BaseOutputPinImpl_Active(&filter->pVideo_Pin->pin); + if (SUCCEEDED(pin_hr)) + hr = pin_hr; + if (filter->pAudio_Pin) + pin_hr = BaseOutputPinImpl_Active(&filter->pAudio_Pin->pin); + if (SUCCEEDED(pin_hr)) + hr = pin_hr; + SetEvent(filter->runEvent); + + LeaveCriticalSection(&This->csReceive); + + return hr; +} + +static HRESULT qt_splitter_cleanup_stream(struct strmbase_filter *iface) +{ + QTSplitter *filter = impl_from_strmbase_filter(iface); + + EnterCriticalSection(&This->csReceive); + IAsyncReader_BeginFlush(filter->pInputPin.pReader); + IAsyncReader_EndFlush(filter->pInputPin.pReader); + LeaveCriticalSection(&This->csReceive); + + return S_OK; +} + static const struct strmbase_filter_ops filter_ops = { .filter_get_pin = qt_splitter_get_pin, .filter_destroy = qt_splitter_destroy, + .filter_start_stream = qt_splitter_start_stream, + .filter_cleanup_stream = qt_splitter_cleanup_stream, };
static HRESULT sink_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) @@ -329,7 +364,6 @@ IUnknown * CALLBACK QTSplitter_create(IUnknown *outer, HRESULT *phr)
This->pVideo_Pin = NULL; This->pAudio_Pin = NULL; - This->state = State_Stopped; This->aSession = NULL; This->runEvent = CreateEventW(NULL, 0, 0, NULL);
@@ -378,28 +412,6 @@ static HRESULT WINAPI QT_QueryInterface(IBaseFilter *iface, REFIID riid, LPVOID return E_NOINTERFACE; }
-static HRESULT WINAPI QT_Stop(IBaseFilter *iface) -{ - QTSplitter *This = impl_from_IBaseFilter(iface); - - TRACE("()\n"); - - EnterCriticalSection(&This->csReceive); - IAsyncReader_BeginFlush(This->pInputPin.pReader); - IAsyncReader_EndFlush(This->pInputPin.pReader); - LeaveCriticalSection(&This->csReceive); - - return S_OK; -} - -static HRESULT WINAPI QT_Pause(IBaseFilter *iface) -{ - HRESULT hr = S_OK; - TRACE("()\n"); - - return hr; -} - static OSErr QT_Create_Extract_Session(QTSplitter *filter) { AudioStreamBasicDescription aDesc; @@ -534,7 +546,6 @@ static DWORD WINAPI QTSplitter_thread(LPVOID data) return 0; }
- This->state = State_Running; /* Prime the pump: Needed for MPEG streams */ GetMovieNextInterestingTime(This->pQTMovie, nextTimeEdgeOK | nextTimeStep, 0, NULL, This->movie_time, 1, &next_time, NULL);
@@ -733,7 +744,6 @@ audio_error: LeaveCriticalSection(&This->csReceive); } while (hr == S_OK);
- This->state = State_Stopped; if (This->pAudio_Pin) OutputQueue_EOS(This->pAudio_Pin->queue); if (This->pVideo_Pin) @@ -742,52 +752,15 @@ audio_error: return hr; }
-static HRESULT WINAPI QT_Run(IBaseFilter *iface, REFERENCE_TIME tStart) -{ - HRESULT hr = S_OK; - QTSplitter *This = impl_from_IBaseFilter(iface); - HRESULT hr_any = VFW_E_NOT_CONNECTED; - - TRACE("(%s)\n", wine_dbgstr_longlong(tStart)); - - EnterCriticalSection(&This->csReceive); - - if (This->pVideo_Pin) - hr = BaseOutputPinImpl_Active(&This->pVideo_Pin->pin); - if (SUCCEEDED(hr)) - hr_any = hr; - if (This->pAudio_Pin) - hr = BaseOutputPinImpl_Active(&This->pAudio_Pin->pin); - if (SUCCEEDED(hr)) - hr_any = hr; - - hr = hr_any; - - SetEvent(This->runEvent); - LeaveCriticalSection(&This->csReceive); - - return hr; -} - -static HRESULT WINAPI QT_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState) -{ - QTSplitter *This = impl_from_IBaseFilter(iface); - TRACE("(%d, %p)\n", dwMilliSecsTimeout, pState); - - *pState = This->state; - - return S_OK; -} - static const IBaseFilterVtbl QT_Vtbl = { QT_QueryInterface, BaseFilterImpl_AddRef, BaseFilterImpl_Release, BaseFilterImpl_GetClassID, - QT_Stop, - QT_Pause, - QT_Run, - QT_GetState, + BaseFilterImpl_Stop, + BaseFilterImpl_Pause, + BaseFilterImpl_Run, + BaseFilterImpl_GetState, BaseFilterImpl_SetSyncSource, BaseFilterImpl_GetSyncSource, BaseFilterImpl_EnumPins,