Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 753286a7189..e024d271974 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1324,7 +1324,7 @@ static HRESULT gstdemux_wait_state(struct strmbase_filter *iface, DWORD timeout) return S_OK;
ret = gst_element_get_state(filter->container, NULL, NULL, - timeout == INFINITE ? GST_CLOCK_TIME_NONE : timeout * 1000); + timeout == INFINITE ? GST_CLOCK_TIME_NONE : timeout * 1000000); if (ret == GST_STATE_CHANGE_FAILURE) { ERR("Failed to get state.\n");
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- Not compile-tested.
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 81e18d34205..f22e014e1b9 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,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wineqtdecoder/qtsplitter.c | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index f22e014e1b9..c021fec8af3 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -1168,34 +1168,8 @@ static HRESULT WINAPI QTInPin_NewSegment(IPin *iface, REFERENCE_TIME tStart, REF return S_OK; }
-static HRESULT WINAPI QTInPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) -{ - QTInPin *This = impl_from_IPin(iface); - - TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppv); - - *ppv = NULL; - - if (IsEqualIID(riid, &IID_IUnknown)) - *ppv = iface; - else if (IsEqualIID(riid, &IID_IPin)) - *ppv = iface; - else if (IsEqualIID(riid, &IID_IMediaSeeking)) - return IBaseFilter_QueryInterface(&This->pin.filter->IBaseFilter_iface, &IID_IMediaSeeking, ppv); - - if (*ppv) - { - IUnknown_AddRef((IUnknown *)(*ppv)); - return S_OK; - } - - FIXME("No interface for %s!\n", debugstr_guid(riid)); - - return E_NOINTERFACE; -} - static const IPinVtbl QT_InputPin_Vtbl = { - QTInPin_QueryInterface, + BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, BaseInputPinImpl_Connect,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wineqtdecoder/qtsplitter.c | 35 ++------------------------------- 1 file changed, 2 insertions(+), 33 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index c021fec8af3..28ea36785a8 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -381,37 +381,6 @@ IUnknown * CALLBACK QTSplitter_create(IUnknown *outer, HRESULT *phr) return &This->filter.IUnknown_inner; }
-static HRESULT WINAPI QT_QueryInterface(IBaseFilter *iface, REFIID riid, LPVOID *ppv) -{ - QTSplitter *This = impl_from_IBaseFilter(iface); - TRACE("(%s, %p)\n", debugstr_guid(riid), ppv); - - *ppv = NULL; - - if (IsEqualIID(riid, &IID_IUnknown)) - *ppv = This; - else if (IsEqualIID(riid, &IID_IPersist)) - *ppv = This; - else if (IsEqualIID(riid, &IID_IMediaFilter)) - *ppv = This; - else if (IsEqualIID(riid, &IID_IBaseFilter)) - *ppv = This; - else if (IsEqualIID(riid, &IID_IMediaSeeking)) - *ppv = &This->sourceSeeking; - - if (*ppv) - { - IUnknown_AddRef((IUnknown *)(*ppv)); - return S_OK; - } - - if (!IsEqualIID(riid, &IID_IPin) && !IsEqualIID(riid, &IID_IVideoWindow) && - !IsEqualIID(riid, &IID_IAMFilterMiscFlags)) - FIXME("No interface for %s!\n", debugstr_guid(riid)); - - return E_NOINTERFACE; -} - static OSErr QT_Create_Extract_Session(QTSplitter *filter) { AudioStreamBasicDescription aDesc; @@ -753,7 +722,7 @@ audio_error: }
static const IBaseFilterVtbl QT_Vtbl = { - QT_QueryInterface, + BaseFilterImpl_QueryInterface, BaseFilterImpl_AddRef, BaseFilterImpl_Release, BaseFilterImpl_GetClassID, @@ -1220,7 +1189,7 @@ static HRESULT WINAPI QTOutPin_QueryInterface(IPin *iface, REFIID riid, void **p else if (IsEqualIID(riid, &IID_IPin)) *ppv = iface; else if (IsEqualIID(riid, &IID_IMediaSeeking)) - return IBaseFilter_QueryInterface(&This->pin.pin.filter->IBaseFilter_iface, &IID_IMediaSeeking, ppv); + *ppv = &This->sourceSeeking.IMediaSeeking_iface; else if (IsEqualIID(riid, &IID_IQualityControl)) *ppv = &This->IQualityControl_iface;
Manual testing shows that adding or removing the filter does not affect whether it is in one-shot mode.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qedit/samplegrabber.c | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-)
diff --git a/dlls/qedit/samplegrabber.c b/dlls/qedit/samplegrabber.c index 9dd8c02b23d..af05966c140 100644 --- a/dlls/qedit/samplegrabber.c +++ b/dlls/qedit/samplegrabber.c @@ -66,11 +66,6 @@ static inline SG_Impl *impl_from_strmbase_filter(struct strmbase_filter *iface) return CONTAINING_RECORD(iface, SG_Impl, filter); }
-static inline SG_Impl *impl_from_IBaseFilter(IBaseFilter *iface) -{ - return CONTAINING_RECORD(iface, SG_Impl, filter.IBaseFilter_iface); -} - static inline SG_Impl *impl_from_ISampleGrabber(ISampleGrabber *iface) { return CONTAINING_RECORD(iface, SG_Impl, ISampleGrabber_iface); @@ -198,22 +193,6 @@ static void SampleGrabber_callback(SG_Impl *This, IMediaSample *sample) } }
-/* IBaseFilter */ -static HRESULT WINAPI -SampleGrabber_IBaseFilter_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *graph, LPCWSTR name) -{ - SG_Impl *This = impl_from_IBaseFilter(iface); - - TRACE("(%p)->(%p, %s)\n", This, graph, debugstr_w(name)); - - BaseFilterImpl_JoinFilterGraph(iface, graph, name); - This->oneShot = OneShot_None; - - return S_OK; -} - -/* SampleGrabber implementation of ISampleGrabber interface */ - /* IUnknown */ static HRESULT WINAPI SampleGrabber_ISampleGrabber_QueryInterface(ISampleGrabber *iface, REFIID riid, void **ppv) @@ -525,7 +504,7 @@ static const IBaseFilterVtbl IBaseFilter_VTable = BaseFilterImpl_EnumPins, BaseFilterImpl_FindPin, BaseFilterImpl_QueryFilterInfo, - SampleGrabber_IBaseFilter_JoinFilterGraph, + BaseFilterImpl_JoinFilterGraph, BaseFilterImpl_QueryVendorInfo, };