Zebediah Figura : wineqtdecoder: Use strmbase filter state change methods.
Alexandre Julliard
julliard at winehq.org
Wed Dec 4 16:13:03 CST 2019
Module: wine
Branch: master
Commit: 498179b4482026091bf7376c0d2ac9a036e7ca0e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=498179b4482026091bf7376c0d2ac9a036e7ca0e
Author: Zebediah Figura <z.figura12 at 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 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at 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,
More information about the wine-cvs
mailing list