Zebediah Figura : qcap/avimux: Use BaseOutputPinImpl_Connect().
Alexandre Julliard
julliard at winehq.org
Mon Dec 9 16:57:35 CST 2019
Module: wine
Branch: master
Commit: 5ea2267f28f1b2043458722690a945904af79c80
URL: https://source.winehq.org/git/wine.git/?a=commit;h=5ea2267f28f1b2043458722690a945904af79c80
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Sat Dec 7 22:20:37 2019 -0600
qcap/avimux: Use BaseOutputPinImpl_Connect().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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 d2f29dbbeb..677e79ef68 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,
More information about the wine-cvs
mailing list