From: Alistair Leslie-Hughes leslie_alistair@hotmail.com
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wineqtdecoder/qtsplitter.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 5b1e82ebc9b..0dbc3d8bf19 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -285,7 +285,7 @@ static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE QTSplitter *filter = impl_from_strmbase_filter(iface); HRESULT hr = VFW_E_NOT_CONNECTED, pin_hr;
- EnterCriticalSection(&This->csReceive); + EnterCriticalSection(&filter->csReceive);
if (filter->pVideo_Pin) pin_hr = BaseOutputPinImpl_Active(&filter->pVideo_Pin->pin); @@ -297,7 +297,7 @@ static HRESULT qt_splitter_start_stream(struct strmbase_filter *iface, REFERENCE hr = pin_hr; SetEvent(filter->runEvent);
- LeaveCriticalSection(&This->csReceive); + LeaveCriticalSection(&filter->csReceive);
return hr; } @@ -306,10 +306,10 @@ static HRESULT qt_splitter_cleanup_stream(struct strmbase_filter *iface) { QTSplitter *filter = impl_from_strmbase_filter(iface);
- EnterCriticalSection(&This->csReceive); + EnterCriticalSection(&filter->csReceive); IAsyncReader_BeginFlush(filter->pInputPin.pReader); IAsyncReader_EndFlush(filter->pInputPin.pReader); - LeaveCriticalSection(&This->csReceive); + LeaveCriticalSection(&filter->csReceive);
return S_OK; }
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wineqtdecoder/qtsplitter.c | 53 ++++++++++++++++----------------- 1 file changed, 26 insertions(+), 27 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 0dbc3d8bf19..1db6dfd6ad7 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -131,6 +131,7 @@ extern CLSID CLSID_QTSplitter; typedef struct QTOutPin { struct strmbase_source pin; IQualityControl IQualityControl_iface; + SourceSeeking seeking;
AM_MEDIA_TYPE * pmt; OutputQueue * queue; @@ -162,7 +163,6 @@ typedef struct QTSplitter { DWORD outputSize; CRITICAL_SECTION csReceive;
- SourceSeeking sourceSeeking; TimeValue movie_time; TimeValue movie_start; TimeScale movie_scale; @@ -183,9 +183,9 @@ static HRESULT WINAPI QTSplitter_ChangeStart(IMediaSeeking *iface); static HRESULT WINAPI QTSplitter_ChangeStop(IMediaSeeking *iface); static HRESULT WINAPI QTSplitter_ChangeRate(IMediaSeeking *iface);
-static inline QTSplitter *impl_from_IMediaSeeking( IMediaSeeking *iface ) +static inline QTOutPin *impl_from_IMediaSeeking(IMediaSeeking *iface) { - return CONTAINING_RECORD(iface, QTSplitter, sourceSeeking.IMediaSeeking_iface); + return CONTAINING_RECORD(iface, QTOutPin, seeking.IMediaSeeking_iface); }
static inline QTSplitter *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -374,9 +374,6 @@ IUnknown * CALLBACK QTSplitter_create(IUnknown *outer, HRESULT *phr) This->pInputPin.pin.peer = NULL; This->pInputPin.pin.pFuncsTable = &sink_ops;
- strmbase_seeking_init(&This->sourceSeeking, &QT_Seeking_Vtbl, - QTSplitter_ChangeStop, QTSplitter_ChangeStart, QTSplitter_ChangeRate); - *phr = S_OK; return &This->filter.IUnknown_inner; } @@ -731,6 +728,7 @@ static void free_source_pin(QTOutPin *pin) }
DeleteMediaType(pin->pmt); + strmbase_seeking_cleanup(&pin->seeking); strmbase_source_cleanup(&pin->pin); heap_free(pin); } @@ -914,7 +912,7 @@ static HRESULT QT_Process_Movie(QTSplitter* filter) Track trk; short id = 0; DWORD tid; - LONGLONG time; + LONGLONG time, duration;
TRACE("Trying movie connect\n");
@@ -955,10 +953,12 @@ static HRESULT QT_Process_Movie(QTSplitter* filter)
time = GetMovieDuration(filter->pQTMovie); filter->movie_scale = GetMovieTimeScale(filter->pQTMovie); - filter->sourceSeeking.llDuration = ((double)time / filter->movie_scale) * 10000000; - filter->sourceSeeking.llStop = filter->sourceSeeking.llDuration; - - TRACE("Movie duration is %s\n",wine_dbgstr_longlong(filter->sourceSeeking.llDuration)); + duration = ((double)time / filter->movie_scale) * 10000000; + TRACE("Movie duration is %s.\n", wine_dbgstr_longlong(duration)); + if (filter->pVideo_Pin) + filter->pVideo_Pin->seeking.llStop = filter->pVideo_Pin->seeking.llDuration = duration; + if (filter->pAudio_Pin) + filter->pAudio_Pin->seeking.llStop = filter->pAudio_Pin->seeking.llDuration = duration;
filter->loaderThread = CreateThread(NULL, 0, QTSplitter_loading_thread, filter, 0, &tid); if (filter->loaderThread) @@ -1171,7 +1171,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)) - *ppv = &This->sourceSeeking.IMediaSeeking_iface; + *ppv = &This->seeking.IMediaSeeking_iface; else if (IsEqualIID(riid, &IID_IQualityControl)) *ppv = &This->IQualityControl_iface;
@@ -1328,6 +1328,8 @@ static HRESULT QT_AddPin(QTSplitter *filter, const WCHAR *name, pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); CopyMediaType(pin->pmt, mt); pin->IQualityControl_iface.lpVtbl = &QTOutPin_QualityControl_Vtbl; + strmbase_seeking_init(&pin->seeking, &QT_Seeking_Vtbl, + QTSplitter_ChangeStop, QTSplitter_ChangeStart, QTSplitter_ChangeRate); BaseFilterImpl_IncrementPinVersion(&filter->filter);
return OutputQueue_Construct(&pin->pin, TRUE, TRUE, 5, FALSE, @@ -1336,12 +1338,12 @@ static HRESULT QT_AddPin(QTSplitter *filter, const WCHAR *name,
static HRESULT WINAPI QTSplitter_ChangeStart(IMediaSeeking *iface) { - QTSplitter *This = impl_from_IMediaSeeking(iface); + QTOutPin *pin = impl_from_IMediaSeeking(iface); + QTSplitter *filter = impl_from_strmbase_filter(pin->pin.pin.filter); TRACE("(%p)\n", iface); - EnterCriticalSection(&This->csReceive); - This->movie_time = (This->sourceSeeking.llCurrent * This->movie_scale)/10000000; - This->movie_start = This->movie_time; - LeaveCriticalSection(&This->csReceive); + EnterCriticalSection(&filter->csReceive); + filter->movie_start = filter->movie_time = (pin->seeking.llCurrent * filter->movie_scale)/10000000; + LeaveCriticalSection(&filter->csReceive); return S_OK; }
@@ -1357,25 +1359,22 @@ static HRESULT WINAPI QTSplitter_ChangeRate(IMediaSeeking *iface) return S_OK; }
-static HRESULT WINAPI QT_Seeking_QueryInterface(IMediaSeeking * iface, REFIID riid, LPVOID * ppv) +static HRESULT WINAPI QT_Seeking_QueryInterface(IMediaSeeking *iface, REFIID iid, void **out) { - QTSplitter *This = impl_from_IMediaSeeking(iface); - - return IBaseFilter_QueryInterface(&This->filter.IBaseFilter_iface, riid, ppv); + QTOutPin *pin = impl_from_IMediaSeeking(iface); + return IPin_QueryInterface(&pin->pin.pin.IPin_iface, iid, out); }
static ULONG WINAPI QT_Seeking_AddRef(IMediaSeeking * iface) { - QTSplitter *This = impl_from_IMediaSeeking(iface); - - return IBaseFilter_AddRef(&This->filter.IBaseFilter_iface); + QTOutPin *pin = impl_from_IMediaSeeking(iface); + return IPin_AddRef(&pin->pin.pin.IPin_iface); }
static ULONG WINAPI QT_Seeking_Release(IMediaSeeking * iface) { - QTSplitter *This = impl_from_IMediaSeeking(iface); - - return IBaseFilter_Release(&This->filter.IBaseFilter_iface); + QTOutPin *pin = impl_from_IMediaSeeking(iface); + return IPin_Release(&pin->pin.pin.IPin_iface); }
static const IMediaSeekingVtbl QT_Seeking_Vtbl =
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/winegstreamer/gstdemux.c | 63 ++++++++--------------------------- 1 file changed, 13 insertions(+), 50 deletions(-)
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 78c8e38701a..04fb54915c6 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1735,29 +1735,19 @@ static inline struct gstdemux_source *impl_source_from_IPin(IPin *iface) return CONTAINING_RECORD(iface, struct gstdemux_source, pin.pin.IPin_iface); }
-static HRESULT WINAPI GSTOutPin_QueryInterface(IPin *iface, REFIID riid, void **ppv) +static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - struct gstdemux_source *This = impl_source_from_IPin(iface); + struct gstdemux_source *pin = impl_source_from_IPin(&iface->IPin_iface);
- TRACE("(%p)->(%s, %p)\n", This, 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)) - *ppv = &This->seek; - else if (IsEqualIID(riid, &IID_IQualityControl)) - *ppv = &This->IQualityControl_iface; + if (IsEqualGUID(iid, &IID_IMediaSeeking)) + *out = &pin->seek.IMediaSeeking_iface; + else if (IsEqualGUID(iid, &IID_IQualityControl)) + *out = &pin->IQualityControl_iface; + else + return E_NOINTERFACE;
- if (*ppv) { - IUnknown_AddRef((IUnknown *)(*ppv)); - return S_OK; - } - FIXME("No interface for %s!\n", debugstr_guid(riid)); - return E_NOINTERFACE; + IUnknown_AddRef((IUnknown *)*out); + return S_OK; }
static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt) @@ -1847,7 +1837,7 @@ static void free_source_pin(struct gstdemux_source *pin) }
static const IPinVtbl GST_OutputPin_Vtbl = { - GSTOutPin_QueryInterface, + BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, BaseOutputPinImpl_Connect, @@ -1869,6 +1859,7 @@ static const IPinVtbl GST_OutputPin_Vtbl = {
static const struct strmbase_source_ops source_ops = { + .base.pin_query_interface = source_query_interface, .base.pin_query_accept = source_query_accept, .base.pin_get_media_type = source_get_media_type, .pfnAttemptConnection = BaseOutputPinImpl_AttemptConnection, @@ -2071,36 +2062,8 @@ static HRESULT WINAPI GSTInPin_NewSegment(IPin *iface, REFERENCE_TIME start, return S_OK; }
-static HRESULT WINAPI GSTInPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) -{ - struct gstdemux *filter = impl_from_sink_IPin(iface); - - TRACE("filter %p, riid %s, ppv %p.\n", filter, 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(&filter->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 GST_InputPin_Vtbl = { - GSTInPin_QueryInterface, + BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, BaseInputPinImpl_Connect,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/wineqtdecoder/qtsplitter.c | 45 ++++++++++----------------------- 1 file changed, 13 insertions(+), 32 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 1db6dfd6ad7..2ce06a7f590 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -1140,15 +1140,7 @@ static const IPinVtbl QT_InputPin_Vtbl = { QTInPin_NewSegment };
-/* - * Output Pin - */ -static inline QTOutPin *impl_QTOutPin_from_IPin( IPin *iface ) -{ - return CONTAINING_RECORD(iface, QTOutPin, pin.pin.IPin_iface); -} - -static inline QTOutPin *impl_sink_from_strmbase_pin(struct strmbase_pin *iface) +static inline QTOutPin *impl_source_from_strmbase_pin(struct strmbase_pin *iface) { return CONTAINING_RECORD(iface, QTOutPin, pin.pin); } @@ -1158,30 +1150,19 @@ static inline QTOutPin *impl_QTOutPin_from_BaseOutputPin(struct strmbase_source return CONTAINING_RECORD(iface, QTOutPin, pin); }
-static HRESULT WINAPI QTOutPin_QueryInterface(IPin *iface, REFIID riid, void **ppv) +static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) { - QTOutPin *This = impl_QTOutPin_from_IPin(iface); - - TRACE("(%s, %p)\n", debugstr_guid(riid), ppv); - - *ppv = NULL; + QTOutPin *pin = impl_source_from_strmbase_pin(&iface->IPin_iface);
- if (IsEqualIID(riid, &IID_IUnknown)) - *ppv = iface; - else if (IsEqualIID(riid, &IID_IPin)) - *ppv = iface; - else if (IsEqualIID(riid, &IID_IMediaSeeking)) - *ppv = &This->seeking.IMediaSeeking_iface; - else if (IsEqualIID(riid, &IID_IQualityControl)) - *ppv = &This->IQualityControl_iface; + if (IsEqualGUID(iid, &IID_IMediaSeeking)) + *out = &pin->seeking.IMediaSeeking_iface; + else if (IsEqualGUID(iid, &IID_IQualityControl)) + *out = &pin->IQualityControl_iface; + else + return E_NOINTERFACE;
- if (*ppv) - { - IUnknown_AddRef((IUnknown *)(*ppv)); - return S_OK; - } - FIXME("No interface for %s!\n", debugstr_guid(riid)); - return E_NOINTERFACE; + IUnknown_AddRef((IUnknown *)*out); + return S_OK; }
static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt) @@ -1192,7 +1173,7 @@ static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYP
static HRESULT source_get_media_type(struct strmbase_pin *iface, unsigned int iPosition, AM_MEDIA_TYPE *pmt) { - QTOutPin *This = impl_sink_from_strmbase_pin(iface); + QTOutPin *This = impl_source_from_strmbase_pin(iface);
if (iPosition > 0) return VFW_S_NO_MORE_ITEMS; @@ -1231,7 +1212,7 @@ static HRESULT WINAPI QTOutPin_DecideAllocator(struct strmbase_source *iface, }
static const IPinVtbl QT_OutputPin_Vtbl = { - QTOutPin_QueryInterface, + BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, BaseOutputPinImpl_Connect,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qcap/avimux.c | 94 +++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 48 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c index dc28104c80a..645f0b7d5e4 100644 --- a/dlls/qcap/avimux.c +++ b/dlls/qcap/avimux.c @@ -1108,6 +1108,24 @@ static const ISpecifyPropertyPagesVtbl SpecifyPropertyPagesVtbl = { SpecifyPropertyPages_GetPages };
+static inline AviMux *impl_from_source_pin(struct strmbase_pin *iface) +{ + return CONTAINING_RECORD(iface, AviMux, source.pin); +} + +static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) +{ + AviMux *filter = impl_from_source_pin(iface); + + if (IsEqualGUID(iid, &IID_IQualityControl)) + *out = &filter->IQualityControl_iface; + else + return E_NOINTERFACE; + + IUnknown_AddRef((IUnknown *)*out); + return S_OK; +} + static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt) { FIXME("(%p) stub\n", base); @@ -1176,6 +1194,7 @@ static HRESULT WINAPI AviMuxOut_DecideAllocator(struct strmbase_source *base,
static const struct strmbase_source_ops source_ops = { + .base.pin_query_interface = source_query_interface, .base.pin_query_accept = source_query_accept, .base.pin_get_media_type = source_get_media_type, .pfnAttemptConnection = AviMuxOut_AttemptConnection, @@ -1187,26 +1206,6 @@ static inline AviMux *impl_from_out_IPin(IPin *iface) return CONTAINING_RECORD(iface, AviMux, source.pin.IPin_iface); }
-static HRESULT WINAPI AviMuxOut_QueryInterface(IPin *iface, REFIID riid, void **ppv) -{ - AviMux *This = impl_from_out_IPin(iface); - - TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); - - if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPin)) - *ppv = iface; - else if(IsEqualIID(riid, &IID_IQualityControl)) - *ppv = &This->IQualityControl_iface; - else { - FIXME("no interface for %s\n", debugstr_guid(riid)); - *ppv = NULL; - return E_NOINTERFACE; - } - - IUnknown_AddRef((IUnknown*)*ppv); - return S_OK; -} - static HRESULT WINAPI AviMuxOut_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) { @@ -1250,7 +1249,7 @@ static HRESULT WINAPI AviMuxOut_Disconnect(IPin *iface) }
static const IPinVtbl AviMuxOut_PinVtbl = { - AviMuxOut_QueryInterface, + BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, AviMuxOut_Connect, @@ -1321,6 +1320,30 @@ static const IQualityControlVtbl AviMuxOut_QualityControlVtbl = { AviMuxOut_QualityControl_SetSink };
+static inline AviMuxIn *impl_sink_from_strmbase_pin(struct strmbase_pin *iface) +{ + return CONTAINING_RECORD(iface, AviMuxIn, pin.pin.IPin_iface); +} + +static HRESULT sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out) +{ + AviMuxIn *pin = impl_sink_from_strmbase_pin(iface); + + if (IsEqualGUID(iid, &IID_IAMStreamControl)) + *out = &pin->IAMStreamControl_iface; + else if (IsEqualGUID(iid, &IID_IMemInputPin)) + *out = &pin->pin.IMemInputPin_iface; + else if (IsEqualGUID(iid, &IID_IPropertyBag)) + *out = &pin->IPropertyBag_iface; + else if (IsEqualGUID(iid, &IID_IQualityControl)) + *out = &pin->IQualityControl_iface; + else + return E_NOINTERFACE; + + IUnknown_AddRef((IUnknown *)*out); + return S_OK; +} + static HRESULT sink_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *pmt) { if(IsEqualIID(&pmt->majortype, &MEDIATYPE_Audio) && @@ -1441,6 +1464,7 @@ static HRESULT WINAPI AviMuxIn_Receive(struct strmbase_sink *base, IMediaSample
static const struct strmbase_sink_ops sink_ops = { + .base.pin_query_interface = sink_query_interface, .base.pin_query_accept = sink_query_accept, .base.pin_get_media_type = strmbase_pin_get_media_type, .pfnReceive = AviMuxIn_Receive, @@ -1457,32 +1481,6 @@ static inline AviMuxIn* AviMuxIn_from_IPin(IPin *iface) return CONTAINING_RECORD(iface, AviMuxIn, pin.pin.IPin_iface); }
-static HRESULT WINAPI AviMuxIn_QueryInterface(IPin *iface, REFIID riid, void **ppv) -{ - AviMuxIn *avimuxin = AviMuxIn_from_IPin(iface); - - TRACE("pin %p, riid %s, ppv %p.\n", avimuxin, debugstr_guid(riid), ppv); - - if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPin)) - *ppv = &avimuxin->pin.pin.IPin_iface; - else if(IsEqualIID(riid, &IID_IAMStreamControl)) - *ppv = &avimuxin->IAMStreamControl_iface; - else if(IsEqualIID(riid, &IID_IMemInputPin)) - *ppv = &avimuxin->pin.IMemInputPin_iface; - else if(IsEqualIID(riid, &IID_IPropertyBag)) - *ppv = &avimuxin->IPropertyBag_iface; - else if(IsEqualIID(riid, &IID_IQualityControl)) - *ppv = &avimuxin->IQualityControl_iface; - else { - FIXME("no interface for %s\n", debugstr_guid(riid)); - *ppv = NULL; - return E_NOINTERFACE; - } - - IUnknown_AddRef((IUnknown*)*ppv); - return S_OK; -} - static HRESULT WINAPI AviMuxIn_ReceiveConnection(IPin *iface, IPin *pConnector, const AM_MEDIA_TYPE *pmt) { @@ -1576,7 +1574,7 @@ static HRESULT WINAPI AviMuxIn_Disconnect(IPin *iface) }
static const IPinVtbl AviMuxIn_PinVtbl = { - AviMuxIn_QueryInterface, + BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, BaseInputPinImpl_Connect,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qcap/avimux.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c index 645f0b7d5e4..d2f29dbbeb0 100644 --- a/dlls/qcap/avimux.c +++ b/dlls/qcap/avimux.c @@ -1230,21 +1230,6 @@ static HRESULT WINAPI AviMuxOut_Connect(IPin *iface, } }
- if(hr == S_OK) - IBaseFilter_AddRef(&This->filter.IBaseFilter_iface); - return hr; -} - -static HRESULT WINAPI AviMuxOut_Disconnect(IPin *iface) -{ - AviMux *This = impl_from_out_IPin(iface); - HRESULT hr; - - TRACE("(%p)\n", This); - - hr = BaseOutputPinImpl_Disconnect(iface); - if(hr == S_OK) - IBaseFilter_Release(&This->filter.IBaseFilter_iface); return hr; }
@@ -1254,7 +1239,7 @@ static const IPinVtbl AviMuxOut_PinVtbl = { BasePinImpl_Release, AviMuxOut_Connect, BaseOutputPinImpl_ReceiveConnection, - AviMuxOut_Disconnect, + BaseOutputPinImpl_Disconnect, BasePinImpl_ConnectedTo, BasePinImpl_ConnectionMediaType, BasePinImpl_QueryPinInfo,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qcap/avimux.c | 58 +++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 37 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c index d2f29dbbeb0..677e79ef68f 100644 --- a/dlls/qcap/avimux.c +++ b/dlls/qcap/avimux.c @@ -1132,19 +1132,35 @@ static HRESULT source_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYP return S_OK; }
-static HRESULT WINAPI AviMuxOut_AttemptConnection(struct strmbase_source *base, +static HRESULT WINAPI AviMuxOut_AttemptConnection(struct strmbase_source *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) { + AviMux *filter = impl_from_source_pin(&iface->pin); PIN_DIRECTION dir; + unsigned int i; HRESULT hr;
- TRACE("(%p)->(%p AM_MEDIA_TYPE(%p))\n", base, pReceivePin, pmt); - hr = IPin_QueryDirection(pReceivePin, &dir); if(hr==S_OK && dir!=PINDIR_INPUT) return VFW_E_INVALID_DIRECTION;
- return BaseOutputPinImpl_AttemptConnection(base, pReceivePin, pmt); + if (FAILED(hr = BaseOutputPinImpl_AttemptConnection(iface, pReceivePin, pmt))) + return hr; + + for (i = 0; i < filter->input_pin_no; ++i) + { + if (!filter->in[i]->pin.pin.peer) + continue; + + hr = IFilterGraph_Reconnect(filter->filter.filterInfo.pGraph, &filter->in[i]->pin.pin.IPin_iface); + if (FAILED(hr)) + { + IPin_Disconnect(&iface->pin.IPin_iface); + break; + } + } + + return hr; }
static HRESULT source_get_media_type(struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt) @@ -1201,43 +1217,11 @@ static const struct strmbase_source_ops source_ops = .pfnDecideAllocator = AviMuxOut_DecideAllocator, };
-static inline AviMux *impl_from_out_IPin(IPin *iface) -{ - return CONTAINING_RECORD(iface, AviMux, source.pin.IPin_iface); -} - -static HRESULT WINAPI AviMuxOut_Connect(IPin *iface, - IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) -{ - AviMux *This = impl_from_out_IPin(iface); - HRESULT hr; - int i; - - TRACE("(%p)->(%p AM_MEDIA_TYPE(%p))\n", This, pReceivePin, pmt); - - hr = BaseOutputPinImpl_Connect(iface, pReceivePin, pmt); - if(FAILED(hr)) - return hr; - - for(i=0; i<This->input_pin_no; i++) { - if(!This->in[i]->pin.pin.peer) - continue; - - hr = IFilterGraph_Reconnect(This->filter.filterInfo.pGraph, &This->in[i]->pin.pin.IPin_iface); - if(FAILED(hr)) { - BaseOutputPinImpl_Disconnect(iface); - break; - } - } - - return hr; -} - static const IPinVtbl AviMuxOut_PinVtbl = { BasePinImpl_QueryInterface, BasePinImpl_AddRef, BasePinImpl_Release, - AviMuxOut_Connect, + BaseOutputPinImpl_Connect, BaseOutputPinImpl_ReceiveConnection, BaseOutputPinImpl_Disconnect, BasePinImpl_ConnectedTo,
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qcap/avico.c | 24 +--------------- dlls/qcap/avimux.c | 24 +--------------- dlls/qcap/smartteefilter.c | 48 ++----------------------------- dlls/qcap/vfwcapture.c | 25 +--------------- dlls/qedit/samplegrabber.c | 24 +--------------- dlls/quartz/filesource.c | 26 +---------------- dlls/quartz/tests/videorenderer.c | 24 +--------------- dlls/quartz/tests/vmr7.c | 24 +--------------- dlls/quartz/tests/vmr9.c | 24 +--------------- dlls/strmbase/pin.c | 38 ++++++++++++++++++------ dlls/strmbase/transform.c | 26 +---------------- dlls/winegstreamer/gstdemux.c | 25 +--------------- dlls/wineqtdecoder/qtsplitter.c | 25 +--------------- include/wine/strmbase.h | 10 +------ 14 files changed, 44 insertions(+), 323 deletions(-)
diff --git a/dlls/qcap/avico.c b/dlls/qcap/avico.c index 9365c437b4f..debe6bca386 100644 --- a/dlls/qcap/avico.c +++ b/dlls/qcap/avico.c @@ -473,27 +473,6 @@ static const struct strmbase_sink_ops sink_ops = .pfnReceive = AVICompressorIn_Receive, };
-static const IPinVtbl AVICompressorOutputPinVtbl = { - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - static HRESULT source_get_media_type(struct strmbase_pin *base, unsigned int iPosition, AM_MEDIA_TYPE *amt) { AVICompressor *This = impl_from_strmbase_filter(base->filter); @@ -564,8 +543,7 @@ IUnknown* WINAPI QCAP_createAVICompressor(IUnknown *outer, HRESULT *phr)
strmbase_sink_init(&compressor->sink, &AVICompressorInputPinVtbl, &compressor->filter, sink_name, &sink_ops, NULL); - strmbase_source_init(&compressor->source, &AVICompressorOutputPinVtbl, - &compressor->filter, source_name, &source_ops); + strmbase_source_init(&compressor->source, &compressor->filter, source_name, &source_ops);
*phr = S_OK; return &compressor->filter.IUnknown_inner; diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c index 677e79ef68f..c344ab47266 100644 --- a/dlls/qcap/avimux.c +++ b/dlls/qcap/avimux.c @@ -1217,27 +1217,6 @@ static const struct strmbase_source_ops source_ops = .pfnDecideAllocator = AviMuxOut_DecideAllocator, };
-static const IPinVtbl AviMuxOut_PinVtbl = { - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - static inline AviMux* impl_from_out_IQualityControl(IQualityControl *iface) { return CONTAINING_RECORD(iface, AviMux, IQualityControl_iface); @@ -1923,8 +1902,7 @@ IUnknown * WINAPI QCAP_createAVIMux(IUnknown *outer, HRESULT *phr) info.dir = PINDIR_OUTPUT; info.pFilter = &avimux->filter.IBaseFilter_iface; lstrcpyW(info.achName, output_name); - strmbase_source_init(&avimux->source, &AviMuxOut_PinVtbl, &avimux->filter, - output_name, &source_ops); + strmbase_source_init(&avimux->source, &avimux->filter, output_name, &source_ops); avimux->IQualityControl_iface.lpVtbl = &AviMuxOut_QualityControlVtbl; avimux->cur_stream = 0; avimux->cur_time = 0; diff --git a/dlls/qcap/smartteefilter.c b/dlls/qcap/smartteefilter.c index 7762ec1e500..929929632f1 100644 --- a/dlls/qcap/smartteefilter.c +++ b/dlls/qcap/smartteefilter.c @@ -275,27 +275,6 @@ static const struct strmbase_sink_ops sink_ops = .pfnReceive = SmartTeeFilterInput_Receive, };
-static const IPinVtbl SmartTeeFilterCaptureVtbl = { - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - static HRESULT capture_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt) { FIXME("(%p) stub\n", base); @@ -339,27 +318,6 @@ static const struct strmbase_source_ops capture_ops = .pfnDecideAllocator = SmartTeeFilterCapture_DecideAllocator, };
-static const IPinVtbl SmartTeeFilterPreviewVtbl = { - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - static HRESULT preview_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE *amt) { FIXME("(%p) stub\n", base); @@ -410,10 +368,8 @@ IUnknown* WINAPI QCAP_createSmartTeeFilter(IUnknown *outer, HRESULT *phr) return NULL; }
- strmbase_source_init(&object->capture, &SmartTeeFilterCaptureVtbl, - &object->filter, captureW, &capture_ops); - strmbase_source_init(&object->preview, &SmartTeeFilterPreviewVtbl, - &object->filter, previewW, &preview_ops); + strmbase_source_init(&object->capture, &object->filter, captureW, &capture_ops); + strmbase_source_init(&object->preview, &object->filter, previewW, &preview_ops);
*phr = S_OK; return &object->filter.IUnknown_inner; diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c index e7522ea9b36..2185053ecd0 100644 --- a/dlls/qcap/vfwcapture.c +++ b/dlls/qcap/vfwcapture.c @@ -559,28 +559,6 @@ static const struct strmbase_source_ops source_ops = .pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator, };
-static const IPinVtbl VfwPin_Vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - IUnknown * WINAPI QCAP_createVFWCaptureFilter(IUnknown *outer, HRESULT *phr) { static const WCHAR source_name[] = {'O','u','t','p','u','t',0}; @@ -599,8 +577,7 @@ IUnknown * WINAPI QCAP_createVFWCaptureFilter(IUnknown *outer, HRESULT *phr) object->IPersistPropertyBag_iface.lpVtbl = &IPersistPropertyBag_VTable; object->init = FALSE;
- strmbase_source_init(&object->source, &VfwPin_Vtbl, &object->filter, - source_name, &source_ops); + strmbase_source_init(&object->source, &object->filter, source_name, &source_ops);
object->IKsPropertySet_iface.lpVtbl = &IKsPropertySet_VTable;
diff --git a/dlls/qedit/samplegrabber.c b/dlls/qedit/samplegrabber.c index 019af5c35de..f8d90a5c0df 100644 --- a/dlls/qedit/samplegrabber.c +++ b/dlls/qedit/samplegrabber.c @@ -660,28 +660,6 @@ static const struct strmbase_source_ops source_ops = .pfnAttemptConnection = sample_grabber_source_AttemptConnection, };
-static const IPinVtbl source_vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment, -}; - HRESULT SampleGrabber_create(IUnknown *outer, void **out) { SG_Impl* obj = NULL; @@ -700,7 +678,7 @@ HRESULT SampleGrabber_create(IUnknown *outer, void **out) obj->IMemInputPin_iface.lpVtbl = &IMemInputPin_VTable;
strmbase_sink_init(&obj->sink, &sink_vtbl, &obj->filter, L"In", &sink_ops, NULL); - strmbase_source_init(&obj->source, &source_vtbl, &obj->filter, L"Out", &source_ops); + strmbase_source_init(&obj->source, &obj->filter, L"Out", &source_ops);
obj->mtype.majortype = GUID_NULL; obj->mtype.subtype = MEDIASUBTYPE_None; diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c index e841391e83a..fb8adb4a3fb 100644 --- a/dlls/quartz/filesource.c +++ b/dlls/quartz/filesource.c @@ -77,7 +77,6 @@ typedef struct AsyncReader HANDLE *handle_list; } AsyncReader;
-static const IPinVtbl FileAsyncReaderPin_Vtbl; static const struct strmbase_source_ops source_ops;
static inline AsyncReader *impl_from_strmbase_filter(struct strmbase_filter *iface) @@ -468,8 +467,7 @@ static HRESULT WINAPI FileSource_Load(IFileSourceFilter * iface, LPCOLESTR pszFi return HRESULT_FROM_WIN32(GetLastError()); }
- strmbase_source_init(&This->source, &FileAsyncReaderPin_Vtbl, &This->filter, - wszOutputPinName, &source_ops); + strmbase_source_init(&This->source, &This->filter, wszOutputPinName, &source_ops); BaseFilterImpl_IncrementPinVersion(&This->filter);
This->file = hFile; @@ -594,28 +592,6 @@ static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, vo return S_OK; }
-static const IPinVtbl FileAsyncReaderPin_Vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BasePinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - /* Function called as a helper to IPin_Connect */ /* specific AM_MEDIA_TYPE - it cannot be NULL */ /* this differs from standard OutputPin_AttemptConnection only in that it diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index d4d9622b415..00a9041a8b4 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -521,28 +521,6 @@ static const struct strmbase_filter_ops testfilter_ops = .filter_destroy = testfilter_destroy, };
-static const IPinVtbl testsource_vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BasePinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment, -}; - static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { return S_OK; @@ -579,7 +557,7 @@ static void testfilter_init(struct testfilter *filter) { static const GUID clsid = {0xabacab}; strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops); - strmbase_source_init(&filter->source, &testsource_vtbl, &filter->filter, L"", &testsource_ops); + strmbase_source_init(&filter->source, &filter->filter, L"", &testsource_ops); }
static void test_allocator(IMemInputPin *input) diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c index 008c84ab30f..dae86bd3fa9 100644 --- a/dlls/quartz/tests/vmr7.c +++ b/dlls/quartz/tests/vmr7.c @@ -881,28 +881,6 @@ static const struct strmbase_filter_ops testfilter_ops = .filter_destroy = testfilter_destroy, };
-static const IPinVtbl testsource_vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BasePinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment, -}; - static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { return S_OK; @@ -939,7 +917,7 @@ static void testfilter_init(struct testfilter *filter) { static const GUID clsid = {0xabacab}; strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops); - strmbase_source_init(&filter->source, &testsource_vtbl, &filter->filter, L"", &testsource_ops); + strmbase_source_init(&filter->source, &filter->filter, L"", &testsource_ops); }
static void test_allocator(IMemInputPin *input) diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c index fd6901d2117..5ece5c6f7bb 100644 --- a/dlls/quartz/tests/vmr9.c +++ b/dlls/quartz/tests/vmr9.c @@ -885,28 +885,6 @@ static const struct strmbase_filter_ops testfilter_ops = .filter_destroy = testfilter_destroy, };
-static const IPinVtbl testsource_vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BasePinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment, -}; - static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt) { return S_OK; @@ -943,7 +921,7 @@ static void testfilter_init(struct testfilter *filter) { static const GUID clsid = {0xabacab}; strmbase_filter_init(&filter->filter, NULL, &clsid, &testfilter_ops); - strmbase_source_init(&filter->source, &testsource_vtbl, &filter->filter, L"", &testsource_ops); + strmbase_source_init(&filter->source, &filter->filter, L"", &testsource_ops); }
static void test_allocator(IMemInputPin *input) diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c index bdc827c6f60..bcac22eb3c4 100644 --- a/dlls/strmbase/pin.c +++ b/dlls/strmbase/pin.c @@ -284,7 +284,7 @@ static inline struct strmbase_source *impl_source_from_IPin( IPin *iface ) return CONTAINING_RECORD(iface, struct strmbase_source, pin.IPin_iface); }
-HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt) +static HRESULT WINAPI source_Connect(IPin *iface, IPin *pReceivePin, const AM_MEDIA_TYPE *pmt) { HRESULT hr; struct strmbase_source *This = impl_source_from_IPin(iface); @@ -375,13 +375,13 @@ HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const return hr; }
-HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin *iface, IPin *pin, const AM_MEDIA_TYPE *pmt) +static HRESULT WINAPI source_ReceiveConnection(IPin *iface, IPin *pin, const AM_MEDIA_TYPE *pmt) { ERR("(%p)->(%p, %p) incoming connection on an output pin!\n", iface, pin, pmt); return E_UNEXPECTED; }
-HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface) +static HRESULT WINAPI source_Disconnect(IPin *iface) { HRESULT hr; struct strmbase_source *This = impl_source_from_IPin(iface); @@ -418,7 +418,7 @@ HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface) return hr; }
-HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface) +static HRESULT WINAPI source_EndOfStream(IPin *iface) { TRACE("(%p)->()\n", iface);
@@ -427,7 +427,7 @@ HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface) return E_UNEXPECTED; }
-HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface) +static HRESULT WINAPI source_BeginFlush(IPin *iface) { TRACE("(%p)->()\n", iface);
@@ -436,7 +436,7 @@ HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface) return E_UNEXPECTED; }
-HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface) +static HRESULT WINAPI source_EndFlush(IPin *iface) { TRACE("(%p)->()\n", iface);
@@ -445,6 +445,28 @@ HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface) return E_UNEXPECTED; }
+static const IPinVtbl source_vtbl = +{ + BasePinImpl_QueryInterface, + BasePinImpl_AddRef, + BasePinImpl_Release, + source_Connect, + source_ReceiveConnection, + source_Disconnect, + BasePinImpl_ConnectedTo, + BasePinImpl_ConnectionMediaType, + BasePinImpl_QueryPinInfo, + BasePinImpl_QueryDirection, + BasePinImpl_QueryId, + BasePinImpl_QueryAccept, + BasePinImpl_EnumMediaTypes, + BasePinImpl_QueryInternalConnections, + source_EndOfStream, + source_BeginFlush, + source_EndFlush, + BasePinImpl_NewSegment, +}; + HRESULT WINAPI BaseOutputPinImpl_GetDeliveryBuffer(struct strmbase_source *This, IMediaSample **ppSample, REFERENCE_TIME *tStart, REFERENCE_TIME *tStop, DWORD dwFlags) { @@ -595,11 +617,11 @@ HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *This, return hr; }
-void strmbase_source_init(struct strmbase_source *pin, const IPinVtbl *vtbl, struct strmbase_filter *filter, +void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_source_ops *func_table) { memset(pin, 0, sizeof(*pin)); - pin->pin.IPin_iface.lpVtbl = vtbl; + pin->pin.IPin_iface.lpVtbl = &source_vtbl; pin->pin.filter = filter; pin->pin.dir = PINDIR_OUTPUT; lstrcpyW(pin->pin.name, name); diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c index 5c079d38e76..7a79f709055 100644 --- a/dlls/strmbase/transform.c +++ b/dlls/strmbase/transform.c @@ -27,7 +27,6 @@ static const WCHAR wcsInputPinName[] = {'I','n',0}; static const WCHAR wcsOutputPinName[] = {'O','u','t',0};
static const IPinVtbl TransformFilter_InputPin_Vtbl; -static const IPinVtbl TransformFilter_OutputPin_Vtbl;
static inline TransformFilter *impl_from_strmbase_filter(struct strmbase_filter *iface) { @@ -338,8 +337,7 @@ static HRESULT strmbase_transform_init(IUnknown *outer, const CLSID *clsid, strmbase_sink_init(&filter->sink, &TransformFilter_InputPin_Vtbl, &filter->filter, wcsInputPinName, &sink_ops, NULL);
- strmbase_source_init(&filter->source, &TransformFilter_OutputPin_Vtbl, &filter->filter, - wcsOutputPinName, &source_ops); + strmbase_source_init(&filter->source, &filter->filter, wcsOutputPinName, &source_ops); filter->source_IQualityControl_iface.lpVtbl = &source_qc_vtbl;
filter->seekthru_unk = NULL; @@ -503,25 +501,3 @@ static const IPinVtbl TransformFilter_InputPin_Vtbl = TransformFilter_InputPin_EndFlush, TransformFilter_InputPin_NewSegment }; - -static const IPinVtbl TransformFilter_OutputPin_Vtbl = -{ - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 04fb54915c6..e7d0313d7ce 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -97,7 +97,6 @@ const char* media_quark_string = "media-sample";
static const WCHAR wcsInputPinName[] = {'i','n','p','u','t',' ','p','i','n',0}; static const IMediaSeekingVtbl GST_Seeking_Vtbl; -static const IPinVtbl GST_OutputPin_Vtbl; static const IPinVtbl GST_InputPin_Vtbl; static const IQualityControlVtbl GSTOutPin_QualityControl_Vtbl;
@@ -1836,27 +1835,6 @@ static void free_source_pin(struct gstdemux_source *pin) heap_free(pin); }
-static const IPinVtbl GST_OutputPin_Vtbl = { - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - static const struct strmbase_source_ops source_ops = { .base.pin_query_interface = source_query_interface, @@ -1879,8 +1857,7 @@ static struct gstdemux_source *create_pin(struct gstdemux *filter, const WCHAR * if (!(pin = heap_alloc_zero(sizeof(*pin)))) return NULL;
- strmbase_source_init(&pin->pin, &GST_OutputPin_Vtbl, &filter->filter, name, - &source_ops); + strmbase_source_init(&pin->pin, &filter->filter, name, &source_ops); pin->caps_event = CreateEventW(NULL, FALSE, FALSE, NULL); pin->segment = gst_segment_new(); gst_segment_init(pin->segment, GST_FORMAT_TIME); diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 2ce06a7f590..d861110f5f1 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -171,7 +171,6 @@ typedef struct QTSplitter { HANDLE splitterThread; } QTSplitter;
-static const IPinVtbl QT_OutputPin_Vtbl; static const IPinVtbl QT_InputPin_Vtbl; static const IBaseFilterVtbl QT_Vtbl; static const IMediaSeekingVtbl QT_Seeking_Vtbl; @@ -1211,27 +1210,6 @@ static HRESULT WINAPI QTOutPin_DecideAllocator(struct strmbase_source *iface, return hr; }
-static const IPinVtbl QT_OutputPin_Vtbl = { - BasePinImpl_QueryInterface, - BasePinImpl_AddRef, - BasePinImpl_Release, - BaseOutputPinImpl_Connect, - BaseOutputPinImpl_ReceiveConnection, - BaseOutputPinImpl_Disconnect, - BasePinImpl_ConnectedTo, - BasePinImpl_ConnectionMediaType, - BasePinImpl_QueryPinInfo, - BasePinImpl_QueryDirection, - BasePinImpl_QueryId, - BasePinImpl_QueryAccept, - BasePinImpl_EnumMediaTypes, - BasePinImpl_QueryInternalConnections, - BaseOutputPinImpl_EndOfStream, - BaseOutputPinImpl_BeginFlush, - BaseOutputPinImpl_EndFlush, - BasePinImpl_NewSegment -}; - static inline QTOutPin *impl_from_IQualityControl( IQualityControl *iface ) { return CONTAINING_RECORD(iface, QTOutPin, IQualityControl_iface); @@ -1304,8 +1282,7 @@ static HRESULT QT_AddPin(QTSplitter *filter, const WCHAR *name, else filter->pAudio_Pin = pin;
- strmbase_source_init(&pin->pin, &QT_OutputPin_Vtbl, &filter->filter, name, - &source_ops); + strmbase_source_init(&pin->pin, &filter->filter, name, &source_ops); pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)); CopyMediaType(pin->pmt, mt); pin->IQualityControl_iface.lpVtbl = &QTOutPin_QualityControl_Vtbl; diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 75eac504209..c3699f19253 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -113,14 +113,6 @@ HRESULT WINAPI BasePinImpl_EnumMediaTypes(IPin * iface, IEnumMediaTypes ** ppEnu HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin, ULONG * cPin); HRESULT WINAPI BasePinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
-/* Base Output Pin */ -HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt); -HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt); -HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface); -HRESULT WINAPI BaseOutputPinImpl_EndOfStream(IPin * iface); -HRESULT WINAPI BaseOutputPinImpl_BeginFlush(IPin * iface); -HRESULT WINAPI BaseOutputPinImpl_EndFlush(IPin * iface); - HRESULT WINAPI BaseOutputPinImpl_GetDeliveryBuffer(struct strmbase_source *pin, IMediaSample **sample, REFERENCE_TIME *start, REFERENCE_TIME *stop, DWORD flags); HRESULT WINAPI BaseOutputPinImpl_Active(struct strmbase_source *pin); @@ -130,7 +122,7 @@ HRESULT WINAPI BaseOutputPinImpl_DecideAllocator(struct strmbase_source *pin, IM HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *pin, IPin *peer, const AM_MEDIA_TYPE *mt);
void strmbase_source_cleanup(struct strmbase_source *pin); -void strmbase_source_init(struct strmbase_source *pin, const IPinVtbl *vtbl, struct strmbase_filter *filter, +void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_source_ops *func_table);
/* Base Input Pin */