Module: wine Branch: master Commit: 5ea2267f28f1b2043458722690a945904af79c80 URL: https://source.winehq.org/git/wine.git/?a=commit;h=5ea2267f28f1b204345872269...
Author: Zebediah Figura z.figura12@gmail.com Date: Sat Dec 7 22:20:37 2019 -0600
qcap/avimux: Use BaseOutputPinImpl_Connect().
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@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,